Описание функции


Run

Выполняет запуск других программ.

Run('program'[,'workingdir'[,show_flag[,opt_flag]]])

Параметры

program Полный путь к программе (EXE, BAT, COM, или PIF) для запуска (см. примечания).
workingdir [необязательный] Рабочий каталог. Это не путь к программе.
show_flag [необязательный] Режим отображения запускаемой программы:
@SW_HIDE = скрытое окно (или ключевое слово Default)
@SW_MINIMIZE = свернутое окно
@SW_MAXIMIZE = развернутое окно
opt_flag [необязательный] Управление различными опциями взаимодействия родительского и дочернего процессов.
0x1 = предоставить указатель дочернего потока STDIN
0x2 = предоставить указатель дочернего потока STDOUT
0x4 = предоставить указатель дочернего потока STDERR
0x8 = предоставить указатель STDOUT и STDERR.
0x10 = предоставить дочерний от родительского потока STDIO. Этот флаг не может быть совмещен с любым другим флагом STDIO. Этот флаг имеет смысл только, когда родительская программа скомпилирована как консольное приложение.
0x10000 = дочерний консольный процесс должен быть создан в собственном окне, вместо использования родительского окна. Этот флаг имеет смысл только, когда родительская программа скомпилирована как консольное приложение.

Возвращаемое значение

Успех:Возвращает PID запущенного процесса.
Ошибка:Возвращает 0 и устанавливает @error не равным нулю.

Примечания

Пути с пробелами должны быть заключены в одинарные кавычки.

Для запуска DOS (console) команд:

exect=Run(@ComSpec&'~~/c~~'&'commandName','''',@SW_HIDE)


После запуска указанной программы другие команды продолжает выполняться. Используйте функцию RunWait(), чтобы приостановить выполнение до момента завершения выполнения запущенной программы.


Функцию можно подключить через команду exect
Для передачи пустой строки можно воспользоваться ключевым словом Null
Для передачи значения по умолчанию можно воспользоваться ключевым словом Default

См. также

RunWait, RunAs, RunAsWait, ShellExecute, ShellExecuteWait, ProcessClose

Примеры:
 Как создать кнопку?


exect=$var_aa=Run('Explorer.exe~~/select,'&@ProgramFilesDir&'\Internet~~Explorer') GLOBALEXECT<a> ;; пример запуска программы

exect=Run('calc')||Sleep(1000)||ControlClick('Калькулятор',Null,'[ID:139]') ;; запустить калькулятор и эмулировать нажатие мыши на указанном элементе (на Win10 не работает)

exect=Run('notepad.exe')||WinWait('[CLASS:Notepad]')||Sleep(3000)||WinClose('[CLASS:Notepad]') ;; запустить "Блокнот", дождаться появления указанного окна и через 3 секунды закрыть окно

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','привет') ;; запустить "Блокнот", дождаться активизации и ввести слово "привет"

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','закройте~~окно')||WinWaitClose(Eval('var_h'))||MsgBox(4096,Null,'окно~~закрыто') ;; запустить "Блокнот", дождаться закрытие окна пользователем

exect=Run('notepad.exe')||$var_h=WinWaitActive('[CLASS:Notepad]')||ControlSend(Eval('var_h'),Null,'Edit1','сверните~~окно')||WinWaitNotActive(Eval('var_h'))||MsgBox(4096,Null,'окно~~не~~активно') ;; запустить "Блокнот", дождаться когда окно не будет активным

exect=$var_ipid=Run('notepad.exe')||Sleep(3000)||ProcessClose($var_ipid) ;; запустить "Блокнот" и через 3 секунды завершить процесс

exect=$var_ipid=Run('notepad.exe')||ProcessWaitClose($var_ipid)||MsgBox(4096,Null,'процесс~~завершился') ;; запускает "Блокнот" и ожидает его закрытия

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]',Null,5)||WinSetState(HWnd($var_h),Null,@SW_MINIMIZE) ;; запускает "Блокнот", ожидает появление и сворачивает

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]',Null,5)||SendKeepActive(HWnd($var_h)) <FOR> 1 <TO> 10 exect=Send('привет')||Sleep(500) <NEXT> exect=SendKeepActive(Null)||WinClose(HWnd($var_h)) ;; запустить "Блокнот" и удерживать окно блокнота активным при использовании функции Send()

exect=Run('notepad.exe')||$var_h=WinWait('[CLASS:Notepad]',Null,5)||IsHWnd(Eval('var_h'))?_ViewValues('Это~~дескриптор~~HWND'):_ViewValues('Это~~НЕ~~дескриптор~~HWND') ;; запустить "Блокнот" и проверить дескриптор окна на валидность

exect=Run(@ComSpec&'~~/k~~'&'netsh~~interface~~ip~~show~~address') ;; вызов консоли и передача параметров (консоль остаётся открытой)

exect=Run(@ComSpec&'~~/k~~'&ClipGet()) ;; вызов консоли и передача параметров из буфера обмена (консоль остаётся открытой)

exect=Run(@ScriptDir&'\TCIMG.exe~~infbx=InfoBox_TEST1') ;; пример запуска утилиты с параметрами

close=ACTIVE exect=Run(_PathFull('%%COMMANDER_PATH%%\TOTALCMD.EXE'),'''',@SW_MAXIMIZE) ;; закрыть активное окно TC и запустить

exect=Run('rundll32~~mshtml.dll,PrintHTML~~''%P%N''') ;; отправить файл под курсором на печать, выбор принтера


© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru