Fichier en execution sur le poste de l'utilisateur

Résolu
crawler009 Messages postés 33 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 2 avril 2008 - 1 avril 2008 à 09:36
crawler009 Messages postés 33 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 2 avril 2008 - 2 avril 2008 à 08:14
Bonjour,

Voila je cherche une fonction qui me permettrai de savoir si un fichier est ouvert sur le poste où l'application tourne.
J'ai trouvé ca :


Function IsFileOpen(ByVal strFic As String) As Boolean
    Dim fic As Integer
    On Error Resume Next


    fic = FreeFile()
    Open strFic For Input Access Read Lock Read Write As fic


    If Err.Number = 0 Then
        IsFileOpen = False
        Close fic
    Else
        IsFileOpen = True
    End If
End Function

Mais le problème c'est que cette fonction renvoi Vrai également si le fichier est ouvert par un autre utilisateur.
auriez-vous une solution ?

Merci !

4 réponses

crawler009 Messages postés 33 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 08:14
Bon j'ai trouvé une solution.


J'ai trouvé une fonction sur ce site qui me permet de récupéré le Handle d'un fichier en fonction de son nom. Cette fonction cherche parmis les noms des fenetres actives. Elle renvoi 0 si le nom est introuvable.

**********
Public Function HwndFenetre(ByVal Texte As String) As Long
   
    ' Recherche le handle de la première fenêtre contenant
    '   le Texte dans le titre
   
    Dim Titre As String, hWnd As Long, r As Long
   
    ' Handle du bureau
    hWnd = GetDesktopWindow()
    ' Cherche la première fenêtre lui appartenant
    hWnd = GetWindow(hWnd, GW_CHILD)
    Do While hWnd <> 0
        ' Récupère le nom de la fenêtre
        Titre = String(255, " ")
        r = GetWindowText(hWnd, Titre, 255)
        Titre = Left(Titre, r)
        ' Terminé si le nom correspond
        If UCase(Titre) Like UCase("*" & Texte & "*") Then
            HwndFenetre = hWnd
            Exit Do
        End If
        ' Sinon, cherche la fenêtre suivante
        hWnd = GetWindow(hWnd, GW_HWNDNEXT)
        DoEvents
    Loop
   
End Function
**************


En combinant les fonctions IsFileOpen et HwndFenetre, on peut determiner si oui ou non un fichier a été lancé par un autre utilisateur.
3
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
1 avril 2008 à 13:38
Bonjour

C'est normal, si ta fonction ne parvient pas à ouvrir le fichier, elle te retourne True, donc si un autre utilisateur à ouvert le fichier, c'est la cas.

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
crawler009 Messages postés 33 Date d'inscription lundi 5 novembre 2007 Statut Membre Dernière intervention 2 avril 2008
1 avril 2008 à 14:31
Ok merci.

Et y a t il un moyen de savoir si un fichier est ouvert sur son poste sans tester son ouverture ?
Mon application test des fichiers office (doc, xls, ppt) et egalement des pdf.
0
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
1 avril 2008 à 15:15
Bonjour

En théorie c'est possible, mais il faut regarder les handles ouverts par les processus, mais là ça sort de mes capacité actuelles de codage en VB6.

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Mon site
0