1с shell shellexecute параметры

Обновлено: 02.07.2024

Declare Function ShellExecute Lib "shell32" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long ShellExecute используется в случаях, когда вы хотите, чтобы WINDOWS сама решала, как обрабатывать тот или иной документ по имени этого документа. Функция способна открывать, печатать файл или запускать программу. Под Win 95/98/ME эта функция также откроет папку Мой компьютер или Проводник с указанным каталогом. Если выполняющая программа определена, Windows запустит ту программу. Если файл документа определен, Windows откроет или напечатает его, используя связанную программу

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

В успешном случае функция возвращает значение большее, чем 32. В случае ошибки функция возвратит значение меньшее или равное 32 или одно из следующих значени, определяющих ошибку ERROR_FILE_NOT_FOUND = 2 Указанный файл не найден ERROR_PATH_NOT_FOUND = 3 Указанный путь не найден ERROR_BAD_FORMAT = 11 Указанный исполняемый файл (.EXE) так или иначе недействителен SE_ERR_ACCESSDENIED = 5 только для Win 95/98: Windows отклонил доступ к указанному файлу SE_ERR_ASSOCINCOMPLETE = 27 Ассоциация имени файла является или неполной или недействительной SE_ERR_DDEBUSY = 30 Операция ПРЯМОГО ВВОДА ДАННЫХ(DDE) не может работать, потому что другие действия ПРЯМОГО ВВОДА ДАННЫХ находятся в процессе SE_ERR_DDEFAIL = 29 Операция ПРЯМОГО ВВОДА ДАННЫХ потерпела неудачу SE_ERR_DDETIMEOUT = 28 Операция DDE не была закончена, потому что истекло время запроса SE_ERR_DLLNOTFOUND = 32 только для Win 95/98: Указанный файл DLL не найден SE_ERR_FNF = 2 то же,что и ERROR_FILE_NOT_FOUND SE_ERR_NOASSOC = 31 Нет никакой программы, связанной с указанным типом файла SE_ERR_OOM = 8 только для Win 95/98: Windows имеет недостаточную память, чтобы исполнить операцию SE_ERR_PNF = 3 то же, что и ERROR_PATH_NOT_FOUND SE_ERR_SHARE = 26 Произошла ошибка совместного доступа

После того, как приложение размещает файловый объект, для него часто приходится выполнять следующие действия. Например, приложению может потребоваться запустить другое приложение, позволяющее пользователю изменять файл данных. Если файл является исполняемым файлом, приложение может захотеть просто запустить его. В этом документе описывается, как использовать ShellExecute или ShellExecuteEx для выполнения этих задач.

Использование ShellExecute и ShellExecuteEx

Чтобы использовать ShellExecute или ShellExecuteEx, приложение должно указать объект файла или папки, к которому будет применена операция, и команду , указывающую операцию. Для ShellExecute присвойте эти значения соответствующим параметрам. Для ShellExecuteEx заполните соответствующие элементы структуры шеллексекутеинфо . Существует также несколько других элементов или параметров, которые можно использовать для точной настройки поведения двух функций.

Объекты файлов и папок могут быть частью файловой системы или виртуальных объектов, и их можно идентифицировать по путям или указателям на списки идентификаторов элементов (PIDL).

Команды объекта

Команды, доступные для объекта, по сути являются элементами, которые находятся в контекстном меню объекта. Чтобы узнать, какие команды доступны, просмотрите реестр в разделе

HKey _ _Корень классов \ CLSID \ \ \ команда оболочки

где _ CLSID объекта — это идентификатор класса (CLSID) объекта, а глагол — имя доступной команды. Подключ \ команды verb содержит данные, указывающие, что происходит при вызове этой команды.

Чтобы узнать, какие команды доступны для предопределенных объектов оболочки, просмотрите раздел реестра в разделе

HKey _ Классы _ корневого \ объекта _ имя класса \ \ команда оболочки

где _ имя объекта — это имя предопределенного объекта оболочки. Опять же, \ подраздел команды verb содержит данные, указывающие, что происходит при вызове этой команды.

Часто доступные команды включают:

Команда Описание
изменение; Запускает редактор и открывает документ для редактирования.
поиск Инициирует поиск, начиная с указанного каталога.
open Запускает приложение. Если этот файл не является исполняемым файлом, запускается связанное с ним приложение.
print Выводит файл документа.
properties Отображает свойства объекта.
запуск от имени Запускает приложение от имени администратора. Функция контроля учетных записей (UAC) запросит у пользователя разрешение на запуск приложения с повышенными правами или введите учетные данные администратора, используемого для запуска приложения.

Каждая команда соответствует команде, которая будет использоваться для запуска приложения из окна консоли. Хорошим примером является команда Open , так как она обычно поддерживается. Для файлов .exe Open просто запускает приложение. Однако чаще используется для запуска приложения, которое работает с определенным файлом. Например, файлы .txt могут быть открыты Microsoft WordPad. Команда Open для файла .txt, таким образом, будет соответствовать примерно следующей команде:

При использовании ShellExecute или ShellExecuteEx для открытия файла .txt Wordpad.exe запускается с указанным файлом в качестве аргумента. Некоторые команды могут иметь дополнительные аргументы, например флаги, которые можно добавить при необходимости для правильного запуска приложения. Дальнейшее обсуждение контекстных меню и глаголов см. в разделе расширение контекстных меню.

Как правило, попытка определить список доступных команд для определенного файла немного сложна. Во многих случаях можно просто установить для параметра Лпверб значение NULL, которое вызывает команду по умолчанию для типа файла. Эта процедура обычно эквивалентна установке лпверб в значение "Open", но некоторые типы файлов могут иметь разные команды по умолчанию. Дополнительные сведения см. в разделе расширение контекстных меню и справочная документация по ShellExecuteEx .

Использование ShellExecuteEx для предоставления служб активации с сайта

Службы цепочки сайтов могут управлять множеством поведений активации элементов. на Windows 8 можно указать указатель на цепочку сайтов, чтобы ShellExecuteEx для включения этих поведений. Чтобы предоставить сайт ShellExecuteEx:

  • Укажите параметр см _ _ . флаг маски _ хинст _ — _ флаг сайта в элементе фмаск элемента шеллексекутеинфо.
  • Укажите IUnknown в члене хинстапп объекта шеллексекутеинфо.

Использование ShellExecute для запуска диалогового окна поиска

когда пользователь щелкает правой кнопкой мыши значок папки в обозревателе Windows, одним из пунктов меню является «Search» (поиск). При выборе этого элемента оболочка запускает свою служебную программу поиска. Эта программа отображает диалоговое окно, которое можно использовать для поиска в файлах указанной текстовой строки. Приложение может программно запустить программу поиска для каталога путем вызова ShellExecuteс параметром "Find" в качестве параметра лпверб , а путь к каталогу — как параметр лпфиле . Например, следующая строка кода запускает программу поиска для каталога c: \ мипрограмс.

Простой пример использования ShellExecuteEx

В следующем примере консольного приложения показано использование ShellExecuteEx. Для ясности опущена большая часть кода проверки ошибок.

приложение сначала извлекает пидл каталога Windows и перечисляет его содержимое до тех пор, пока не найдет первый файл .bmp. В отличие от предыдущего примера, ишеллфолдер:: жетдисплайнамеоф используется для получения имени синтаксического анализа файла вместо его отображаемого имени. Так как это папка файловой системы, имя синтаксического анализа — это полный путь, который необходим для ShellExecuteEx.

Строка , содержащая имя файла, в котором ShellExecute будет выполнять действие, заданное параметром воператион.

варгументс [ в необязательное]

Тип: Variant

Строка, содержащая значения параметров для операции.

вдиректори [ в необязательное]

Тип: Variant

Полный путь к каталогу, содержащему файл, указанный параметром сфиле. Если этот параметр не указан, используется текущий рабочий каталог.

воператион [ в необязательное]

Тип: Variant

Операция, которая выполняется. Это значение устанавливается равным одной из строк команд, поддерживаемых файлом. Описание команд см. в разделе "Примечания". Если этот параметр не указан, выполняется операция по умолчанию.

вшов [ в необязательное]

Тип: Variant

Рекомендации относительно того, как окно приложения должно отображаться изначально. Приложение может игнорировать эту рекомендацию. Этот параметр может принимать одно из указанных ниже значений. Если этот параметр не указан, приложение использует значение по умолчанию.

Значение Значение
значение 0 Откройте приложение с помощью скрытого окна.
1 Откройте приложение в нормальном окне. Если окно является сведенным или развернутым, система восстанавливает его исходный размер и расположение.
2 Откройте приложение с помощью сворачивания окна.
3 Откройте приложение с развернутым окном.
4 Откройте приложение со своим окном в последнем размере и позиции. Активное окно остается активным.
5 Откройте приложение с его текущим размером и положением в своем окне.
7 Откройте приложение с помощью сворачивания окна. Активное окно остается активным.
10 Откройте приложение со своим окном в состоянии по умолчанию, заданном приложением.

Remarks

Этот метод эквивалентен запуску одной из команд, связанных с контекстным меню файла. Каждая команда представляется строкой команды. Набор поддерживаемых команд отличается от файла к файлу. Наиболее часто поддерживаемая команда — "Open", которая также обычно является глаголом по умолчанию. Другие команды могут поддерживаться только определенными типами файлов. Дополнительные сведения о командах оболочки см. в статье Запуск приложений или расширение контекстных меню.

Этот метод в настоящее время недоступен в Microsoft Visual Basic.

Примеры

В следующих примерах показано использование ShellExecute для открытия блокнота. Для JScript и VBScript отображается использование.


AppShell = Новый COMОбъект ( "Shell.Application" );
AppShell . ShellExecute ( PDF_File , "" , "" , "print" , 0 );

Процедура Печать_PDF_Файла_Фоновая ( МассивФайловPDF , ИмяУстройства = "" ) Экспорт

// Процедура печатает pdf-файлы (из списка) в фоновом режиме (без участия пользователя)
// Параметры процедуры:
// МассивФайловPDF - массив элементов типа "Файл" или массив структур с ключами "ПолноеИмя" и "Имя"
// ИмяУстройства - имя МФУ или принтера в системе

WbemScripting = Новый COMОбъект ( "WbemScripting.SWbemLocator" );
ConnectServer = WbemScripting . ConnectServer ( "" , "" , "" , "" ); //Задания от всех пользователей

ConnectServer . Security_ . impersonationlevel = 3 ; // Получение нужных прав
ConnectServer . Security_ . Privileges . AddAsString ( "SeLoadDriverPrivilege" );

Для Каждого ФайлPDF Из МассивФайловPDF Цикл
WScriptShell . Run ( Путь_AdobeReader + " /N /T " + ФайлPDF . ПолноеИмя + ?( ЗначениеЗаполнено ( ИмяУстройства ), " " + ИмяУстройства , "" ), 0 );

ДобавленоЗадание = Ложь;
ТекущееВремя = ТекущаяДата ();
// 40 секунд на добавление задания см.ОбработкаПрерыванияПользователя
Пока Не ДобавленоЗадание И ТекущаяДата () ТекущееВремя + 40 Цикл
ОбработкаПрерыванияПользователя ();
Для Каждого PrintJob Из ConnectServer . InstancesOf ( "Win32_PrintJob" ) Цикл
ОбработкаПрерыванияПользователя ();
ДобавленоЗадание = PrintJob . Document = ФайлPDF . Имя ;
КонецЦикла;
КонецЦикла;

// Ожидание завершения печати
Пока ConnectServer . InstancesOf ( "Win32_PrintJob" ). Count > 0 Цикл
КонецЦикла;

// Получение имени процесса
НомерСимвола = Найти ( Путь_AdobeReader , "\" );
Пока НомерСимвола > 0 Цикл
Путь_AdobeReader = Сред ( Путь_AdobeReader , НомерСимвола + 1 );
НомерСимвола = Найти ( Путь_AdobeReader , "\" );
КонецЦикла;

// Удаление процесса
WScriptShell . Run ( "taskkill /f /im " + Путь_AdobeReader , 0 );

Читайте также: