Вниз
Скачать: CL | DM;

Завершение процесса.   Найти похожие ветки 

← →
Ivane ©   (2004-04-04 01:07) [0]

Здравствуйте, Мастера! Покажите, пожалуйста, на каком-нибудь простом примере, как завершить некоторый запущенный процесс(Допутим я знаю, что находится в caption главного окна или как называется процесс).


← →
sir John ©   (2004-04-04 19:19) [1]

Можно вот так:

uses
 Tlhelp32;

function KillTask(ExeFileName: string): Integer;
const
 PROCESS_TERMINATE = $0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 Result := 0;
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

 while Integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
     UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
     UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(
                       OpenProcess(PROCESS_TERMINATE,
                                   BOOL(0),
                                   FProcessEntry32.th32ProcessID),
                                   0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
 end;
 CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 KillTask("notepad.exe");
end;

{ For Windows NT/2000/XP }

procedure KillProcess(hWindowHandle: HWND);
var
 hprocessID: INTEGER;
 processHandle: THandle;
 DWResult: DWORD;
begin
 SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
   SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);

 if isWindow(hWindowHandle) then
 begin
   // PostMessage(hWindowHandle, WM_QUIT, 0, 0);

   { Get the process identifier for the window}
   GetWindowThreadProcessID(hWindowHandle, @hprocessID);
   if hprocessID <> 0 then
   begin
     { Get the process handle }
     processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
       False, hprocessID);
     if processHandle <> 0 then
     begin
       { Terminate the process }
       TerminateProcess(processHandle, 0);
       CloseHandle(ProcessHandle);
     end;
   end;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 KillProcess(FindWindow("notepad",nil));
end;


Естественно, блокнот надо бы запустить сначала :)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
1-1083138138
Романов Р.В.
2004-04-28 11:42
2004.05.16
Помогите оптимизировать код


3-1082235402
Goida
2004-04-18 00:56
2004.05.16
Непонятный файл требуется и база не открывается...


9-1071409745
ZAROLF
2003-12-14 16:49
2004.05.16
Нужен совет к 2D аркаде!


1-1083187607
Sergix
2004-04-29 01:26
2004.05.16
проблемы с DLL


3-1082614389
Andriy Tysh
2004-04-22 10:13
2004.05.16
ClientDataSet &amp; AggregatesFields




   Наверх