Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Примеры использования объекта WshShell в 1С
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > База знаний > Не наши статьи > 1С:Предприятие 8.2
Vofka
Объект WshShell используется для управления запущенными программами, работы с реестром, создания ярлыков , доступа к системным папкам, чтения переменных среды и т.д.

Свойства объекта WshShell


CurrentDirectory
Возвращает полный путь до текущего каталога.

Environment(<ВидСобытия>)
Возвращает объект типа WshEnvironment, содержащий список текущих переменных среды.
Параметры:
<ВидСобытия> - вид событий, список которых хотим получить. Возможные значения: System, User, Volatile или Process. Не обязателен. Если не указан, то возвращаются все виды событий.
Примечание:
Для Windows 95/98/Me возможно использовать только вид события Process.

SpecialFolders(<ТипПапки>)
Возвращает либо объект типа WshSpecialFolders (если параметр <ТипПапки> не указан), либо путь до указанной системной папки (если параметр <ТипПапки> заполнен). В случае отсутствия такой папки в системе, возвращает пустую строку.
Параметры:
<ТипПапки> - строка, содержащая обозначение системной папки. Возможные значения смотри в описании переменных к объекту WshSpecialFolders.

Методы объекта WshShell


AppActivate(<ЗаголовкаОкна>)
Активизирует окно программы, заголовок которого содержит указанную строку.
Поиск по заголовкам производится в следующем порядке: сначала ищется заголовок с полным соответствием названия, затем ищется заголовок, имя которого начинается на заданную строку, и затем ищется заголовок, название которого заканчивается на указаную строку. Если под шаблон подходит несколько окон, тогда активизируется первое найденое. При этом абсолютно безразлично свернуто это окно или нет. В случае, если окно свернуто, то активизируется Панель задач Windows и прямоугольник этого окна выделяется синим цветом.
Параметры:
<ЗаголовкаОкна> - строка, содержащая название окна, которое надо активизировать.

CreateShortcut(<Путь>)
Возвращает объект типа WshShortcut или WshURLShortcut для работы с ярлыком. Конкретный тип объекта зависит от указанного расширения ярлыка ("url" или "lnk"). Данный метод не создает ярлык, он только указывает в каком месте он будет создан. Для указания остальных параметров ярлыка и его фактического создания необходимо использовать свойства и методы возвращаемого объекта.
Параметры:
<Путь> - строка, содержащая путь и имя ярлыка, который создаем.

Exec(<Путь>)
Запускает на выполнение программу или скрипт. Возвращает объект типа WshScriptExec. Пример:

WshShell = Новый COMОбъект("WScript.Shell");
Процесс = WshShell.Exec("C:\Progra~1\Window~1\Access~1\wordpad.exe");
Рез = WshShell.AppActivate(Процесс.ProcessID);


ExpandEnvironmentStrings(<>)
Возвращает расшифровку некоторых переменных среды. Метод предназначен для переменных среды имеющих вид: %Переменная%. Например: %WinDir%, %SystemRoot%, %USERPROFILE% и т.п.
Пример:

WshShell = Новый COMОбъект("WScript.Shell");
Сообщить(WshShell.ExpandEnvironmentStrings("%WinDir%"));


LogEvent(<ТипЗаписи>, <ТекстЗаписи>, <ИмяКомпьютера>)
Добавляет запись в системный журнал.
Параметры:
<ТипЗаписи> - число, содержащее тип записи системного журнала. Возможные значения: 0 - SUCCESS; 1 - ERROR; 2 - WARNING; 4 - INFORMATION; 8 - AUDIT_SUCCESS; 16 - AUDIT_FAILURE.
<ТекстЗаписи> - строка, содержащая сообщение, записываемое в системный журнал.
<ИмяКомпьютера> - строка, содержащая имя компьютера, на котором производилась запись в системный журнал. Не обязателен. По умолчанию берется текущее имя компьютера. Только для Windows NT/2000.

Popup(<ТекстСообщения>, <ВремяЗадержки>, <ТексЗаголовка>, <КнопкаИконка>)
Выводит в окне текстовое сообщение. Возвращает код нажатой кнопки. Возможные значения: -1 - таймаут; 1 - OK; 2 - Cancel; 3 - Abort; 4 - Retry; 5 - Ignore; 6 - Yes; 7 - No;
Метод объединяет в себе функционал стандартных методов 1С Предупреждение() и Вопрос().
Параметры:
<ТекстСообщения> - строка, содержащая текст сообщения.
<ВремяЗадержки> - число секунд, в течении которых будет показано окно. Не обязателен. По умолчанию равен 0 и время показа окна не лимитируется.
<ТексЗаголовка> - текст заголовка окна. Не обязателен. По умолчанию: ''Windows Script Host.''
<КнопкаИконка> - число, содержащее код сочетания кнопок и иконки.
Возможные значения сочетания кнопок:
0 - OK; 1 - OK+Cancel; 2 - Abort+Retry+Ignore; 3 - Yes+No+Cancel; 4 - Yes+No; 5 - Retry+Cancel;
Возможные коды иконок:
16 - ''Stop Mark''; 32 - ''Question Mark''; 48 - ''Exclamation Mark''; 64 - ''Information Mark''.
Значение параметра формируется путем сложения кода сочетания кнопок и кода иконки. Не обязателен. По умолчанию 0.
Примечание:
Данный метод имеет пакостную особенность: при закрытии окошка, происходит активизация предыдущего окна, т.е. не окна 1С. Поэтому данный метод нужно использовать совместно с методом AppActivate(). Список кодов кнопок и кодов информационных иконок - не полный. Полный можно посмотреть в документации к Microsoft Win32.

RegDelete(<ПутьВРеестре>)
Удаляет указанный ключ или группу в системном реестре.
Параметры:
<ПутьВРеестре> - путь до ключа/группы в системном реестре. Если путь заканчивается символом ''\'', то происходит удаление группы, при этом группа должна быть пустой, иначе метод вызовет ошибку.
Для некоторых корневых групп название можно указывать в сокращенном варианте:
HKEY_CURRENT_USER - HKCU;
HKEY_LOCAL_MACHINE - HKLM;
HKEY_CLASSES_ROOT - HKCR.
Пример:
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.RegDelete("HKCU\Software\ACME\FortuneTeller\MindReader");


RegRead(<ПутьДоКлюча>)
Читает значение указанного ключа или значение по умолчанию для группы из реестра.
Возможные типы возвращаемых зачений:
REG_SZ - строка.
REG_DWORD - целое число.
REG_BINARY - массив целый чисел
REG_EXPAND_SZ - строка.
REG_MULTI_SZ - массив строк.
Типы REG_BINARY и REG_MULTI_SZ 1С не поддерживаются.
Параметры:
<ПутьДоКлюча> - строка, содержащая путь до ключа. Если путь заканчивается символом ''\'', то происходит чтение значения по умолчанию для группы.
Для некоторых корневых групп название можно указывать в сокращенном варианте:
HKEY_CURRENT_USER - HKCU;
HKEY_LOCAL_MACHINE - HKLM;
HKEY_CLASSES_ROOT - HKCR.
Пример:

WshShell = Новый COMОбъект("WScript.Shell");
Значение = WshShell.RegRead("HKCU\Software\ACME\");


RegWrite(<Путь>, <Значение>, <Тип>)
Создает в системном реестре ключ с указанным значением или группу со значением по умолчанию. Если такой ключ уже существует, то устанавливает у него новое значение.
Параметры:
<Путь> - строка, содержащая путь, создаваемого ключа/группы. Если путь заканчивается символом ''\'', то создается группа. При создании ключа несуществующие группы создаются автоматически, а при создании группы - нет. Попытка создать группу в несуществующей группе приведет к ошибке.
Для некоторых корневых групп название можно указывать в сокращенном варианте:
HKEY_CURRENT_USER - HKCU;
HKEY_LOCAL_MACHINE - HKLM;
HKEY_CLASSES_ROOT - HKCR.
<Значение> - значение, которое необходимо присвоить ключу.
<Тип> - тип значения ключа в системном реестре. Не обязателен. Но если сильно хочется, то можно указать. Возможная конвертация типов:
Строка --> REG_SZ
Строка --> REG_EXPAND_SZ
Число --> REG_DWORD
Пример:

WshShell = Новый COMОбъект("WScript.Shell");
WshShell.RegWrite("HKCU\Software\ACME\", "Проверка", "REG_SZ");


Run(<Команда>, <ТипОкна>, <ЖдатьВозврата>)
Выполняет команду. Основным достоинством является наличие ожидания окончания работы выполняемой команды.
Параметры:
<Команда> - выполняемая команда. Задается в формате DOS и длинные имена не поддерживает.
<ТипОкна> - число, в котором указывается вариант показа окна, запускаемого приложения. Не обязателен. Возможные значения:
0 - Скрывает окно и активирует другое;
1 - Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется при первом открытии окна программы.
2 - Активизирует окно в свернутом режиме.
3 - Активизирует окно и разворачивает на весь экран.
4 - Показывает окно в его новом размере и положении. Активным остается текущее окно.
5 - Активизирует окно и показывает его в текущем размере.
6 - Минимизирует окно и активизирует следующее на панеле задач.
7 - Показывает окно как минимизированное. Активное окно остается активным.
8 - Показывает окно в его текущем состоянии. Активное окно остается активным.
9 - Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется для восстановления минимизированного окна.
10 - показывает окно в том-же состоянии, что и окно вызывающей программы.
<ЖдатьВозврата> - флаг ожидания завершения процесса. Возможные значения: 0 - не ждать окончания выполнения команды; -1 - ждать окончания выполнения команды. Не обязателен. По умолчанию 0.
Замечание: Запускать можно как приложение, так и любую команду (аналогично Пуск->Выполнить).
Пример:

WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run("notepad",7,-1);


SendKeys(<Шаблон>)
Эмулирует нажатие клавиш на клавиатуре.
Параметры:
<Шаблон> - строка, содержащая клавишу(ши), которую нажимаем. Можно указывать несколько клавиш подряд.

необходимо зарегистрироваться для просмотра ссылки
7OH
А не подскажете ли как записать переменную ?
WshShell = Новый COMОбъект("WScript.Shell");
WshSysEnv    = WshShell.Environment("User");
ТекПУТЬ = WshSysEnv.Item("PATH");
ТекПУТЬ = ТекПУТЬ + ";d:\";

при попытке вызова
WshSysEnv.Item("PATH", ТекПУТЬ)

говорит что такого метода нет
а вызвать как описано в форумах по WSH 1С не умеет
WshSysEnv.Item("PATH") = ТекПУТЬ;
Petre
Вы уверены, что это свойство не readonly?

Если все же с правами все ок, то так, по идее, должно работать:
WshSysEnv.Item("PATH") = WshSysEnv.Item("PATH") + ";D:\temp";
7OH
Мы сейчас про 1С говорим.
1С в WshSysEnv.Item("PATH") возвращает СТРОКУ , а не объект (как наверное делает сам WSH).

А написать

WshSysEnv.Item("PATH") = WshSysEnv.Item("PATH") + ";D:\temp";


выдаст ошибку, так как 1С так делать не умеет.

Я уже выкрутился через

WshShell.Run("setx ""PATH"" ""+ТекПУТЬ+""",1,-1);


не совсем как хотелось, но проблему решило - добавило ПОЛЬЗОВАТЕЛЬСКУЮ переменную и занесло туда значение.
Система воспринимает копии системных переменных с таким же именем на ура.
Petre
Цитата(7OH @ 16.12.15, 10:52) необходимо зарегистрироваться для просмотра ссылки
выдаст ошибку, так как 1С так делать не умеет.

Какую ошибку? Что значит "делать не умет"?
Gavrila
Цитата(Vofka @ 24.07.12, 18:25) необходимо зарегистрироваться для просмотра ссылки
WshShell = Новый COMОбъект("WScript.Shell");
Значение = WshShell.RegRead("HKCU\Software\ACME\");


Добрый день
на 8.3 не работает этот код, ругается:
Цитата
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(25)}: Ошибка при вызове метода контекста (RegRead): Произошла исключительная ситуация (WshShell.RegRead): Неверная ссылка на корень в разделе реестра "HKCU\Software\7-Zip\".


кто-то сталкивался, как быть?
logist
Цитата(Gavrila @ 16.03.17, 12:27) необходимо зарегистрироваться для просмотра ссылки
кто-то сталкивался, как быть?

Может проблема в самом реестр? Посмотрите по указанному пути, что там может быть не так.
Flexy
Цитата(Gavrila @ 16.03.17, 12:27) необходимо зарегистрироваться для просмотра ссылки
Неверная ссылка на корень в разделе реестра

Нет такого корня в реестре.
logist
Цитата(Flexy @ 16.03.17, 13:04) необходимо зарегистрироваться для просмотра ссылки
Нет такого корня в реестре.

Цитата(Vofka @ 24.07.12, 18:25) необходимо зарегистрироваться для просмотра ссылки
Для некоторых корневых групп название можно указывать в сокращенном варианте:
HKEY_CURRENT_USER - HKCU;

разве это не катит?
Flexy
logist @ Сегодня, 13:11 необходимо зарегистрироваться для просмотра ссылки ,
Не верно выразился. Имел ввиду не корня, а ветки. Вот этой: "HKCU\Software\7-Zip\"
Vofka
Цитата(logist @ 16.03.17, 13:11) необходимо зарегистрироваться для просмотра ссылки
разве это не катит?

Статья опубликована в 12 году. А сейчас 17 и много где используется ряд новых операционных систем: Windows 7, 8, 10. Поэтому может и не катить, кто его знает.
logist
Цитата(Vofka @ 16.03.17, 13:19) необходимо зарегистрироваться для просмотра ссылки
А сейчас 17 и много где используется ряд новых операционных систем: Windows 7, 8, 10. Поэтому может и не катить, кто его знает.

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