|
| Programme a du mal à se terminer |
| Iniciado por Jean-Michel, 07,ago. 2020 07:29 - 6 respuestas |
| |
| | | |
|
| |
Miembro registrado 856 mensajes |
|
| Publicado el 07,agosto 2020 - 07:29 |
Bonjour, Il arrive souvent, que, malgre le code "FinProgramme", mon application reste dans les taches. On a l'impression qu'il est arreté car la fenêtre s'est bien fermé et l’icône dans la barre des tâche a disparu mais pas du tout !
Précision : l'outil fait appel régulièrement à des taches parallèles. Peut être la cause ?
Une idée, merci,
-- Synchronize Systems International LTD Développement d'outils de gestion
Environnements AS400 – Windows Langages GAP III – CL – Visual Basic - Visual Adélia - Adélia - Windev
Bangkok / Pattaya |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 151 mensajes |
|
| Publicado el 07,agosto 2020 - 08:49 |
En dernier recours, si le message WM_CLOSE échoue, vous pouvez utiliser l'API TerminateProcess pour fermer tous les process ouverts par votre application.
Au besoin, je dois avoir un exemple écrit en code bas niveau quelque part.
-- Patrice Terrier www.zapsolution.com |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.363 mensajes |
|
| Publicado el 07,agosto 2020 - 11:21 |
Bonjour, Si tu n'utilises pas le paramètre "Vrai" dans ta fonction FinProgramme, le code de fermeture du projet (l'endroit où l'on "libère tout",) n'est pas exécuté donc les libération ne sont pas faites.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 856 mensajes |
|
| Publicado el 07,agosto 2020 - 11:49 |
Bonjour Patrice,
J'ai des lacunes, j'utilise :
sRet = ExeTermine(sProg) sProg est le nom du programme qui est le nom du process aussi.
si Sret = faux je mets : FunctionReturn=API("KERNEL32","TerminateProcess",hProcess,uExitCode) Je suppose que hProcess est le nom du process mais uExitCode, je mets quoi ?
-- Synchronize Systems International LTD Développement d'outils de gestion
Environnements AS400 – Windows Langages GAP III – CL – Visual Basic - Visual Adélia - Adélia - Windev
Bangkok / Pattaya |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.363 mensajes |
|
| Publicado el 07,agosto 2020 - 12:44 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 151 mensajes |
|
| Publicado el 07,agosto 2020 - 13:48 |
Jean Michel
Puisque vous utilisez également VB, voici un code qui devrait vous aider (j'ai également une version C++ 64-bit)
function ProcessTerminate(szModule as asciiz) as long '// 07-29-2020 The 32-bit version needs this local nCountKill as long nCountKill = -1 '// Error if PathFileExists(szModule) then CharLower(szModule) local hSnapShot, hProcess as dword hProcess = 0 local pe32 as PROCESSENTRY32 local szPathName as asciiz * %MAX_PATH hSnapShot = CreateToolhelp32Snapshot(%TH32CS_SNAPALL, 0) if (hSnapShot <> %INVALID_HANDLE_VALUE) then pe32.dwSize = sizeof(pe32) local hRes as long hRes = Process32First(hSnapShot, pe32) nCountKill = 0 while (hRes) hProcess = OpenProcess(%PROCESS_QUERY_INFORMATION or %PROCESS_VM_READ or %PROCESS_TERMINATE, 1, pe32.th32ProcessID) if (hProcess) then szPathName = "" if (GetModuleFileNameEx(hProcess, 0, szPathName, %MAX_PATH)) then CharLower(szPathName) if (szPathName = szModule) then 'zTrace(szPathName) nCountKill += 1 TerminateProcess(hProcess, 9) end if end if CloseHandle(hProcess) end if hRes = Process32Next(hSnapShot, pe32) wend CloseHandle(hSnapShot) end if end if function = nCountKill end function
szModule est le nom complet de l'exécutable dont vous voulez terminer le process.
au besoin, si vous ni arrivez pas vous même, je peux vous convertir le code en WD
-- Patrice Terrier www.zapsolution.com |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 856 mensajes |
|
| Publicado el 07,agosto 2020 - 15:59 |
Sympa ça !!Merci !!!
Mais quelle galère pour arrêter un programme !!
-- Synchronize Systems International LTD Développement d'outils de gestion
Environnements AS400 – Windows Langages GAP III – CL – Visual Basic - Visual Adélia - Adélia - Windev
Bangkok / Pattaya |
| |
| |
| | | |
|
| | | | |
| | |
|