OVH Cloud OVH Cloud

Fermeture d'une application sous VB6.0

5 réponses
Avatar
Jean Saint Jalmes
Bonjour,

Sous VB6.0, je veux fermer des applications externes (exe)
qui n'ont pas de fen=EAtre active.
Peut on forcer la fermeture d'une application autrement=20
qu'en envoyant le message WM_CLOSE =E0 ses fen=EAtres.
Si oui, comment ?

Merci de me r=E9pondre
Cordialement.
Jean Saint Jalmes

5 réponses

Avatar
ng
Salut,

Oui on peut tuer le process de l'appli mais c'est un peu violent comme
méthode :


--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Jean Saint Jalmes" a écrit dans le
message de news: 124a601c3f610$57297430$
Bonjour,

Sous VB6.0, je veux fermer des applications externes (exe)
qui n'ont pas de fenêtre active.
Peut on forcer la fermeture d'une application autrement
qu'en envoyant le message WM_CLOSE à ses fenêtres.
Si oui, comment ?

Merci de me répondre
Cordialement.
Jean Saint Jalmes
Avatar
ng
oups le message est parti tout seul :/

Je disais donc, on peux utiliser TerminateProcess :

Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess"
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Le 2ème paramètre est récupérable par GetExitCodeProcess
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long,
lpExitCode As Long) As Long

On peut alors imaginer un exemple :

<non testé>

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long)
As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess
As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As
Long, ByVal uExitCode As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Sub Form_Load()
Dim lRet As Long, lExitCode As Long, lHandle As Long
lRet = Shell("notepad.exe", vbNormalFocus)
MsgBox "Cliquez sur OK pour tuer le process", vbOKOnly
lHandle = OpenProcess(PROCESS_QUERY_INFORMATION, False, lRet)
Call GetExitCodeProcess(lHandle, lExitCode)
Call TerminateProcess(lHandle, lExitCode)
Call CloseHandle(lHandle)
End Sub

</non testé>

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Jean Saint Jalmes" a écrit dans le
message de news: 124a601c3f610$57297430$
Bonjour,

Sous VB6.0, je veux fermer des applications externes (exe)
qui n'ont pas de fenêtre active.
Peut on forcer la fermeture d'une application autrement
qu'en envoyant le message WM_CLOSE à ses fenêtres.
Si oui, comment ?

Merci de me répondre
Cordialement.
Jean Saint Jalmes
Avatar
François Picalausa
Bonjour/soir,

En complément, il y a une solution complète pour tuer un process (avec
WM_CLOSE, d'abord et ensuite, si ça n'a pas fonctionné, tuer le process) sur
http://msdn.microsoft.com/library/en-us/dnvsm01/html/dt0109.asp
et du même auteur, un exemple plus complet:
http://www.mvps.org/vb/code/tasklist.zip

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Jean Saint Jalmes" a écrit dans
le message de news:124a601c3f610$57297430$
Bonjour,

Sous VB6.0, je veux fermer des applications externes (exe)
qui n'ont pas de fenêtre active.
Peut on forcer la fermeture d'une application autrement
qu'en envoyant le message WM_CLOSE à ses fenêtres.
Si oui, comment ?

Merci de me répondre
Cordialement.
Jean Saint Jalmes


Avatar
Jean Saint Jalmes
Merci pour cette réponse.
Cependant, la procédure suppose que je connaisse le handle
du process à fermer ce qui n'est pas le cas car il n'a pas
été lancé par mon appli.

Il y a peut être une API qui permet de lister tous les
process en cours ?

-----Message d'origine-----
oups le message est parti tout seul :/

Je disais donc, on peux utiliser TerminateProcess :

Declare Function TerminateProcess Lib "kernel32"


Alias "TerminateProcess"
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Le 2ème paramètre est récupérable par GetExitCodeProcess
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal


hProcess As Long,
lpExitCode As Long) As Long

On peut alors imaginer un exemple :

<non testé>

Private Declare Function OpenProcess Lib "kernel32"


(ByVal dwDesiredAccess
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId


As Long) As Long
Private Declare Function CloseHandle Lib "kernel32"


(ByVal hObject As Long)
As Long
Private Declare Function GetExitCodeProcess


Lib "kernel32" (ByVal hProcess
As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32"


(ByVal hProcess As
Long, ByVal uExitCode As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Sub Form_Load()
Dim lRet As Long, lExitCode As Long, lHandle As Long
lRet = Shell("notepad.exe", vbNormalFocus)
MsgBox "Cliquez sur OK pour tuer le process", vbOKOnly
lHandle = OpenProcess(PROCESS_QUERY_INFORMATION, False,


lRet)
Call GetExitCodeProcess(lHandle, lExitCode)
Call TerminateProcess(lHandle, lExitCode)
Call CloseHandle(lHandle)
End Sub

</non testé>

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/


"Jean Saint Jalmes"


a écrit dans le
message de news: 124a601c3f610$57297430


$
Bonjour,

Sous VB6.0, je veux fermer des applications externes (exe)
qui n'ont pas de fenêtre active.
Peut on forcer la fermeture d'une application autrement
qu'en envoyant le message WM_CLOSE à ses fenêtres.
Si oui, comment ?

Merci de me répondre
Cordialement.
Jean Saint Jalmes


.



Avatar
François Picalausa
Bonjour/soir,

voir mon post à ce sujet :-)
Dans le second exemple, il y a tout ce qu'il faut.
Mais pour simplement lister les process, tu as
http://support.microsoft.com/default.aspx?scid2986

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Jean Saint Jalmes" a écrit dans
le message de news:1261601c3f617$77b11300$
Il y a peut être une API qui permet de lister tous les
process en cours ?