Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Примеры использования объекта WshShell в 1С          
Vofka Подменю пользователя
сообщение 24.07.12, 18:25
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

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

[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: RedCat77, Santino, shurik_shurik,

7OH Подменю пользователя
сообщение 16.12.15, 1:58
Сообщение #2

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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


Сообщение отредактировал Vofka - 16.12.15, 9:18

Petre Подменю пользователя
сообщение 16.12.15, 9:39
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Вы уверены, что это свойство не readonly?

Если все же с правами все ок, то так, по идее, должно работать:
WshSysEnv.Item("PATH") = WshSysEnv.Item("PATH") + ";D:\temp";


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

7OH Подменю пользователя
сообщение 16.12.15, 10:52
Сообщение #4

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

Мы сейчас про 1С говорим.
1С в WshSysEnv.Item("PATH") возвращает СТРОКУ , а не объект (как наверное делает сам WSH).

А написать

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


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

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

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


не совсем как хотелось, но проблему решило - добавило ПОЛЬЗОВАТЕЛЬСКУЮ переменную и занесло туда значение.
Система воспринимает копии системных переменных с таким же именем на ура.

Petre Подменю пользователя
сообщение 16.12.15, 11:14
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Цитата(7OH @ 16.12.15, 10:52) *
выдаст ошибку, так как 1С так делать не умеет.

Какую ошибку? Что значит "делать не умет"?


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Gavrila Подменю пользователя
сообщение 16.03.17, 12:27
Сообщение #6

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Из: Харьков
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(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 Подменю пользователя
сообщение 16.03.17, 12:48
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Gavrila @ 16.03.17, 12:27) *
кто-то сталкивался, как быть?

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Flexy Подменю пользователя
сообщение 16.03.17, 13:04
Сообщение #8

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

Цитата(Gavrila @ 16.03.17, 12:27) *
Неверная ссылка на корень в разделе реестра

Нет такого корня в реестре.

logist Подменю пользователя
сообщение 16.03.17, 13:11
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Flexy @ 16.03.17, 13:04) *
Нет такого корня в реестре.

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

разве это не катит?


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Flexy Подменю пользователя
сообщение 16.03.17, 13:18
Сообщение #10

Танцор с Бубном
Иконка группы
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 230 раз
Рейтинг: 0

logist @ Сегодня, 13:11 * ,
Не верно выразился. Имел ввиду не корня, а ветки. Вот этой: "HKCU\Software\7-Zip\"

Vofka Подменю пользователя
сообщение 16.03.17, 13:19
Сообщение #11

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата(logist @ 16.03.17, 13:11) *
разве это не катит?

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

Сообщение отредактировал Vofka - 16.03.17, 13:20

logist Подменю пользователя
сообщение 16.03.17, 13:57
Сообщение #12

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 3:26
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!