TUER UNE APPLICATION WINDOWS

eedy31 Messages postés 63 Date d'inscription mercredi 23 janvier 2002 Statut Membre Dernière intervention 16 avril 2008 - 1 févr. 2002 à 09:44
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 - 12 sept. 2005 à 15:24
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11730-tuer-une-application-windows

elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
12 sept. 2005 à 15:24
{ Tuer un processus }

function KillProcessByName( ProcName: string ): Boolean;
var
ProcessEntry32 : TProcessEntry32;
HSnapShot : THandle;
HProcess : THandle;

begin
Result := False;

HSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if HSnapShot = 0 then exit;

ProcessEntry32.dwSize := sizeof(ProcessEntry32);
if Process32First(HSnapShot, ProcessEntry32) then
repeat
if ( StrIComp(ProcessEntry32.szExeFile, PChar(ProcName) ) = 0 ) then
begin
HProcess := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessEntry32.th32ProcessID);
if HProcess <> 0 then
begin

Result := TerminateProcess(HProcess, 0);
CloseHandle(HProcess);
end;
Break;
end;
until not Process32Next(HSnapShot, ProcessEntry32);

CloseHandle(HSnapshot);

end;
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
25 avril 2004 à 18:41
===Commentaire

Moi, c'est encore tout pile ce qu'il me fallait... Et ça marche!

En fait, pour comprendre, on peut se procurer Process Viewer qui est une démonstration gratis de C++Builder (au moins version 5). La démo n'est pas très claire à mon goût mais permet de comprendre les PID et les Classes cachées (que notre cher ami remplace par le mot réservé NIL). C'est peut-être ce dernier truc qui peut être rebutant, car ça ne se devine pas.

Sinon, utiliser Spy++ ou WinSpector (qui me fait ramer comme pas possible) pour détecter les classes. On pointe avec le logo "Target".

En tout cas, ça "kill" net et c'est nettement plus efficace que le Ctrl+Suppr de Windows. En revanche, ce n'est peut-être pas la méthode la plus propre pour arrêter les processus.

Ce code seul n'est d'aucune utilité, sans un énumérateur de fenêtres. Un code source que l'on trouve également sur DelphiFr... ;-)

===Explication

FindWindow énumère les Handles (les parking mémoire pour les fenêtres). Le petit code suivant fait la liste de tous les handles utiles:
var WND : integer {ou THandle, qu'importe puisque THandle=integer};
WND:=FindWindow(nil,nil);
while Wnd<>0 do MaListe.AjouterHandle(WND);

GetWindowThreadProcessID repère le moteur mémoire relatif à la fenêtre tout juste détectée (le handle de cette fenêtre est Appli, donné par FindWindows). Cette détection renvoie un numéro stocké par pointeur (@...) sur ProcessID (on lui passe une variable, que Kernel32 va traiter).

OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId) a pour but d'ouvrir le processus dans le but de le TERMINER avec tous les droits (FALSE). Ca renvoit un numéro identifiant en mémoire le processus ouvert.

Et très simplement TerminateProcess clot l'ouverture (4=fermeture). Ainsi en ouvrant un processus et le terminant, par cascades successives, la fenêtre est fermée ainsi que tous les autres controles associés au processus, car la fenêtre n'est évidemment pas seule à être associée. Cet enchaînement est périlleux car en voulant fermer qqch, on peut fermer des trucs qu'on voulait pas fermer.


Normalement c'est clair ??? Il peut y avoir quelques erreurs parci parlà, mais l'idée est là!
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
22 sept. 2003 à 02:39
Encore du copier/coller quasiment sans explications... Pfff.....
kanigou Messages postés 6 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 31 août 2005
14 juin 2003 à 12:05
Moi je trouve ton code pas mal ... Je l'ai utiliser ds un programme qui kill Half-life au bout de 35 minutes ... Pas mal comme ca je joue moins a Cs :) ...
cs_Dagnir Messages postés 18 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 11 février 2009
1 mai 2003 à 10:19
Oui, au mieux il aurait fallu que tu explique chaque variable et la constante et ce qu'il y a dans begin avec // ca pourrait aider les plus novices parceque pour quelqu'un qui n'a jamais vu de code c'est presque inexploitable.
cs_yaco Messages postés 5 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 9 mai 2003
30 mars 2003 à 23:51
mais sa marche pas
eedy31 Messages postés 63 Date d'inscription mercredi 23 janvier 2002 Statut Membre Dernière intervention 16 avril 2008
1 févr. 2002 à 09:44
j'ai rien compris a ton machin!!
pourrait tu mieux expliquer car ca a l'air interressant, pense aux debutants!!!
c ou kon met l'appli kon veu 'killer'?
car je doi faire un petit prog pour mon cher pere.....(va voir au forum : 'help!!!svp les best en delphi')