Как правильно завершить некое приложение 2

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Панферов Андрей

Если бы колбаса продавалась так же как программное обеспечение, то под прозрачной оберткой у нее было бы следующее соглашение:

1) изготовитель не гарантирует совместимость данного продукта с организмом и не несет никаких последствий за его употребление;

2) потребителю запрещается исследовать содержимое этой колбасы (например, на наличие крысиных хвостов);

3) покупатель может сьесть колбасу, но все равно не станет ее владельцем;

4) употребить колбасу может только один человек;

5) покупатель не может продать колбасу кому-либо;

6)производитель не гарантирует, что данный продукт свободен от ошибок (например, от примесей цианистого калия);

7) возможная ответственность за здоровье покупателя не может превысить стоимость колбасы;

8) разрывая обертку, покупатель принимает условия данного соглашения.

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;

{/codecitation}

Добавить комментарий