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;