cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 11 sept. 2005 à 17:03
Voici une méthode pour quitter proprement l'application par son nom de fenetre (ou partie du nom):
Function FindActiveAppName(Name:String):Hwnd;
var WND : Hwnd;
WndName : array[0..255] of char;
begin
Name:=Uppercase(Name);
Result:=Invalid_Handle_Value;
WND:=FindWindow(nil,nil);
while wnd<>0 do
begin
GetWindowText(Wnd,WndName,Sizeof(WndName));
If WndName[0]>#0 then
begin
If pos(Name,Uppercase(WndName))>0 then
begin
result:=WND;
Exit;
end;
end;
Wnd:=GetWindow(Wnd,GW_HwNDNEXT);
end;
end;
Function TerminateApp(Name:String):Boolean;
Var ThreadId : Dword;
ProcessId : Dword;
WndHwnd : Hwnd;
begin
Result:=False;
WndHwnd:=FindActiveAppName(Name);
If WndHwnd<>Invalid_Handle_Value then
begin
GetWindowThreadProcessId(WndHwnd,@ThreadId);
ProcessId := OpenProcess(PROCESS_TERMINATE, false,ThreadId);
try
if ProcessId <> Invalid_Handle_Value then
Result:=TerminateProcess(ProcessId, 0);
finally
CloseHandle(ProcessId);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TerminateApp('WORD');
end;