Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Общие вопросы > Передать аргументы в строку запуска


Автор: cellleexx 02.03.21, 11:01
Здравствуйте!

Подскажите, пожалуйста, как передать параметры в строку запуска внешнего приложения?
Приложил фото.

https://ibb.co/HDjcnbG
____________.PNG (, : 25)

Автор: Gonarh 02.03.21, 11:31
Пользоваться WinExec - моветон, лучше CreateProcess
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    WinExec('"application.exe" /param1 /param2 data3', Sw_SHOW)


Добавлено
А вообще, читай документацию https://docs.microsoft.com/en-us/windows/wi...winbase-winexec

Автор: cellleexx 04.03.21, 19:20
Подскажет кто?

Автор: Gonarh 05.03.21, 03:40
Чем тебя не устраивает вариант, который я тебе подсказал?

Автор: cellleexx 05.03.21, 11:21
Цитата Gonarh @

Полностью устраивает.

Автор: filh 11.03.21, 08:26
Функция для запуска с параметрами
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    function ExecuteProcess(const FileName, Params: string; Folder: string; WaitUntilTerminated, WaitUntilIdle, RunMinimized: boolean;
      var ErrorCode: integer): boolean;
    var
      CmdLine: string;
      WorkingDirP: PChar;
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      Result := true;
      CmdLine := '"' + FileName + '" ' + Params;
      if Folder = '' then Folder := ExcludeTrailingPathDelimiter(ExtractFilePath(FileName));
      ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
      StartupInfo.cb := SizeOf(StartupInfo);
      if RunMinimized then
        begin
          StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
          StartupInfo.wShowWindow := SW_SHOWMINIMIZED;
        end;
      if Folder <> '' then WorkingDirP := PChar(Folder)
      else WorkingDirP := nil;
      if not CreateProcess(nil, PChar(CmdLine), nil, nil, false, 0, nil, WorkingDirP, StartupInfo, ProcessInfo) then
        begin
          Result := false;
          ErrorCode := GetLastError;
          exit;
        end;
      with ProcessInfo do
        begin
          CloseHandle(hThread);
          if WaitUntilIdle then WaitForInputIdle(hProcess, INFINITE);
          if WaitUntilTerminated then
            repeat
              Application.ProcessMessages;
            until MsgWaitForMultipleObjects(1, hProcess, false, INFINITE, QS_ALLINPUT) <> WAIT_OBJECT_0 + 1;
          CloseHandle(hProcess);
        end;
    end;

Использование:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var
      FileName, Parameters, WorkingFolder: string;
      Error: integer;
      OK: boolean;
    begin
      FileName := 'C:\FullPath\myapp.exe'; // твое приложение для запуска
      WorkingFolder := ''; // рабочая папка, если пусто, то возьмет путь из запущенного приложения
      Parameters := ''; // твои параметры из Edit'ов
      OK := ExecuteProcess(FileName, Parameters, WorkingFolder, false, false, false, Error);
      if not OK then ShowMessage('Ошибка: ' + IntToStr(Error));
    end;


Или тебя интересовало как из Edit'ов вставить?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Parameters := '/' + Edit1.Text + ' /' + Edit2.Text + ' /' + Edit3.Text;

Автор: cellleexx 13.03.21, 14:07
Цитата filh @

Да, да именно! Из Edit'ов!

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)