Показать сообщение отдельно
  #5  
Старый 04.07.2014, 13:13
EEjester EEjester вне форума
Прохожий
 
Регистрация: 03.07.2014
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Вот так доделал функцию:
Код:
function KillTask(ExeFileName : string; PIDproc : Integer): Integer;
const 
  PROCESS_TERMINATE = $0001; 
var 
  ContinueLoop: BOOL; 
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  prc : THandle;
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;
  prc := OpenProcess(PROCESS_ALL_ACCESS, false, PIDproc);
  WaitforSingleObject(prc, INFINITE);
  CloseHandle(FSnapshotHandle); 
end;

Использовать так:
Код:
KillTask('notepad++.exe', GetProcID('notepad++.exe'));

Может кто подскажет как можно оптимизировать?
Ответить с цитированием