OVH Cloud OVH Cloud

tuer appli par noms de l'exe ?

9 réponses
Avatar
Newb
Bonjour,

je recherche une maniere de tuer une appli dont j'ai le noms de l'exe
genre "toto.exe" ou "IEXPLORE.exe" par exemple

j'ai trouvé des infos sur comment tuer un process en fonction du titre de la
fenetre (genre "Calculatrice"), mais pas pour tuer directement le process en
exe (ou alors j'ai rien compris aux sources, ce qui est possible aussi
remarquez), car je ne connais pas forcément le noms de la fenetre.

Est ce que cela est possible en VB ? Si q'un avait une idée :o)

Merci

Newb

9 réponses

Avatar
le_troll
Bonjour, c'est quoi "tuer" une appli, est-ce effacer le fichier?
--
Merci, @+, bye, Joe

------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"Newb" a écrit dans le message de news:
40a3f598$0$18312$
Bonjour,

je recherche une maniere de tuer une appli dont j'ai le noms de l'exe
genre "toto.exe" ou "IEXPLORE.exe" par exemple

j'ai trouvé des infos sur comment tuer un process en fonction du titre de


la
fenetre (genre "Calculatrice"), mais pas pour tuer directement le process


en
exe (ou alors j'ai rien compris aux sources, ce qui est possible aussi
remarquez), car je ne connais pas forcément le noms de la fenetre.

Est ce que cela est possible en VB ? Si q'un avait une idée :o)

Merci

Newb




Avatar
Patrick Philippot
Newb wrote:
je recherche une maniere de tuer une appli dont j'ai le noms de l'exe
genre "toto.exe" ou "IEXPLORE.exe" par exemple



Je n'ai pas de code VB sous la main mais le principe est le suivant:

1. Enumérer les processus jusqu'à ce que l'on trouve un process ayant le
nom requis. L'énumération se fait de manière différente sous NT+ et
Win9x. On utilise EnumProcesses, OpenProcess, EnumProcessModules dans le
premiers cas (voir doc sur PSAPI) et CreateToolhelp32Snapshot,
Process32First, Process32Next dans l'autre (voir doc sur ToolHelp32).
Dans les 2 cas, on récupère le pid au passage.

2. Quand on a le pid, on peut utiliser OpenProcess pour récupérer le
handle du process.

3. Quand on a le handle du process, on a fini : TerminateProcess.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr
Avatar
François Picalausa
Hello,

pour compléter:
http://support.microsoft.com/?id2986

tu devrais aussi avant de d'utiliser Terminateprocess envoyer un WM_CLOSe a
la fenêtre principale du thread.
Pour celà, il faut enumérer les windows et à partir de GetWindowProcessId
récupérer le process ID.
Si les deux processID correspondent, tu as une fenêtre à laquelle envoyer un
WM_CLOSE
Ou du moins si le hwnd n'a pas de parent (Getparent = 0) tu peux lui envoyer
un WM_CLOSE.

Voici un article décrivant complètement cette méthode:
http://msdn.microsoft.com/library/en-us/dnvsm01/html/dt0109.asp

ou encore, cet exemple du même auteur: tasklist
http://www.mvps.org/vb/samples.htm

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Patrick Philippot" a écrit dans le
message de news:
Newb wrote:
je recherche une maniere de tuer une appli dont j'ai le noms de l'exe
genre "toto.exe" ou "IEXPLORE.exe" par exemple



Je n'ai pas de code VB sous la main mais le principe est le suivant:

1. Enumérer les processus jusqu'à ce que l'on trouve un process ayant
le nom requis. L'énumération se fait de manière différente sous NT+ et
Win9x. On utilise EnumProcesses, OpenProcess, EnumProcessModules dans
le premiers cas (voir doc sur PSAPI) et CreateToolhelp32Snapshot,
Process32First, Process32Next dans l'autre (voir doc sur ToolHelp32).
Dans les 2 cas, on récupère le pid au passage.

2. Quand on a le pid, on peut utiliser OpenProcess pour récupérer le
handle du process.

3. Quand on a le handle du process, on a fini : TerminateProcess.


Avatar
Newb
Bonjour, non en fait il s'agit de fermer l'appli, genre Alt +F4 mais en plus
brutale quoi :-)



"le_troll" a écrit dans le message de
news:
Bonjour, c'est quoi "tuer" une appli, est-ce effacer le fichier?
--
Merci, @+, bye, Joe

------------------------------------------
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"Newb" a écrit dans le message de news:
40a3f598$0$18312$
> Bonjour,
>
> je recherche une maniere de tuer une appli dont j'ai le noms de l'exe
> genre "toto.exe" ou "IEXPLORE.exe" par exemple
>
> j'ai trouvé des infos sur comment tuer un process en fonction du titre


de
la
> fenetre (genre "Calculatrice"), mais pas pour tuer directement le


process
en
> exe (ou alors j'ai rien compris aux sources, ce qui est possible aussi
> remarquez), car je ne connais pas forcément le noms de la fenetre.
>
> Est ce que cela est possible en VB ? Si q'un avait une idée :o)
>
> Merci
>
> Newb
>
>




Avatar
Newb
Ok, merci beaucoup a tous le 2, je vais essayer ca (pas sur d'y arriver,
mais faut essayer avant d'en etre sur ;-))





"François Picalausa" a écrit dans le message de
news:
Hello,

pour compléter:
http://support.microsoft.com/?id2986

tu devrais aussi avant de d'utiliser Terminateprocess envoyer un WM_CLOSe


a
la fenêtre principale du thread.
Pour celà, il faut enumérer les windows et à partir de GetWindowProcessId
récupérer le process ID.
Si les deux processID correspondent, tu as une fenêtre à laquelle envoyer


un
WM_CLOSE
Ou du moins si le hwnd n'a pas de parent (Getparent = 0) tu peux lui


envoyer
un WM_CLOSE.

Voici un article décrivant complètement cette méthode:
http://msdn.microsoft.com/library/en-us/dnvsm01/html/dt0109.asp

ou encore, cet exemple du même auteur: tasklist
http://www.mvps.org/vb/samples.htm

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Patrick Philippot" a écrit dans le
message de news:
> Newb wrote:
>> je recherche une maniere de tuer une appli dont j'ai le noms de l'exe
>> genre "toto.exe" ou "IEXPLORE.exe" par exemple
>
> Je n'ai pas de code VB sous la main mais le principe est le suivant:
>
> 1. Enumérer les processus jusqu'à ce que l'on trouve un process ayant
> le nom requis. L'énumération se fait de manière différente sous NT+ et
> Win9x. On utilise EnumProcesses, OpenProcess, EnumProcessModules dans
> le premiers cas (voir doc sur PSAPI) et CreateToolhelp32Snapshot,
> Process32First, Process32Next dans l'autre (voir doc sur ToolHelp32).
> Dans les 2 cas, on récupère le pid au passage.
>
> 2. Quand on a le pid, on peut utiliser OpenProcess pour récupérer le
> handle du process.
>
> 3. Quand on a le handle du process, on a fini : TerminateProcess.




Avatar
Zoury
Bonjour, non en fait il s'agit de fermer l'appli, genre Alt +F4 mais en
plus
brutale quoi :-)



Envoyé le message WM_CLOSE, comme l'a mentionné François, fait la même chose
que Alt-F4. Cela permet au programme d'exécuter le code qu'il doit exécuter
avant de se fermer, ce qui lui laisse la possibilité de sauvegardé les
modifs, et libérer la mémoire.

TerminateProcess() ne fait pas ça..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Patrick Philippot
> Envoyé le message WM_CLOSE, comme l'a mentionné François, fait la
même chose que Alt-F4. Cela permet au programme d'exécuter le code
qu'il doit exécuter avant de se fermer, ce qui lui laisse la
possibilité de sauvegardé les modifs, et libérer la mémoire.

TerminateProcess() ne fait pas ça..



En fait, (tenter de) terminer proprement un process externe est une
affaire assez compliquée. Il y a un utilitaire de PC Mag sont le code
source était disponible à la belle époque (celle où je bossais pour eux
:-) ) et qui utilise une méthode assez propre: EndItAll de Neil
Rubenking. L'article est toutefois toujours en ligne si le code source
n'est plus dispo: http://www.pcmag.com/article2/0,1759,1935,00.asp
(section Inside EnditAll). Cet article contient d'autres références.

La manière de procéder est la suivante:

1. On énumère toutes les fenêtres de l'appli (pas seulement la fenêtre
principale) et on leur expédie un WM_CLOSE.

2. On essaie ensuite une méthode propre qui consiste à faire un
DuplicateHandle sur le handle du process, à récupérer la fonction
ExitProcess dans kernel32 et à utiliser CreateRemoteThread (on crée le
thread sur ExitProcess) pour terminer le processus. Cette étape ne
fonctionne que sur NT et au-dessus. Elle consiste en fait à faire
exécuter un ExitProcess par le process cible lui-même. Bien sûr, ça ne
marche pas à tous les coups mais souvent.

3. On fait un WaitForsingleObject sur le handle dupliqué (ou l'original
si la duplication s'est plantée) et si au bout d'un certain temps le
process est toujours vivant, là on fait un TerminateProcess.

4. Comme nous sommes des gens très clean, on n'oublie pas non plus que
l'appli en question pouvait avoir une icône dans le system tray. Là, un
seul moyen de la pulvériser, aller balader la souris dans cette zone par
programme.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Zoury
Salut Patrick!

L'article est toutefois toujours en ligne si le code source
n'est plus dispo: http://www.pcmag.com/article2/0,1759,1935,00.asp



pour les intéresser il y a aussi l'article de Karl E. Peterson qui touche à
ce sujet. c'est un classique ;O)

How to kill an app gently
http://msdn.microsoft.com/library/en-us/dnvsm01/html/dt0109.asp

et un exemple de la technique est démontré ici
http://www.mvps.org/vb/samples.htm


j'imagine que le code de pcMag devait ressembler à ça. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Patrick Philippot
Zoury wrote:
http://msdn.microsoft.com/library/en-us/dnvsm01/html/dt0109.asp

et un exemple de la technique est démontré ici
http://www.mvps.org/vb/samples.htm

j'imagine que le code de pcMag devait ressembler à ça. ;O)



Salut Yanick,

Ça ressemble mais il manque l'appel délégué (injecté) à ExitProcess. Je
trouve ça assez fin, cette astuce.

--
Patrick Philippot - Microsoft MVP [.Net]
MainSoft Consulting Services
www.mainsoft.fr