Tuer une application windows

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 340 fois - Téléchargée 29 fois

Contenu du snippet

Cetter fonction permet de tuer une application windows en cour d'execution

Source / Exemple :


procedure KillProgram(ClassName: PChar; Titre: PChar);
const
  PROCESS_TERMINATE = $0001;
var
  ProcessHandle : THandle;
  ProcessID: Integer;
  Appli : HWND;
begin
  Appli := FindWindow(PChar(ClassName), PChar(Titre));
  GetWindowThreadProcessID(Appli, @ProcessID);
  ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
  TerminateProcess(ProcessHandle,4);
end;

Conclusion :


exemple d'utilisation:
KillProgram(nil,'Calculatrice');
mettre nil sur le paramètre dont on ne connait pas l'information

A voir également

Ajouter un commentaire Commentaires
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
{ 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;
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
21
===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à!
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
16
Encore du copier/coller quasiment sans explications... Pfff.....
Messages postés
6
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
31 août 2005

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 :) ...
Messages postés
18
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
11 février 2009

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.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.