EXECCONSOLEAPP — различия между версиями
Alexey (обсуждение | вклад) |
Alexey (обсуждение | вклад) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
|Название=EXECCONSOLEAPP | |Название=EXECCONSOLEAPP | ||
|Описание=Выполняет внешнее приложение. Возвращает код завершения приложения, помещает его текстовый вывод в переменную :AppStdOut | |Описание=Выполняет внешнее приложение. Возвращает код завершения приложения, помещает его текстовый вывод в переменную :AppStdOut | ||
− | |Синтаксис=Вариант 1 | + | |Синтаксис=Вариант 1 – выполнение операции над указанным файлом, используя приложение по умолчанию<br/> |
EXECCONSOLEAPP(`shellexecute`, '''Операция''', '''Файл''', '''Параметры''', '''Путь к файлу''', Вид окна)<br/> | EXECCONSOLEAPP(`shellexecute`, '''Операция''', '''Файл''', '''Параметры''', '''Путь к файлу''', Вид окна)<br/> | ||
либо (упрощенный вариант)<br/> | либо (упрощенный вариант)<br/> | ||
EXECCONSOLEAPP(`start`, '''Файл''', Режим)<br/> | EXECCONSOLEAPP(`start`, '''Файл''', Режим)<br/> | ||
− | Вариант 2 | + | Вариант 2 – запуск консольного приложения<br/> |
− | EXECCONSOLEAPP('''Командная строка''', Режим ожидания) | + | EXECCONSOLEAPP('''Командная строка''', Режим ожидания, Флаги) |
|Аргументы= | |Аргументы= | ||
{{Аргумент | {{Аргумент | ||
|Название=Операция | |Название=Операция | ||
|Пояснение=Одна из операций Windows, варианты: | |Пояснение=Одна из операций Windows, варианты: | ||
− | *`find` | + | *`find` – стандартный поиск Windows (файлов, папок, компьютеров и т.д.). Файл - путь к папке, начиная с которой выполняется поиск, остальные параметры не используются. |
− | *`explore` | + | *`explore` – стандартный проводник Windows. Файл - путь к папке, на которой открывается проводник, остальные параметры не используются. |
− | *`edit` | + | *`edit` – редактирование файла в приложении по умолчанию |
− | *`open` | + | *`open` – открытие файла в приложении по умолчанию |
− | *`print`,`printto` | + | *`print`,`printto` – печать файла из приложения по умолчанию |
}}<br/> | }}<br/> | ||
{{Аргумент | {{Аргумент | ||
Строка 33: | Строка 33: | ||
|Название=Вид окна | |Название=Вид окна | ||
|Пояснение=Вид окна приложения (необязательный параметр): | |Пояснение=Вид окна приложения (необязательный параметр): | ||
− | *0 (`SW_HIDE`) | + | *0 (`SW_HIDE`) – скрывает окно загружаемого приложения и активизирует другое окно; |
− | *1 (`SW_SHOWNORMAL`) | + | *1 (`SW_SHOWNORMAL`) – отображает главное окно приложения и делает его активным. Если окно приложения минимизировано или максимизировано, Windows восстанавливает его первоначальный размер и позицию; |
− | *2 (`SW_SHOWMINIMIZED`) | + | *2 (`SW_SHOWMINIMIZED`) – окно загружаемого приложения минимизировано; |
− | *3 (`SW_MAXIMIZE`) | + | *3 (`SW_MAXIMIZE`) – раскрывает окно приложения на весь экран и делает его активным; |
− | *4 (`SW_SHOWNOACTIVATE`) | + | *4 (`SW_SHOWNOACTIVATE`) – отображает окно приложения в его последних сохранённых размерах, но не делает его активным. |
}}<br/> | }}<br/> | ||
{{Аргумент | {{Аргумент | ||
Строка 47: | Строка 47: | ||
|Название=Режим | |Название=Режим | ||
|Пояснение=строка, режим запуска Windows-приложения для функции ShellExecute: | |Пояснение=строка, режим запуска Windows-приложения для функции ShellExecute: | ||
− | *`open` | + | *`open` – открытие документа |
− | *`print` | + | *`print` – печать документа. |
}}<br/> | }}<br/> | ||
{{Аргумент | {{Аргумент | ||
|Название=Режим ожидания | |Название=Режим ожидания | ||
|Пояснение=целое число: | |Пояснение=целое число: | ||
− | *0 | + | *0 – с ожиданием. Никакие формы ГБ недоступны до окончания работы внешней программы; |
− | *1 | + | *1 – условное ожидание. Форма, с которой произведен вызов, становится недоступной, но можно работать в других. По окончании работы внешней программы недоступная форма становится вновь доступной; |
− | *2 | + | *2 – без ожидания. |
− | Стандартный вывод консольных приложений, запущенных через ExecConsoleApp в режиме с ожиданием (0 и 1), перехватывается и записывается в переменную ''':AppStdOut''' | + | При значениях режима ожидания 0 и 1 результат вызова - это exitcode процесса. |
+ | }}<br/> | ||
+ | {{Аргумент | ||
+ | |Название=Флаги | ||
+ | |Пояснение=целое число (битовая маска): | ||
+ | *бит #0=1 – скрыть окно консоли; | ||
+ | *бит #1=1 – НЕ перехватывать стандартный вывод (stdout). | ||
+ | |||
+ | Стандартный вывод консольных приложений, запущенных через ExecConsoleApp в режиме с ожиданием (0 и 1) и флагом со сброшенным битом #1 (бит #1=0), перехватывается и записывается в переменную ''':AppStdOut'''. Не всегда работает надёжно, поэтому можно перенаправить вывод в файл, а затем читать из него. | ||
}} | }} | ||
|Результат=Целое число | |Результат=Целое число | ||
Строка 71: | Строка 79: | ||
`a C:\myarchive.rar "C:\Program Files\WinRAR\WinRAR.chm"`, | `a C:\myarchive.rar "C:\Program Files\WinRAR\WinRAR.chm"`, | ||
`` | `` | ||
+ | ) | ||
+ | Печать на выбранный принтер (работает не со всеми типами документов, вопросы - к Microsoft). Путь и имя файла, а также имя принтера, если они содержат пробелы, нужно передавать в кавычках: | ||
+ | ExecConsoleApp( | ||
+ | `shellexecute`, | ||
+ | `printto`, | ||
+ | `"D:\Файлы для печати\1.doc"`, | ||
+ | `"\\AGENT007\hpLJ1010HB"`, | ||
+ | 0, | ||
+ | `SW_HIDE` | ||
+ | ) | ||
+ | Пример скрипта для пакетной печатной формы (печатает файл, путь и имя которого хранится в документе, на принтер, выбранный в стандартной форме печати): | ||
+ | IfEmpty( | ||
+ | DataSet.Heap.FileToPrint, | ||
+ | 0, | ||
+ | ( | ||
+ | ExecConsoleApp( | ||
+ | `shellexecute`, | ||
+ | `printto`, | ||
+ | `"`+DataSet.Heap.FileToPrint+`"`, | ||
+ | `"`+:PrinterName+`"`, | ||
+ | 0, | ||
+ | `SW_HIDE` | ||
+ | ), | ||
+ | 0 | ||
+ | ) | ||
+ | ) | ||
+ | Печать на принтер "по умолчанию": | ||
+ | ExecConsoleApp( | ||
+ | `shellexecute`, | ||
+ | `print`, | ||
+ | `d:\aaa.pdf`, | ||
+ | ``, | ||
+ | 0, | ||
+ | `SW_HIDE` | ||
) | ) | ||
}} | }} |
Текущая версия на 06:06, 17 декабря 2024
Выполняет внешнее приложение. Возвращает код завершения приложения, помещает его текстовый вывод в переменную :AppStdOut
Синтаксис
Вариант 1 – выполнение операции над указанным файлом, используя приложение по умолчанию
EXECCONSOLEAPP(`shellexecute`, Операция, Файл, Параметры, Путь к файлу, Вид окна)
либо (упрощенный вариант)
EXECCONSOLEAPP(`start`, Файл, Режим)
Вариант 2 – запуск консольного приложения
EXECCONSOLEAPP(Командная строка, Режим ожидания, Флаги)
Аргументы
- Операция
- Одна из операций Windows, варианты:
- `find` – стандартный поиск Windows (файлов, папок, компьютеров и т.д.). Файл - путь к папке, начиная с которой выполняется поиск, остальные параметры не используются.
- `explore` – стандартный проводник Windows. Файл - путь к папке, на которой открывается проводник, остальные параметры не используются.
- `edit` – редактирование файла в приложении по умолчанию
- `open` – открытие файла в приложении по умолчанию
- `print`,`printto` – печать файла из приложения по умолчанию
- Файл
- Имя файла, с которым следует выполнить операцию.
- Параметры
- Список параметров, передаваемых загружаемому приложению. Например, для операции printto параметром может быть имя принтера
- Путь к файлу
- Путь к файлу, указанному в параметре Файл. Если Файл уже содержит путь, то Путь=пустая строка
- Вид окна
- Вид окна приложения (необязательный параметр):
- 0 (`SW_HIDE`) – скрывает окно загружаемого приложения и активизирует другое окно;
- 1 (`SW_SHOWNORMAL`) – отображает главное окно приложения и делает его активным. Если окно приложения минимизировано или максимизировано, Windows восстанавливает его первоначальный размер и позицию;
- 2 (`SW_SHOWMINIMIZED`) – окно загружаемого приложения минимизировано;
- 3 (`SW_MAXIMIZE`) – раскрывает окно приложения на весь экран и делает его активным;
- 4 (`SW_SHOWNOACTIVATE`) – отображает окно приложения в его последних сохранённых размерах, но не делает его активным.
- Командная строка
- строка, полный или относительный путь к исполняемому файлу, а также аргументы командной строки (ключи).
- Для вызова команд ОС нужно использовать синтаксис «cmd /c <команда>».
- Режим
- строка, режим запуска Windows-приложения для функции ShellExecute:
- `open` – открытие документа
- `print` – печать документа.
- Режим ожидания
- целое число:
- 0 – с ожиданием. Никакие формы ГБ недоступны до окончания работы внешней программы;
- 1 – условное ожидание. Форма, с которой произведен вызов, становится недоступной, но можно работать в других. По окончании работы внешней программы недоступная форма становится вновь доступной;
- 2 – без ожидания.
При значениях режима ожидания 0 и 1 результат вызова - это exitcode процесса.
- Флаги
- целое число (битовая маска):
- бит #0=1 – скрыть окно консоли;
- бит #1=1 – НЕ перехватывать стандартный вывод (stdout).
Стандартный вывод консольных приложений, запущенных через ExecConsoleApp в режиме с ожиданием (0 и 1) и флагом со сброшенным битом #1 (бит #1=0), перехватывается и записывается в переменную :AppStdOut. Не всегда работает надёжно, поэтому можно перенаправить вывод в файл, а затем читать из него.
Тип результата
- Целое число
Примеры
Запустит "Блокнот":
ExecConsoleApp(`start`, `notepad`)
Удалит из папки c:\temp все файлы:
ExecConsoleApp(`cmd /c del c:\temp\*.txt`, 2)
Запустит проводник Windows и отобразит в нём папку "e:\1\":
ExecConsoleApp(`shellexecute`, `explore`, `e:\1\`, ``, ``, `SW_SHOWNORMAL`)
Запустит winrar.exe, который создаст архив C:\myarchive.rar и заархивирует файл "C:\Program Files\WinRAR\WinRAR.chm":
ExecConsoleApp(`shellexecute`, `open`, `"C:\Program Files\WinRAR\WinRAR.exe"`, `a C:\myarchive.rar "C:\Program Files\WinRAR\WinRAR.chm"`, `` )
Печать на выбранный принтер (работает не со всеми типами документов, вопросы - к Microsoft). Путь и имя файла, а также имя принтера, если они содержат пробелы, нужно передавать в кавычках:
ExecConsoleApp( `shellexecute`, `printto`, `"D:\Файлы для печати\1.doc"`, `"\\AGENT007\hpLJ1010HB"`, 0, `SW_HIDE` )
Пример скрипта для пакетной печатной формы (печатает файл, путь и имя которого хранится в документе, на принтер, выбранный в стандартной форме печати):
IfEmpty( DataSet.Heap.FileToPrint, 0, ( ExecConsoleApp( `shellexecute`, `printto`, `"`+DataSet.Heap.FileToPrint+`"`, `"`+:PrinterName+`"`, 0, `SW_HIDE` ), 0 ) )
Печать на принтер "по умолчанию":
ExecConsoleApp( `shellexecute`, `print`, `d:\aaa.pdf`, ``, 0, `SW_HIDE` )