Как убить процесс по имени? -- delphi поле с участием kill-process пол Связанный проблема

How to kill a process by name?


4
vote

проблема

русский

Как я могу убить процесс, начиная с данного имени процесса?

Например: как я могу убить <код> program.exe ?

Я попробовал следующий код, который возвращает имя процесса, начиная с <код> PID , но он не подходит для моих потребностей (в моем случае у меня есть имя процесса и хочется его убить)

 <код> function GetPathFromPID(const PID: cardinal): string; var   hProcess: THandle;   path: array[0..MAX_PATH - 1] of char; begin   hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);   if hProcess <> 0 then     try       if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) = 0 then         RaiseLastOSError;       result := path;     finally       CloseHandle(hProcess)     end   else     RaiseLastOSError; end;   
Английский оригинал

How can I kill a process starting from a given process name?

For example: How can I kill program.exe?

I've tried the following code which returns the process name starting from a PID but it doesn't fit for my needs (In my case I have the process name and want to kill it)

function GetPathFromPID(const PID: cardinal): string; var   hProcess: THandle;   path: array[0..MAX_PATH - 1] of char; begin   hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);   if hProcess <> 0 then     try       if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) = 0 then         RaiseLastOSError;       result := path;     finally       CloseHandle(hProcess)     end   else     RaiseLastOSError; end; 
</div
     
 
 

Список ответов

15
 
vote
vote
Лучший ответ
 
<Р> Вы можете использовать эту функцию для того, чтобы убить процесс имя:
 <код> 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;   

Примечание:

    . <Литий> Там может быть более чем один процесс, имеющий такое же имя
  • <код> KillTask Функция возвращает количество убитых процессов
  • В разделе страница , где я нашел функцию говорит, что работает на Windows 9x / ME / 2000 / XP.
  • Я лично тестировал на Windows, 7/10
 

You can use this function in order to kill a process by name:

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; 

Note:

  • There could be more than 1 process having the same name
  • KillTask function returns the count of the killed processes
  • The page where I've found the function says that it works on Windows 9x/ME/2000/XP.
  • I've personally tested it on Windows 7/10
</div
 
 

Связанный проблема

1  Странные результаты с использованием P4COM  ( Weird results using p4com ) 
Я использую P4Com, чтобы общаться с нашим сервером Perforce. Я написал небольшую утилиту для упрощения нашего QA, какие файлы изменились с одного выпуска на д...

3  Как обнаружить прекращение программы в Android?  ( How to detect the termination of a program in android ) 
Когда программа Windows заканчивает ее, вызывает обработчики событий, такие как наклонная, ондеровская и разрушитель разрушитель. Когда я хочу сохранить некот...

3  Прошедшая первая база с пунктами TortoiseSVN  ( Getting past first base with tortoisesvn ) 
Хорошо, я был убежден, что SVN - это способ пойти в предыдущая публикация , но я еще не видел эпопания. Я не уверен, как я устанавливаю подрыв для моей среды...

5  Delphi - пытаясь получить Stacktrace для исключения  ( Delphi trying to get stacktrace for an exception ) 
У меня есть регистратор исключения, который регистрирует все исключения в файл журнала: <код> class function TLogger.LogException (ACaller: String; E: Excep...

2  Не может выполнить эту операцию на закрытом наборе данных  ( Cannot perform this operation on a closed dataset ) 
Я просто пытаюсь выполнить оператор SQL Selection SQL с помощью компонента TADOQUERY, но когда запись «Open» TaDoQuery выполняется, я получаю последую ошибки:...

35  Насколько тяжело мигрировать проект из Delphi 7 в Delphi Xe?  ( How hard is it to migrate a project from delphi 7 to delphi xe ) 
У нашей компании есть программное обеспечение, которое было в разработке более 10 лет, поэтому там есть некоторые действительно встречающиеся там. Это все еще ...

117  Узнайте, какой процесс зарегистрировал глобальную горячую клавишу? (Windows API)  ( Find out what process registered a global hotkey windows api ) 
Насколько мне удалось выяснить, Windows не предлагает функцию API, чтобы сказать, какое приложение зарегистрировало глобальную горячую клавишу (через Register...

1  ЮНА-Mapping Delphi Функция  ( Jna mapping delphi function ) 
<Р> Как я отобразить эту функцию с ЮНА: <Р> Delphi код: <код> function getData(InData1: PChar; InData2: PChar; Data: TAr...

5  Delphi Удалить Форма Тень  ( Delphi remove form shadow ) 
Я использую Delphi Berlin, у меня есть основная форма, и я открываю другие формы из главного меню в моей основной форме, я не использую Forms MDI Я хочу отк...

16  С каким кодом Delphi я должен заменить мои звонки в устаревший метод Thhread Suspend?  ( With what delphi code should i replace my calls to deprecated tthread method sus ) 
Это спросило раньше, но Без полного ответа . Это связано с так называемой известной «роковой резьбой»! ». Мне нужно заменить этот вызов tthread.suspend с ч...

0  Delphi FMX Hanvas Alpha Channel Дает неправильную прозрачность  ( Delphi fmx canvas alpha channel give wrong transparency ) 
Я хочу добавить прозрачные и частично прозрачные области на изображении .bitmap. Я обнаружил, что регионы прозрачности не влияют, как и ожидалось: Части RGB т...

5  Как скрыть «не пользовательские кадры стека» в окне стека Call Delphi Call?  ( How to hide non user stack frames in delphi call stack window ) 
Можно ли скрыть / коллапсировать кадры стека, у которых нет исходного кода, а соответственно, не помечены этими голубыми точками, в стеке вызовов Delphi? Пр...

11  Не могу удалить элементы управления в Delphi Xe7  ( Cant delete controls in delphi xe7 ) 
Просто установил delphi xe7. Открыл проект, разработанный с XE7. Боковая заметка, но моя первая озабоченность заключается в том, что все заставляет IDE вешать...

1  Delphi: Воспроизвести файл MP4 с помощью DSPack  ( Delphi play mp4 file using dspack ) 
Я играю вокруг с dspack, он может играть в файлы AVI и WMV, но он не играет файлов MP4. Я установил FFDShow Codec, но все же он не будет играть любой другой ф...

5  Почему Tmediaplayer задерживает заголовок, изменяющийся на TPanel?  ( Why does tmediaplayer delay a caption changing on a tpanel ) 
Я начинающий программист, поэтому извиняюсь, если это звучит очень простой для вас. У меня есть процедура, которая выглядит (по существу), как это: <код> pr...

Связанный проблема

1  Странные результаты с использованием P4COM 
3  Как обнаружить прекращение программы в Android? 
3  Прошедшая первая база с пунктами TortoiseSVN 
5  Delphi - пытаясь получить Stacktrace для исключения 
2  Не может выполнить эту операцию на закрытом наборе данных 
35  Насколько тяжело мигрировать проект из Delphi 7 в Delphi Xe? 
117  Узнайте, какой процесс зарегистрировал глобальную горячую клавишу? (Windows API) 
1  ЮНА-Mapping Delphi Функция 
5  Delphi Удалить Форма Тень 
16  С каким кодом Delphi я должен заменить мои звонки в устаревший метод Thhread Suspend? 
0  Delphi FMX Hanvas Alpha Channel Дает неправильную прозрачность 
5  Как скрыть «не пользовательские кадры стека» в окне стека Call Delphi Call? 
11  Не могу удалить элементы управления в Delphi Xe7 
1  Delphi: Воспроизвести файл MP4 с помощью DSPack 
5  Почему Tmediaplayer задерживает заголовок, изменяющийся на TPanel?