bonjour à tous,
j'ai une macro VBA qui envoie un fichier via thunderbird dans le genre :
Shell("C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe -compose attachment= .....", 1)
je dois supprimer ledit fichier après envoi ;
pour détecter la fin du shell, j'ai trouvé le truc suivant :
------------------------------------------------------
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Sub AttendreShell(IdApp As Long)
Const PROCESS_QUERY_INFORMATION As Long = &H400
Const STILL_ACTIVE As Long = &H103
Dim lPtrProcess As Long
Dim lExitCode As Long
Dim lResult As Long
lPtrProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, IdApp)
Do
lResult = GetExitCodeProcess(lPtrProcess, lExitCode)
DoEvents
Loop While lExitCode = STILL_ACTIVE
End Sub
Sub test()
Dim IdApp As Long
'IdApp = Shell("c:\windows\system32\notepad.exe", 1)
IdApp = Shell("C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe -compose ", 1)
AttendreShell IdApp
Debug.Print "terminé"
End Sub
----------------------------------------------------------------------------
ça marche nickel avec notepad, qui supporte plusieurs instances du programme
mais avec thunderbird, deux cas possibles :
- thunderbird n'était pas déjà ouvert : il s'ouvre en mode édition , et la fermeture de la fenêtre est bien détectée : ça fonctionne bien !
- thunderbird était déjà ouvert : le lancement du shell ouvre une seconde instance, qui est automatiquement tuée (1 seule instance autorisée) : la fin du programme est détectée avant même l'affichage de la fenêtre édition ; je supprime mon fichier avant l'envoi : envoi impossible.
je ne veux pas fermer préalablement et systématiquement thunderbird, qui est peut être déjà en cours d'édition, ou de lecture de message ou d'agenda ;
je voudrais soit en forcer une seconde instance (sans avoir à créer un nouveau profil, le programme vba est sensé pouvoir tourner sur n'importe quelle machine), soit récupérer le numéro de process de la fenêtre édition de message (mais j'ai un doute, le gestionnaire des taches de windows ne me le montre même pas ...)
zauriez une idée ?
merci d'avance
j'ai une macro VBA qui envoie un fichier via thunderbird dans le genre :
Shell("C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe -compose attachment= .....", 1)
je dois supprimer ledit fichier après envoi ;
pour détecter la fin du shell, j'ai trouvé le truc suivant :
------------------------------------------------------
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Sub AttendreShell(IdApp As Long)
Const PROCESS_QUERY_INFORMATION As Long = &H400
Const STILL_ACTIVE As Long = &H103
Dim lPtrProcess As Long
Dim lExitCode As Long
Dim lResult As Long
lPtrProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, IdApp)
Do
lResult = GetExitCodeProcess(lPtrProcess, lExitCode)
DoEvents
Loop While lExitCode = STILL_ACTIVE
End Sub
Sub test()
Dim IdApp As Long
'IdApp = Shell("c:\windows\system32\notepad.exe", 1)
IdApp = Shell("C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe -compose ", 1)
AttendreShell IdApp
Debug.Print "terminé"
End Sub
----------------------------------------------------------------------------
ça marche nickel avec notepad, qui supporte plusieurs instances du programme
mais avec thunderbird, deux cas possibles :
- thunderbird n'était pas déjà ouvert : il s'ouvre en mode édition , et la fermeture de la fenêtre est bien détectée : ça fonctionne bien !
- thunderbird était déjà ouvert : le lancement du shell ouvre une seconde instance, qui est automatiquement tuée (1 seule instance autorisée) : la fin du programme est détectée avant même l'affichage de la fenêtre édition ; je supprime mon fichier avant l'envoi : envoi impossible.
je ne veux pas fermer préalablement et systématiquement thunderbird, qui est peut être déjà en cours d'édition, ou de lecture de message ou d'agenda ;
je voudrais soit en forcer une seconde instance (sans avoir à créer un nouveau profil, le programme vba est sensé pouvoir tourner sur n'importe quelle machine), soit récupérer le numéro de process de la fenêtre édition de message (mais j'ai un doute, le gestionnaire des taches de windows ne me le montre même pas ...)
zauriez une idée ?
merci d'avance