var
Form1: TForm1;
// Глобальные переменные:
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
StartEn: Boolean = False;
implementation
{$R *.DFM}
// Запуск процесса
procedure TForm1.StartButtonClick(Sender: TObject);
var
CmdStr: PChar; // Командная строка для запуска приложения
begin
CmdStr := PChar(FilenameEdit1.FileName); // Определение командной строки
StartEn := False; // Запущено ли приложение
// Без этого приложение не стартует =<
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_NORMAL; // Состояние окна запущенного приложения
// <= Без этого приложение не стартует
// Запускаем процесс
StartEn := CreateProcess(nil,
CmdStr, { указатель командной строки }
nil, { указатель на процесс атрибутов безопасности }
nil, { указатель на поток атрибутов безопасности }
False, { флаг родительского обработчика }
CREATE_NEW_CONSOLE or { флаг создания }
NORMAL_PRIORITY_CLASS,
nil, { указатель на новую среду процесса }
nil, { указатель на имя текущей директории }
StartupInfo, { указатель на STARTUPINFO }
ProcessInfo); { указатель на PROCESS_INF }
EndButton.Enabled := StartEn;
end;
// Терминация процесса
procedure TForm1.EndButtonClick(Sender: TObject);
begin
if StartEn then
begin
ProcessInfo.hProcess := OpenProcess(PROCESS_TERMINATE, False,
ProcessInfo.dwProcessId);
if ProcessInfo.hProcess <> Null then
begin
TerminateProcess(ProcessInfo.hProcess, 0);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;
StartEn := False;
EndButton.Enabled := StartEn;
end;
|