Если бы колбаса продавалась так же как программное обеспечение, то под прозрачной оберткой у нее было бы следующее соглашение:
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);
beginif StartEn thenbegin
ProcessInfo.hProcess := OpenProcess(PROCESS_TERMINATE, False,
ProcessInfo.dwProcessId);
if ProcessInfo.hProcess <> Null thenbegin
TerminateProcess(ProcessInfo.hProcess, 0);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;
StartEn := False;
EndButton.Enabled := StartEn;
end;
В статье описывается способ корректного завершения выполнения приложения в Delphi, а также приведен пример использования функции CreateProcess для запуска нового процесса и функции TerminateProcess для его терминации.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.