Tuer les processus par leur nom

4/5 (3 avis)

Snippet vu 12 593 fois - Téléchargée 34 fois

Contenu du snippet

Cette unité est un petit utilitaire a ajouter a votre programme.

Elle permet de supprimer ou de denombrer

-les processus windows en indiquant leur nom ou une partie de leur nom.
-les fenetres des navigateurs Web par leur nom ou une partie de leur nom.

Note : par defaut seul les pages sont detruites
utiliser le setter :
WindowsList.setWebWindowOnly(webw :boolean);
pour detruire tout processus contenant le nom indiqué.

Exemple
------------
killWindows('yahoo');
detruira toutes les fenetres du navigateur contenant yahoo dans le titre de sa fenetre.

Source / Exemple :


unit ListWindows;

interface

uses Windows, SysUtils, Classes,Controls, Forms, StdCtrls,Dialogs;

type
  PHWND = ^HWND;
  WindowsList=object
  private

  public
   constructor  killerInstinct();
   function getNumWindows(windowstile :String) :integer ;
   function killWindows(windowstile :String) :integer ;
   procedure setWebWindowOnly(webw :boolean);
end;
 var
 countwindows :integer;
 windowsname : String;
 kill,webonly :boolean;

implementation

 //Fonction de recuperation des fenetres.
 function EnumWndProc (Hwnd: THandle; FoundWnd: PHWND): Bool; export; stdcall;
        var
  bContinue :boolean;
  ClassName,buffer: string;
  Ph: Integer;//DWORD;
  Ret: BOOL;
  PrID: Integer;
  HandleProcess:THandle;
        begin
  SetLength (ClassName, 100);
  SetLength (buffer, GetWindowTextLength(hWnd));
  GetClassName (Hwnd, PChar (ClassName), Length (ClassName));
  ClassName := PChar (ClassName);
  GetWindowText(hWnd,PChar(buffer),200);

  if   ((windowsname='') or (Pos(windowsname,PChar(buffer))>0)) and ((not webonly) or ((ClassName ='IEFrame')or (ClassName ='MozillaWindowClass') )) then
  begin
  countwindows:= countwindows+1;
   if kill then
   begin
  //on recupere ID du process
   GetWindowThreadProcessId(hWnd,@Ph);
        if Ph<>0 then
         begin

        HandleProcess:=OpenProcess(PROCESS_TERMINATE,False,Ph);
        TerminateProcess(HandleProcess,0);

         end;

   end;
  end;
  EnumWndProc  := True;
  end;
 constructor  WindowsList.killerInstinct();
 begin
    webonly:=true;
 end;

  function WindowsList.getNumWindows(windowstile :String) :integer ;
  begin
  kill:=false;
  countwindows:=0;
  windowsname:=windowstile;
  EnumWindows (@EnumWndProc, 0);
  result:= countwindows;
  end;

  function WindowsList.killWindows(windowstile :String) :integer ;

  begin
     kill:=true;
     countwindows:=0;
     windowsname:=windowstile;
     EnumWindows (@EnumWndProc, 0);
     result:= countwindows;
  end;
  //Si true le calcul des fenetres ou la suppression des fentres ne prend en compte
  //que les fenetres des navigateurs Web (IE et Mozilla).
 procedure   WindowsList.setWebWindowOnly(webw :boolean);
 begin
     webonly:=webw;
 end;
end.

Conclusion :


Merci de m'indiquer les ameliorations a apporter a ce petit code. :)

A voir également

Ajouter un commentaire Commentaires
kernel2007 Messages postés 7 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 22 novembre 2006
18 nov. 2006 à 18:53
Salut ,je suis débutant en matiere de programmation et je travail sur un projet,mais il y a un probléme qui m'intrigue
est ce que vous pouvez m'aider ladsus
le probléme se résume comme suit :
j'ai le nom et le nom de classe d'un window parent d'une application extérne alors j'ai obtenu son handle par la fonction
Findwindow
mais le probléme est comment obtenir le handle de child window tout en sachant le nom et le nom de classe de ce window (child) et que la fonction FindwindowEx n'est pas supporté par windows NT et XP sur lequel je travail
alors comment on fait pour obtenir ce handle ?
davidfdm2002 Messages postés 14 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 21 mai 2006
23 avril 2006 à 23:04
humm j'utilise cette unité sans problème.
Le "style de code" a mettre dans ton programme
serait du style :
procedure Tform1.test();
var
killer: WindowsList;
nbrew:integer;
begin
killer:=WindowsList.killerInstinct();
killer.setWebWindowOnly(true); //si fenetre Navigateur uniquement
nbre:=killer.killWindows('Yahoo');
...
Voila :)
dxh_master Messages postés 97 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 25 juin 2006
23 avril 2006 à 21:50
chez moi sa marche pas a la compilation du killWindows('yahoo'); il me dit Forme d'appel de methode autorisé seulement dans les methodesde type dérivés ! que faire?

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.