Tuer une application windows

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 539 fois - Téléchargée 31 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
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.
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.