djborie65
Messages postés2Date d'inscriptionmercredi 11 avril 2007StatutMembreDernière intervention 1 mai 2007
-
30 avril 2007 à 18:32
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 2014
-
1 mai 2007 à 17:55
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.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 30 avril 2007 à 18:38
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 ...)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 30 avril 2007 à 18: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 #
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 30 avril 2007 à 19:06
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 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
djborie65
Messages postés2Date d'inscriptionmercredi 11 avril 2007StatutMembreDernière intervention 1 mai 2007 1 mai 2007 à 16:50
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?