PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Programme a du mal à se terminer
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
Voici la doc de l'API https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-terminateprocess

--
Il y a peut être plus simple, mais, ça tourne
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