Bonjour, dans mon programme j'ai un shellExecuteEx pour copier un fichier.
j'aimerai pouvoir détruire ce processus lorsque j'appuie sur un bouton de la toolbar de l'application.
En effet, lorsque l'utilisateur appuie sur le bouton, "bInterrompu" passe à "true". ce qui doit permettre d'effectuer un ExitProcess(0);
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 SHELLEXECUTEINFO sei; ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO)); sei.cbSize = sizeof(SHELLEXECUTEINFO ); sei.lpFile = "xcopy.exe"; sei.fMask = SEE_MASK_NOCLOSEPROCESS; sei.lpVerb = TEXT("open"); sei.nShow = SW_HIDE; CString aa = "\"C:\\temp\\"+prestation+".zip\" \""+theApp.GetStrData()+"\\"+theApp.GetStrUA()+"\\"+prestation+".zip\" /Y"; sei.lpParameters = aa; if(ShellExecuteEx(&sei)) { int pas =0; DWORD result = WaitForSingleObject(sei.hProcess, 1000); while (result == WAIT_TIMEOUT) { if(theApp.bInterrompu==true) { ExitProcess(0); result=WAIT_ABANDONED; } else { pas+=2; if (pas < 175) pFrame->GetStatusBar()->SetPaneProgress(1,pas); result = WaitForSingleObject(sei.hProcess, 1000); } } if(result==WAIT_ABANDONED) pFrame->GetStatusBar()->SetPaneProgress(1,0); else pFrame->GetStatusBar()->SetPaneProgress(1,200); } ::CloseHandle(sei.hProcess);
mon problème est que je n'arrive pas à appuyer sur mon bouton..
je pense que c'est parce qu'il y a un "waitforsingleObject", du coup je perds la main sur l'application...
comment je peux faire, pour garder la main (pour pouvoir appuyer sur le bouton)?
sachant que j'ai utilisé "waitforsingleobject" parce que je voulais que mon programme attende que la copie soit totalement finie pour pouvoir continuer...
j'ai trouvé une fonction : GetExitCodeProcess( hProcess, DLPWORD.. ); qui permet de savoir si le processus est toujours actif ou pas... mais est-ce que ca peut vraiment me servir parce que pour l'instant j'arrive pas a l'utiliser pour ce que je veux faire
Partager