Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "Run / RunWait", в содержании - "Process Management" - "Run/RunWait", v1.0.46.09.

Ник переводчика: YMP.

Настоящее имя переводчика: Юрий Попов.

Run / RunWait

Запускает указанную программу, открывает документ. В отличие от Run, RunWait ждёт пока программа не завершится.

Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]

Параметры

Target Документ, URL, исполняемый файл (.exe, .com, .bat, и т.п.), ярлык (.lnk) или "системный глагол" (см. примечания). Если задаётся имя локального файла без указания пути, вначале производится поиск в папке, определяемой встроенной переменной A_WorkingDir. Если файл там не найден, система будет искать его в папках, включённых в системный путь (переменная окружения Path).

Чтобы передать параметры, добавьте их сразу после имени программы или документа. Если параметр содержит пробелы, надёжнее всего заключить его в двойные кавычки (хотя иногда работает и без них).

Примечание переводчика. Некомпилированные скрипты считаются документами. Запускать документы с параметрами команды Run и RunWait не умеют. Поэтому, если нужно запустить скрипт с параметрами, вначале строки надо указать путь к исполняемому файлу интерпретатора для данного типа скриптов. Для .ahk это AutoHotkey.exe, для .js или .vbs - wscript.exe или cscript.exe. Т.к. путь к AutoHotkey.exe содержится во встроенной переменной A_AhkPath, то можно писать, например, так:
Run, %A_AhkPath% C:\Script.ahk param1 param2 param3
WorkingDir Рабочая папка для запускаемого объекта. Не заключайте путь в кавычки, даже если он содержит пробелы. Если параметр опущен, будет использована рабочая папка самого скрипта (A_WorkingDir).
Max|Min|Hide|
UseErrorLevel
Если опущен, программа запускается в нормальном окне. Иначе параметр может содержать одно из следующих слов.

Max: запуск в развёрнутом окне

Min: запуск в свёрнутом окне

Hide: запуск в скрытом окне (не может быть использовано в сочетании с каким-либо из предыдущих)

Некоторые приложения (например, Калькулятор) не подчиняются этому параметру.

UseErrorLevel: может быть указано отдельно или вместе с каким-то из предыдущих слов (отделять пробелом). Если запуск не удаётся, это значение отменяет появление диалогового окна, извещающего об ошибке, помещает в ErrorLevel слово ERROR и позволяет текущему потоку выполняться дальше. Если запуск удаётся, RunWait сохраняет в ErrorLevel код выхода программы, а Run устанавливает его в 0.

С версии 1.0.42.03, когда указано UseErrorLevel, в переменную A_LastError помещается результат выполнения функции операционной системы GetLastError(). В A_LastError может быть число между 0 и 4294967295 (всегда десятичное). Ноль означает успех, а любое другое число - неудачу. Каждое число соответствует определённому виду ошибки (список можно найти на www.microsoft.com через поиск по строке "system error codes"). Так же как и в случае ErrorLevel, значение A_LastError своё для каждого потока, т.е. прерывание другими потоками не изменяет его. Однако DllCall также устанавливает A_LastError.
OutputVarPID Имя переменной, куда будет помещён идентификатор процесса (PID) запущенной программы. Переменная будет пустой, если PID не может быть определён, что обычно случается, если команда применяется не к исполняемому файлу, а к документу, ярлыку или системному глаголу. RunWait также поддерживает этот параметр, хотя её OutputVarPID нужно использовать с помощью другого потока, т.к. поток самой команды сможет продолжиться только после завершения запущенной ею программы.

К моменту, когда команда Run определит PID, окно или окна, создаваемые этим процессом, могут ещё не существовать. Чтобы дождаться хотя бы одного из них, используйте команду WinWait ahk_pid %OutputVarPID%.

ErrorLevel

Run: не устанавливает ErrorLevel, кроме случая, когда указано значение UseErrorLevel (см. выше), в этом случае ErrorLevel будет содержать слово ERROR при неудаче и 0 при успехе.

RunWait: помещает в ErrorLevel код выхода программы (32-битное число со знаком). Если указано UseErrorLevel и запуск не удаётся, в ErrorLevel помещается слово ERROR.

Примечания

В отличие от Run, RunWait будет ждать завершения запущенной программы, после чего в ErrorLevel будет сохранён код выхода программы (32-битное число со знаком). Некоторые программы возвращают этот код сразу же, несмотря на то, что продолжают выполняться; эти программы порождают другой процесс.

Если значение Target содержит запятые, они должны быть экранированы, как показано три раза в следующем примере:

Run rundll32.exe shell32.dll`,Control_RunDLL desk.cpl`,`, 3 ; Открывает Панель управления > Экран > Параметры

При запуске программы через Comspec (cmd.exe) - например, с целью перенаправить ввод или вывод программы, - если путь или имя исполняемого файла содержат пробелы, вся строка должна быть заключена во внешнюю пару кавычек. Например:

Run %comspec% /c ""C:\My Utility.exe" "parameter 1" "parameter 2" > "C:\My File.txt""

Если команда не может открыть указанное в Target, выводится диалоговое окно ошибки, после чего скрипт ведёт себя так, как будто он встретил команду Exit. Чтобы избежать этого, добавьте строку UseErrorLevel в третий параметр.

Производительность может быть слегка улучшена, если задавать в Target точные пути, например, Run, C:\Windows\Notepad.exe "C:\My Documents\Test.txt" вместо Run, C:\My Documents\Test.txt.

Специальные папки могут быть открыты с использованием их CLSID. Например:

Run ::{20d04fe0-3aea-1069-a2d8-08002b30309d} ; Открывает папку "Мой компьютер".
Run ::{645ff040-5081-101b-9f08-00aa002f954e} ; Открывает Корзину.

Системные глаголы соответствуют действиям, доступным через контекстное меню файла в Проводнике. Если файл открывается без указания действия, будет использован глагол по умолчанию - обычно это "open" (открыть). Если глагол задаётся, после него должно быть указано имя целевого файла. В настоящее время поддерживаются следующие глаголы:


properties Выводит окно свойств указанного файла. Например: Run, properties "C:\My File.txt". Замечание: окно свойств закроется автоматически при завершении скрипта. Чтобы избежать этого, используйте WinWait, чтобы дождаться появления окна, затем - WinWaitClose, чтобы ждать, пока пользователь его не закроет.
find Открывает окно поиска Проводника в указанной папке. Например: Run, find D:\
explore Открывает указанную папку в Проводнике. Например: Run, explore %A_ProgramFiles%
edit Открывает указанный файл для редактирования. Это может и не сработать, если данный тип файла не имеет связанного с ним действия "edit" ("изменить" и т.п.) Пример: Run, edit "C:\My File.txt"
open Открывает указанный файл (обычно не нужно, т.к. это действие по умолчанию для большинства типов файлов). Например: Run, open "My File.txt"
print Печатает указанный файл при помощи ассоциированного приложения, если такое есть. Например: Run, print "My File.txt"

Когда RunWait находится в ожидании, новые потоки могут запускаться через горячие клавиши, пункты меню или таймеры.

Примеры

Run, Notepad.exe, C:\Мои документы, max

Run, mailto:someone@domain.com?subject=Это тема письма&body=Это текст письма.

Run, ReadMe.doc, , Max UseErrorLevel ; Запустить развёрнутым и не выводить диалог при неудаче.
if ErrorLevel = ERROR
    MsgBox Документ не может быть открыт.

RunWait, %comspec% /c dir c:\ >> c:\DirTest.txt, , min
Run, c:\DirTest.txt
Run, properties c:\DirTest.txt

Run, www.autohotkey.com ; Может быть открыт любой URL.

Run, mailto:someone@somedomain.com ; Это должно открыть почтовую программу по умолчанию.

Run ::{20d04fe0-3aea-1069-a2d8-08002b30309d} ; Открывает папку "Мой компьютер".
Run ::{645ff040-5081-101b-9f08-00aa002f954e} ; Открывает Корзину.

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.