Delphi World - Как правильно завершить некое приложение 2
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как правильно завершить некое приложение 2

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

Если бы колбаса продавалась так же как программное обеспечение, то под прозрачной оберткой у нее было бы следующее соглашение:
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;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования