Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Программа и Интерфейс , Приложения чужие

Как правильно завершить некое приложение 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;

Статья - это юмористическое сравнение между продажей колбас и лицензированием программного обеспечения, подчеркивающее различия в том, как клиенты обрабатываются. Код-снippet, предоставленный ниже, является приложением Delphi, которое запускает и останавливает процесс.

StartButtonClick

  1. Определяет строку команды (CmdStr) из FilenameEdit1.FileName, которая, вероятно, является полем ввода для пользователя, чтобы указать файл исполняемого файла.
  2. Устанавливает StartEn (логическое переменная) в False, указывая, что процесс не был запущен еще.
  3. Инициализирует структуру TStartupInfo и заполняет ее нулями с помощью FillChar.
  4. Устанавливает различные поля структуры TStartupInfo, такие как cb (размер структуры), dwFlags (набор флагов, указывающих, как запустить процесс) и wShowWindow (определяющий состояние окна).
  5. Создает новый процесс с помощью CreateProcess, передавая различные параметры:
    • CmdStr: строка команды
    • nil: нет атрибутов безопасности для процесса
    • nil: нет атрибутов безопасности для потока
    • False: не наследовать handles родительского процесса
    • CREATE_NEW_CONSOLE и NORMAL_PRIORITY_CLASS: создать новый консольный окно с нормальным классом приоритета
    • nil: нет нового блока окружения
    • nil: текущий каталог
    • StartupInfo: структура STARTUPINFO
    • ProcessInfo: структура PROCESS_INFORMATION

EndButtonClick

  1. Проверяет, является ли StartEn истинным, указывая, что процесс был запущен.
  2. Если так, открывает процесс с помощью OpenProcess, specifies terminate flag (PROCESS_TERMINATE) и закрывает handles для потока и процесса.

Код обеспечивает基本ную функциональность запуска и остановки процесса, но стоит отметить:

  • Код не обрабатывает ошибки или исключения должным образом.
  • Он предполагает, что пользователь правильно ввел имя файла исполняемого файла в FilenameEdit1.FileName.
  • Он не предоставляет никакой обратной связи пользователю о успехе или неудаче запуска/остановки процесса.

В отношении предложений, следующие несколько:

  • Реализуйте правильную обработку ошибок и исключений с помощью блоков try-except.
  • Проверьте ввод пользователя (например, проверьте, существует ли файл) перед попыткой запустить процесс.
  • Предоставьте визуальную обратную связь пользователю о статусе процесса (например, используя прогресс-бар или сообщение об ошибке).
  • Рассмотрите использование более современных функций Delphi, таких как синтаксис async/await для асинхронного программирования.

В статье описывается способ корректного завершения выполнения приложения в Delphi, а также приведен пример использования функции CreateProcess для запуска нового процесса и функции TerminateProcess для его терминации.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложения чужие ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 09:05:42/0.0039470195770264/0