Главная страница
    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.45 MB
Время: 0.045 c
1-1083146120
Immortal
2004-04-28 13:55
2004.05.16
перерисовка региона


7-1081181563
alexsandri
2004-04-05 20:12
2004.05.16
господа !!! Каким образом установит сервис


6-1080392016
SEvgeniy
2004-03-27 15:53
2004.05.16
mailslot via internet


4-1077013392
KosilkA
2004-02-17 13:23
2004.05.16
иконку из ехе в файл


1-1082651546
Vitalnet
2004-04-22 20:32
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский