Bonjour,
pour attendre la fin d'exécution d'un processus, j'utilise cette fonction de la FAQ :
ça fonctionne bien avec Notepad ou un autre programme tel que PaintShopPro, mais si je veux ouvrir une image jpeg avec la visionneuse de Windows :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 { ======================================================================== } procedure ExecAndWait(CommandLine : String); // Execute et attend la fin de l'exécution de commandLine // Exemple : CommandLine := '"Notepad.exe" "C:\temp\essai.txt"'; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; // CommandLine: {$IFDEF UNICODE}WideString{$ELSE}string{$ENDIF}; begin ZeroMemory(@StartupInfo, SizeOf(StartupInfo)); StartupInfo.cb := SizeOf(StartupInfo); if CreateProcess(nil, PChar(CommandLine), nil, nil, FALSE, 0, nil, nil, StartupInfo, ProcessInfo) then begin repeat Application.ProcessMessages; until WaitForSingleObject(ProcessInfo.hProcess, 200) <> WAIT_TIMEOUT; CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); // ShowMessage('Terminé'); end else RaiseLastOSError; end; { ======================================================================== }
l'image s'ouvre bien dans la visionneuse, mais l'exécution de mon programme continue et n'attend pas la fermeture de la visionneuse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CommandLine := '"explorer.exe" "'+FichierImage+'"'; // Fonctionne mais n'attend pas la fin avec explorer ... ExecAndWait(CommandLine) ;
Est ce possible de le faire ?
A+
Charly
Partager