Показать сообщение отдельно
  #1  
Старый 05.02.2015, 16:33
fn12gl34 fn12gl34 вне форума
Прохожий
 
Регистрация: 09.01.2015
Сообщения: 30
Версия Delphi: 10
Репутация: 10
По умолчанию Процессы не хотят убиваться

Приветствую, Господа. Столкнулся с проблемой: процессы упорно не хотят вырубаться программным методом.
Вырубать их нужно по названиям. Использую следующую функцию:
Код:
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;

Но результат нулевой. Потом попробовал этот вариант:
Код:
function KillProcess(ExeName: string): LongBool;
var
 B: BOOL;
 ProcList: THandle;
 PE: TProcessEntry32;
begin
 Result := False;
 ProcList := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 PE.dwSize := SizeOf(PE);
 B := Process32First(ProcList, PE);
 while B do begin
   if (UpperCase(PE.szExeFile) = UpperCase(ExtractFileName(ExeName))) then
     Result := TerminateProcess(OpenProcess($0001, False, PE.th32ProcessID), 0);
    B := Process32Next(ProcList, PE);
 end;
 CloseHandle(ProcList);
end; 
Но эффекта опять нет.
Прошу вашей помощи в разрешении этой проблемки
Ответить с цитированием