(5) q_i,
Метод Sleep действительно существует у объекта WScript.
НО WScript существует только для скриптов, которые вызываются из командной строки,
Объект WScript нельзя получить, используя COMОбъект.
Следовательно надо создавать файл, скажем во временной папке, записать туда текст скрипта, а потом его выполнять, после этого - в общем случае - удалить этот файл.
проснулся в 5 утра, полазил по сайту, через рекламу и косвенные ссылки попал сюда, решил сохранить, а вот коммент (11) astonvilla, вначале не понял.
пересмотрел внизу картинки, почесал голову, поработал, еще раз пересмотрел
догадался посмотреть вверху
Для работы со скриптами на уровне COM Используется MSScriptControl.
В примере есть упоминание о нем.
&НаКлиентеНаСервереБезКонтекста
Функция ВремяВМиллисекундах()
Но тут есть одна проблема с которой я столкнулся и разрешить так и не смог.
При создании объекта на 64 битном сервере 1С (Именно 1С, не Win) - объект не создается, что то там с политиками безопасности от мелкомягких. Не все 32 битные COM-ы могут быть вызваны 64 битным приложением.
MSScriptControl - один из них :(
Добавлены:
1. Функция, позволяющая информацию о BIOS локального/удаленного компьютера.
2. Функция, позволяющая получить Имя пользователя, зарегистрировавшегося на локальном/удаленном компьютере.
(30)
еще раз спасибо - реально пригодилось!
теперь могу засекать время выполнения запросов с точностью до миллисекунды.
---
проблемка с другой процедуркой:
SendKeys(KEYS_ENG = "^+z", KEYS_RUS = "^+я") Пытаюсь имитировать вызов на редактирование поля ввода в форме по клавише 'F4'
(смотри код ниже) - ничего выходит (тип редактируемого значения - "СписокЗначений").
Процедура SendKeys(KEYS_ENG = "^+z", KEYS_RUS = "^+я")
Если ПустаяСтрока(KEYS_ENG) И ПустаяСтрока(KEYS_ENG) Тогда
Возврат;
КонецЕсли;
Попытка
WshShell = Новый COMОбъект("Wscript.Shell");
Если НЕ ПустаяСтрока(KEYS_ENG) Тогда
WshShell.SendKeys(KEYS_ENG); // для случая, если текущей является английская раскладка клавиатуры.
КонецЕсли;
Если НЕ ПустаяСтрока(KEYS_RUS) Тогда
WshShell.SendKeys(KEYS_RUS); // для случая, если текущей является русская раскладка клавиатуры.
КонецЕсли;
// SendKeys(String) - имитируется нажатие клавиши или последовательности клавиш, указанных в параметре String.
// В качестве параметра можно указывать как алфавитно-цифровые символы, так и символы специальных клавиш, например:
// "Enter", "Tab", "F1", "Alt", "Shift", "Ctrl" и т.д.
// Для указания клавиш "Alt", "Shift", "Ctrl" существуют специальные коды:
// "Shift" - +;
// "Ctrl" - ^;
// "Alt" - %.
// Если возникнет необходимость передать специальные символы именно как символы, а не команды,
// нужно заключать их в фигурные скобки, например {+}.
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура СписокНомеровПС_КонтМенюИзменить(Кнопка)
Если ЭтаФорма.ТекущийЭлемент <> ЭлементыФормы.СписокНомеровПС Тогда
ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.СписокНомеровПС;
КонецЕсли;
SendKeys("F4","F4");
КонецПроцедуры
(31) yuraos,
Пожалуйста. Рад, что Вам пригодилось.
По поводу Вашего вопроса:
Некоторые специальные символы следует всегда задавать заключёнными в фигурные скобки.
В частности и F4:
SendKeys("{F4}","{F4}");
(32)
у щайтан-скобка! SendKeys("{F4}","{F4}") - проканало.
спасибо огромное!!!
А нет в Windows Script Host каких-нибудь объектов,
которые позволили бы в 1С через подписку на события
перехватывать обработку ввода с мыши и клавиатуры?
(33)
иище раз о ВремяВМиллисекундах():
В каких ситуациях в функции может сработать исключение и
вместо миллисекунд функция вернет 1С-ное текущее время-дату ???
PS:
В своем варианте по исключению я возвращаю значение:
1000*(ТекущаяДата() - '1970-01-01:06:00:00') как более подходящее по смыслу - округленное до целых секунд число миллисекунд.
06:00:00 - это наверное из-за разницы времени между Новосибирском и Гринвичем.
при вызове Win32Shutdown с флагами отличными от 0 - ничего не происходит
или я что-то не так делаю
Пример:
WinMGMT = ПолучитьCOMОбъект("winmgmts:\\.\root\cimv2");
Win32_OS = WinMGMT.ExecQuery("SEL ECT * FR OM Win32_OperatingSystem where Primary=true");
Reserved = 0; // Зарезервированный параметр. Игнорируется.
Для Каждого OS ИЗ Win32_OS Цикл
OS.Win32Shutdown(6, Reserved);
КонецЦикла;
(52) echo77,
Да. Вы правильно указали.
В обработке 1С:Администратор http://infostart.ru/public/172189/ получение сетевого окружения переработано и дополнено для Windows Vista и выше.
Позднее подправлю статью.
СПАСИБО.
StepByStep,
А в каком случае SendKey может использоваться на сервере? К процедуре указана директива &НаКлиентеНаСервереБезКонтекста.
Я там понимаю, что для сендкея обязательно нужно открытое окно приложения и тем более открытая сессия (нормальная сессия с рабочим столом и т.п.), а на сервере такого вроде 1С сервер не создает?
Почему-то не получается отправить символы с цифровой клавиатуры.
Нижеперечисленные варианты (также без скобок "()") приводят к ошибке "Произошла исключительная ситуация (0x80070057)".
1)
Ws = Новый COMОбъект("Wscript.shell");
Ws.SendKeys("^+({Pad-})");
2)
Ws = Новый COMОбъект("Wscript.shell");
Ws.SendKeys("^+({Subtract})");
Доброго времени суток! Подскажите плиз. Юзаю одну из ваших функций
Computer_GroupUsersList(
Она возвращает имя группы и имя пользователя. Можно ли как-то получить "полное имя пользователя" ну или как это назвать ПРЕДСТАВЛЕНИЕ. Т.е. то Имя, которое отображается у пользователя, если нажать кнопку "Пуск". Например имя пользователя может быть "Zelensky" а полное имя "Зеленский Максим". Вот мне нужно как-то получить это полное имя.
14.01.2015. Добавлена функция
ПреобразоватьИзСтрокиВДату() - Ф., возвращающая результат преобразования строкового значения даты в значение в формате даты.
Подскажите кто сталкивался, как решить проблему такую: пытаюсь получить список пользователей на удаленном сервере, так вот с одними серверами происходит нормально, а на одном не выполняет даже инициализацию: ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
сначала ругался "Ошибка получения объекта COM: Сервер RPC недоступен."
Почитал тут что брэндмауэр нужно настраивать, пробовал но не помогало и я его вообще отключил, теперь ругается "Ошибка получения объекта COM: Отказано в доступе."
(65) Для тех, кто долго искал как программно "нажать" Ctrl+Shift+{+} (развернуть все ветки; актуально для таблицы формы, представленной в виде дерева по произвольному запросу с группировкой). Работает следующий код: