Attendre la fermeture d'un fichier

Signaler
Messages postés
2
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
1 mai 2007
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
Bonjour,

Je souhaite exécuter un fichier avec son programme par défaut, puis attendre la fermeture de celui-ci.
J'ai déjà trouvé un code source qui fonctionne, seulement ça attend que le programme se termine, donc cela ne fonctionne pas si un fichier associé au programme par défaut est déjà ouvert.

Quelqu'un a-t-il une solution ?

Merci

5 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
Bonjour,
Il te suffit alors de faire une boucle avec gestion d'erreur

Mais je ne comprends pas bien le sens de ta phrase :
"donc cela ne fonctionne pas si un fichier associé au programme par défaut est déjà ouvert."
N'importe quel autre fichier ouvert par ce programme par défaut ou le seul fichier que tu veux ouvrir et qui serait déjà ouvert ?
Si la 2ème hypothèse est la vraie : ouvert par qui et comment, alors ? (car ta boucle d'attente risque fort de paralyser longtemps si tu dépends d'un autre programme ou d'un autre utilisateur ...)
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Regarde ma source sur l'ouverture d'un fichier, j'ai implémener justement une attente de fermeture.

Mais comme tu l'as dis dans ma source aussi, l'attente se fait sur un fichier ouvert par l'appli.

Pou un fichier déjà ouvert, il va falloir récupérer le pid du process. Il faudrait donc modifier la source pour que la variable pid représente le id du process déjà ouvert et non pas celui ouvert par l'instruction Shell.

Pour récupérer le pid, il doit falloir utiliser je pense les api GetWindows et GetWindowThreadProcessId

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Petite modif rapide :

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, _
       ByVal lpDirectory As String, _
       ByVal lpResult As String) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
       ByVal bInheritHandle As Long, _
       ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
       ByVal dwMilliseconds As Long) As Long

Private Const INFINITE = &HFFFFFFFF ' Infinite timeout
Private Const SYNCHRONIZE = &H100000

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Sub AttenteFermeture(nom_appli As String)
Dim pid As Long
Dim pid1 As Long
Dim phnd As Long
Dim hWnd As Long

   hWnd = FindWindow(nom_appli, vbNullString)
   pid = GetWindowThreadProcessId(hWnd, pid1)
   
   If pid <> 0 Then
       phnd = OpenProcess(SYNCHRONIZE, 0, pid1)
       If phnd <> 0 Then
           Call WaitForSingleObject(phnd, INFINITE)
           Call CloseHandle(phnd)
       End If
       
       MsgBox "Fichier fermé"
   Else
       MsgBox "Fichier pas trouvé"
   End If
End Sub
, ----
[code.aspx?ID=41455 By Renfield]

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
2
Date d'inscription
mercredi 11 avril 2007
Statut
Membre
Dernière intervention
1 mai 2007

Ben en fait ce que je veux récupérer, c'est la fermeture du fichier, et non de l'application.
Par exemple, si j'ouvre 2 fichiers "toto.doc" et "titi.doc", je voudrais récupérer séparément la fermeture de ces deux fichiers.

Est-ce possible ?
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Il faudrait effectivement pouvoir récupérer le pid de chacune des fenetres, surtout celle correspondant au fichier à surveiller.

Chose que je n'arrive pas à faire malgré mes essais. C'est toujours l'application que je scrute.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #