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

Запуск программы

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

Запуск программы

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ Open a file or starts a programm (without parameters) }

 procedure OpenFile(FileName: string);
 var
   c: array[0..800] of Char;
 begin
   StrPCopy(c, FileName);
   ShellExecute(Application.Handle, 'open', c, nil, nil, SW_NORMAL);
 end;

 { Starts a programm with commandline parameters }

 procedure OpenProgram(prog, params: string);
 var
   c, p: array[0..800] of Char;
 begin
   StrPCopy(c, prog);
   StrPCopy(p, params);
   ShellExecute(Application.Handle, 'open', c, p, nil, SW_NORMAL);
 end;

 { Starts a program and wait until its terminated: 
  WindowState is of the SW_xxx constants }

 function ExecAndWait(const FileName, Params: string;
   WindowState: Word): Boolean;
 var
   SUInfo: TStartupInfo;
   ProcInfo: TProcessInformation;
   CmdLine: string;
 begin
   { Enclose filename in quotes to take care of 
    long filenames with spaces. }
   CmdLine := '"' + FileName + '"' + Params;
   FillChar(SUInfo, SizeOf(SUInfo), #0);
   with SUInfo do
   begin
     cb := SizeOf(SUInfo);
     dwFlags := STARTF_USESHOWWINDOW;
     wShowWindow := WindowState;
   end;
   Result := CreateProcess(nil, PChar(CmdLine), nil, nil, False,
     CREATE_NEW_CONSOLE or
     NORMAL_PRIORITY_CLASS, nil,
     PChar(ExtractFilePath(FileName)),
     SUInfo, ProcInfo);
   { Wait for it to finish. }
   if Result then
     WaitForSingleObject(ProcInfo.hProcess, INFINITE);
 end;

 { Execute a complete shell command line and waits until terminated. }

 function ExecCmdLineAndWait(const CmdLine: string;
   WindowState: Word): Boolean;
 var
   SUInfo: TStartupInfo;
   ProcInfo: TProcessInformation;
 begin
   { Enclose filename in quotes to take care of 
    long filenames with spaces. }
   FillChar(SUInfo, SizeOf(SUInfo), #0);
   with SUInfo do
   begin
     cb := SizeOf(SUInfo);
     dwFlags := STARTF_USESHOWWINDOW;
     wShowWindow := WindowState;
   end;
   Result := CreateProcess(nil, PChar(CmdLine), nil, nil, False,
     CREATE_NEW_CONSOLE or
     NORMAL_PRIORITY_CLASS, nil,
     nil {PChar(ExtractFilePath(Filename))},
     SUInfo, ProcInfo);
   { Wait for it to finish. }
   if Result then
     WaitForSingleObject(ProcInfo.hProcess, INFINITE);
 end;

 { Execute a complete shell command line without waiting. }

 function OpenCmdLine(const CmdLine: string;
   WindowState: Word): Boolean;
 var
   SUInfo: TStartupInfo;
   ProcInfo: TProcessInformation;
 begin
   { Enclose filename in quotes to take care of 
    long filenames with spaces. }
   FillChar(SUInfo, SizeOf(SUInfo), #0);
   with SUInfo do
   begin
     cb := SizeOf(SUInfo);
     dwFlags := STARTF_USESHOWWINDOW;
     wShowWindow := WindowState;
   end;
   Result := CreateProcess(nil, PChar(CmdLine), nil, nil, False,
     CREATE_NEW_CONSOLE or
     NORMAL_PRIORITY_CLASS, nil,
     nil {PChar(ExtractFilePath(Filename))},
     SUInfo, ProcInfo);
 end;

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

  1. OpenFile:
    • Открывает файл с помощью Windows Shell.
    • Принимает строковый параметр - имя файла.
    • Использует ShellExecute для открытия файла с его 기본ным приложением.
  2. OpenProgram:
    • Запускает внешнюю программу с командными параметрами.
    • Принимает два строковых параметра: prog (имя программы) и params (командные параметры).
    • Использует ShellExecute для запуска программы с заданными параметрами.
  3. ExecAndWait:
    • Выполняет программу и ожидает ее завершения.
    • Принимает три строковых параметра: FileName, Params (командные параметры) и WindowState (константа состояния Windows).
    • Создает новый процесс с помощью CreateProcess.
    • Ожидает завершения процесса с помощью WaitForSingleObject.
  4. ExecCmdLineAndWait:
    • Выполняет полный командный строку shell и ожидает ее завершения.
    • Принимает два строковых параметра: CmdLine (командная строка) и WindowState (константа состояния Windows).
    • Создает новый процесс с помощью CreateProcess.
    • Ожидает завершения процесса с помощью WaitForSingleObject.
  5. OpenCmdLine:
    • Выполняет полный командный строку shell без ожидания ее завершения.
    • Принимает два строковых параметра: CmdLine (командная строка) и WindowState (константа состояния Windows).
    • Создает новый процесс с помощью CreateProcess.

Обратите внимание, что эти процедуры и функции используют встроенную функцию Delphi ShellExecute, которая является обёрткой вокруг Win32 API-функции ShellExecuteEx. Они также используют другие функции Win32 API, такие как CreateProcess, WaitForSingleObject и FillChar.

В отношении улучшения кода следующие предложения:

  • Рассмотрите добавление обработки ошибок в каждой процедуре и функции для обработки случаев, когда программа или процесс не может быть выполнен.
  • Улучшите читаемость кода, разбивая длинные строки на более короткие и используя индентацию согласованно.
  • Рассмотрите использование встроенного компонента Delphi TProcess вместо создания процессов вручную с помощью CreateProcess.
  • Если вы целяете на современные версии Windows, вам может быть полезно использовать новую функцию ShellExecuteEx с флагом SEE_ MASK_NOCLOSEPROCESS, чтобы избежать закрытия процесса при вызове ShellExecute.

В статье представлены четыре процедуры и три функции на языке Delphi, позволяющие запускать файлы или программы с параметрами, а также ожидать выполнения этих процессов.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:27:58/0.0032989978790283/0