Tuer les processus par leur nom

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 168 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
Messages postés
7
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
22 novembre 2006

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 ?
Messages postés
14
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
21 mai 2006

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 :)
Messages postés
97
Date d'inscription
mardi 24 mai 2005
Statut
Membre
Dernière intervention
25 juin 2006

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.