Главная страница
    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.45 MB
Время: 0.035 c
1-1083220223
Svetka*
2004-04-29 10:30
2004.05.16
??????????


14-1082707152
Alexei Sviridov
2004-04-23 11:59
2004.05.16
Наставте на путь истинный


7-1081025807
Kvic
2004-04-04 00:56
2004.05.16
Отслеживание запуска приложений


14-1082613968
Style
2004-04-22 10:06
2004.05.16
Помогите решить проблему?


4-1080402288
kentavr
2004-03-27 18:44
2004.05.16
SendMESSAGE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский