Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
3-1082108784
Dr Andrey
2004-04-16 13:46
2004.05.16
Многопользовательский доступ к mdb


4-1079983789
Ангел.
2004-03-22 22:29
2004.05.16
LoadAccelerators


14-1083066293
VMcL
2004-04-27 15:44
2004.05.16
Вебмастеру форума


4-1080046403
Nikl_MM
2004-03-23 15:53
2004.05.16
Ищу программу для создания файлов ресурсов (*.rc)


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский