Fichier en execution sur le poste de l'utilisateur

Résolu
Signaler
Messages postés
33
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2008
-
Messages postés
33
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2008
-
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

Messages postés
33
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2008

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.
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
33
Date d'inscription
lundi 5 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2008

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.
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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