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. :)
18 nov. 2006 à 18:53
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 ?
23 avril 2006 à 23:04
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 :)
23 avril 2006 à 21:50
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.