Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: 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 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.027 c
1-1083327903
p_sA[11]
2004-04-30 16:25
2004.05.16
___XOR___


6-1080543470
Sodom
2004-03-29 10:57
2004.05.16
Upload файла на сервер через PHP-скрипт


1-1083435603
neteditor
2004-05-01 22:20
2004.05.16
Как выгрузить TMemoryStream в PChar?


1-1083193645
Star-ko
2004-04-29 03:07
2004.05.16
Редактор с подсветкой.


1-1083222874
ПрогерШ
2004-04-29 11:14
2004.05.16
Как реализовать инитерфес в стиле IBExpert?