15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Убиваем активное приложение.

Автор: Dale Berry

Данная функция позволяет завершить выполнение любой активной программы по её classname или заголовку окна.

Совместимость: Все версии Delphi

  Исходный код функции

procedure KillProgram(Classname : string; WindowTitle : string);
const
  PROCESS_TERMINATE = $0001;
var
  ProcessHandle : THandle;
  ProcessID: Integer;
  TheWindow : HWND;
begin
  TheWindow := FindWindow(Classname, WindowTitle);
  GetWindowThreadProcessID(TheWindow, @ProcessID);
  ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
  TerminateProcess(ProcessHandle,4);
end;

  Комментарии

Xianguang Li (22 Октября 2000)

В Delphi 5, при компиляции получается следующая ошибка :
  Incompatible types: 'String' and 'PChar'.
После изменения выражения
  TheWindow := FindWindow(ClassName, WindowTitle)
на
  TheWindow := FindWindow(PChar(ClassName), PChar(WindowTitle)) ,
Нормально откомпилировалось.
И ещё: если мы не знаем ClassName или WindowTitle программы, которую мы хотим убить,
то мы не сможем её завершить. Причина в том, что нельзя вызвать функцию в виде:
  KillProgram(nil, WindowTitle)
  или
  KillProgram(ClassName, nil).
Компилятор не позволяет передать nil в переменную типа String.
Итак, я изменил объявление
  KillProgram(ClassName: string; WindowTitle: string)
на
  KillProgram(ClassName: PChar; WindowTitle: PChar),
вот теперь функция действительно может завершить любое приложение, если вы не знаете
ClassName или WindowTitle этого приложения.