Skip to content

Latest commit

 

History

History
1324 lines (1075 loc) · 83.1 KB

WindowsControl.md

File metadata and controls

1324 lines (1075 loc) · 83.1 KB

WindowsControl - внешняя компонента для управления окнами и процессами

Предназначена для Windows и Linux. Разработана по технологии Native API в составе библиотеки VanessaExt.

Возможности компоненты:

  • Получение списка окон и списка процессов
  • Управление размерами и положением окна
  • Получение снимка окна и снимка экрана
  • Обмен данными по протоколу WebSocket
  • Эмуляция действий пользователя
  • Доступ к данным буфера обмена

Подключение внешней компоненты

&НаКлиенте
Перем ВнешняяКомпонента;

&НаКлиенте
Процедура ПодключениеВнешнейКомпонентыЗавершение(Подключение, ДополнительныеПараметры) Экспорт
	ВнешняяКомпонента = Новый("AddIn." + ИдентификаторКомпоненты + ".WindowsControl");
КонецПроцедуры	

Свойства

Методы

Работа с процессами:

Информация об окружении:

Управление окном приложения:

Виртуальные рабочие столы (только для Windows):

Автоматизация пользовательского интерфейса (только для Windows):

Эмуляция действий пользователя (только для Windows):

Меотды компьютерного зрения:

Визуализация действий пользователя (только для Windows):

Воспроизведение мультимедиа файлов (только для Windows):

Обмен данными по протоколу WebSocket:

Захват изображения экрана:

Поиск файлов (только для Windows):

Свойства

Тип значения: Строка (только чтение)

  • Возвращает строку с текстом в формате JSON, при чтении которого получаем объект типа Структура с размерами экрана и рабочей области.

Тип значения: Строка (только чтение)

  • Возвращает строку с текстом в формате JSON, при чтении которого получаем объект типа Массив из элементов типа Структура с размерами дисплеев мониторов.

Тип значения: Строка (только чтение)

  • Возвращает строку с текстом в формате JSON, при чтении которого получаем объект типа Массив из элементов типа Структура с информацией об окнах верхнего уровня: дескриптор окна, диентификатор процесса, владелец, заголовок окна.

Тип значения: Целое число (только чтение)

  • Возвращает идентификатор основного процесса приложения 1С, в сеансе которого вызывается внешняя компонента.

Тип значения: Целое число (чтение и запись)

  • Дескриптор приоритетного окна (окна, с которым пользователь в настоящее время работает).

Тип значения: Строка (чтение и запись)

  • Предоставляет доступ к содержимому буфера обмена в текстовом формате.

Тип значения: Двоичные данные (чтение и запись)

  • Предоставляет доступ к содержимому буфера обмена в формате картинки PNG.
ПотокВПамяти = Новый ПотокВПамяти;
БиблиотекаКартинок.ДиалогИнформация.Записать(ПотокВПамяти);
ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
ВнешняяКомпонента.КартинкаБуфераОбмена = ДвоичныеДанные;

Методы

Возвращает текст в формате JSON, при чтении которого получаем объект типа Структура, сотдержащий информацию о клиенте тестирования, найденному по номеру порта, который присутствует в командной строке экземпляра клиента тестирования.

Параметры функции:

  • НомерПорта (обязательный), Тип: Целое число

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура с подробной информацией о найденном процессе.
    • ProcessId - идентификатор процесса (Число)
    • CommandLine - командная строка процесса (Строка)
    • CreationDate - дата старта процесса (Дата)
    • StartTime - каноническая строка времени старта для пары PID + StartTime (Строка)
    • StartTimeUTC - время старта в UTC в формате ISO 8601 (Строка)
    • Window - дескриптор основного окна (Число)
    • Title - заголовок основного окна (Строка)
ТекстJSON = ВнешняяКомпонента.НайтиКлиентТестирования(ПортПодключения);
СтруктураСвойствПроцесса = ПрочитатьСтрокуJSON(ТекстJSON);
Если СтруктураСвойствПроцесса <> Неопределено Тогда
	ИдентификаторПроцесса = СтруктураСвойствПроцесса.ProcessId;
	ДескрипторОкна = СтруктураСвойствПроцесса.Window;
КонецЕсли;

Получает список запущенных процессов с возможностью отбора только процессов 1С. Отбор производится по наименованию исполняемого файла на соответствие маске "1cv8*".

Параметры функции:

  • ИспользоватьОтбор (обязательный), Тип: Булево

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем типа Массив из элементов типа Структура информацией о процессах.
  • В каждом элементе присутствуют поля ProcessId, StartTime и StartTimeUTC. StartTime — непрозрачная строка для пары PID + StartTime; пустая строка означает, что процесс уже завершился или прочитать время старта не удалось.
  • На Linux метод по-прежнему перечисляет процессы через окна X11 и не видит процесс 1С без окна. Для проверки живости конкретного процесса используйте ПроцессСуществует, которая работает через /proc и не зависит от X11.
ТекстJSON = ВнешняяКомпонента.ПолучитьСписокПроцессов(Истина);
Для каждого Стр из ПрочитатьСтрокуJSON(ТекстJSON) Цикл
	НоваяСтр = СписокПроцессов.Добавить();
	ЗаполнитьЗначенияСвойств(НоваяСтр, Стр);
КонецЦикла;

По идентификатору процесса возвращает всю доступную информацию о процессе.

Параметры функции:

  • ИдентификаторПроцесса (обязательный), Тип: Целое число

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура с подробной информацией о процессе:
    • ProcessId - идентификатор процесса (Число)
    • CommandLine - командная строка процесса (Строка)
    • CreationDate - дата старта процесса (Дата)
    • ParentProcessId - идентификатор родительского процесса (Число, если доступен)
    • StartTime - каноническая строка времени старта для пары PID + StartTime (Строка)
    • StartTimeUTC - время старта в UTC в формате ISO 8601 (Строка)
ТекстJSON = ВнешняяКомпонента.ПолучитьСвойстваПроцесса(ИдентификаторПроцесса);
СтруктураСвойстваПроцесса = ПрочитатьСтрокуJSON(ТекстJSON);

Выводит произвольный текст в консоль родительского процесса.

Параметры функции:

  • Текст (обязательный), Тип: Строка
  • Кодировка (необязательный), Тип: Целое число
    • Кодировка текста при перенаправлении вывода в файл, по умолчанию 866.
Текст = "Привет! Проверка связи." + Символы.ПС;
ВнешняяКомпонента.ВывестиВКонсоль(Текст);

Выполняет запуск внешнего приложения или команды операционной системы.

Параметры функции:

  • Команда (обязательный), Тип: Строка
  • СкрытьОкно (необязательный), Тип: Булево

Тип возвращаемого значения: Целое число

  • Идентификатор процесса внешнего приложения

При завершении работы приложения происходит генерация внешнего события.

КоманднаяСтрока = "ping 127.0.0.1";
PID = ВнешняяКомпонента.СоздатьПроцесс(КоманднаяСтрока, Истина);

Запускает процесс и сразу возвращает его PID и StartTime. Пара PID + StartTime снижает риск переиспользования PID: StartTime — время старта, которое ядро назначает процессу и которое не меняется за время его жизни.

Параметры функции:

  • Команда (обязательный), Тип: Строка — исполняемый файл и аргументы.
  • РежимОкна (необязательный), Тип: Строка — "Normal" (по умолчанию), "Maximized" или "Hidden", без учёта регистра.

Тип возвращаемого значения: Строка — JSON.

Успешный запуск:

{
  "ok": true,
  "ProcessId": 1234,
  "StartTime": "134123456789012345",
  "StartTimeUTC": "2026-10-20T12:34:56.789Z",
  "State": "Running",
  "ProcessGroupId": 1234,
  "error": "",
  "errorCode": 0
}

Процесс завершился сразу после запуска:

{
  "ok": false,
  "ProcessId": 1234,
  "StartTime": "134123456789012345",
  "State": "Exited",
  "ExitCode": 127,
  "error": "Process exited immediately after start",
  "errorCode": 9
}

Если StartTime прочитать не удалось, возвращается ok=false, State="Unknown", errorCode=8; ProcessId может быть заполнен. Такой процесс не завершается компонентой: без StartTime нельзя подтвердить, что PID всё ещё принадлежит этому запуску. Для повторного запуска используйте новый вызов; старый процесс нужно найти и завершить средствами ОС или по сохранённой паре, если она есть.

Особенности:

  • StartTime — непрозрачная десятичная строка. Её нельзя преобразовывать в число, форматировать или сравнивать с датой; сравнивать можно только как строку.
  • StartTimeUTC предназначен для логов и не используется для сравнения.
  • На Windows ProcessGroupId всегда равен 0.
  • На Linux команда разбирается на исполняемый файл и аргументы и запускается через posix_spawnp, без /bin/sh. Кавычки "..." и '...' поддерживаются; $, обратные кавычки, \, ;, |, &, >, < и другие символы оболочки передаются как обычные символы аргументов и не раскрываются. Обратный слэш не является escape-символом. Переменные окружения и ~ не раскрываются. Shebang-скрипты поддерживаются.
  • На Linux "Maximized" и "Hidden" игнорируются.
  • На Linux процесс запускается в собственной группе процессов; ProcessGroupId равен PID, если группу удалось создать. ЗавершитьПроцесс завершает группу для процессов, запущенных этой компонентой (зарегистрированных в её реестре), то есть и дочерние процессы, если они не сменили группу.
  • Метод не ждёт готовности приложения. Он блокируется только на чтение StartTime (обычно доли секунды). Для 1С клиента нужно отдельно дождаться порта -TPort; ПроцессСуществует проверяет только существование процесса.
  • ЗапуститьПроцесс не генерирует событие PROCESS_FINISHED; для контроля завершения используйте ПроцессСуществует или Ждать/таймаут.
  • Не выводите в лог полную команду, если она содержит пароли (/P, /Pwd).
Результат = ПрочитатьСтрокуJSON(ВнешняяКомпонента.ЗапуститьПроцесс(КоманднаяСтрока, "Maximized"));
Если Результат.ok Тогда
	PID = Результат.ProcessId;
	StartTime = Результат.StartTime;
Иначе
	Сообщить("Не удалось запустить процесс: " + Результат.error);
КонецЕсли;

Завершает процесс только при совпадении пары PID + StartTime.

Параметры функции:

  • ИдентификаторПроцесса (обязательный), Тип: Целое число
  • StartTime (обязательный), Тип: Строка — значение, полученное при запуске
  • Принудительно (необязательный), Тип: Булево — по умолчанию Ложь

Тип возвращаемого значения: Строка — JSON.

При Принудительно = Ложь на Windows отправляется WM_CLOSE главному окну, на Linux — SIGTERM. При Принудительно = Истина вызывается TerminateProcess/SIGKILL. На Linux сигнал отправляется группе процессов, созданной ЗапуститьПроцесс, поэтому завершаются и дочерние процессы. Метод не ждёт полного завершения: после мягкого завершения нужно опрашивать ПроцессСуществует и по таймауту вызывать повторно с Принудительно = Истина.

Успех:

{
  "ok": true,
  "AlreadyExited": false,
  "ExitCode": null,
  "State": "Running",
  "error": "",
  "errorCode": 0
}

Правила:

  • NotFound и Exited считаются успешной очисткой (ok=true, AlreadyExited=true); повторный вызов идемпотентен. На Linux процесс в состоянии Zombie также возвращается как Exited.
  • StartTimeMismatch — ok=false, errorCode=4; процесс не трогать.
  • AccessDenied — ok=false, errorCode=5; процесс не трогать.
  • Если мягкое завершение невозможно (нет главного окна на Windows, kill вернул ошибку), возвращается ok=false с errorCode=5 или 7.
  • Пустой или невалидный StartTime — ok=false, errorCode=1.
  • На Linux перед отправкой сигнала StartTime проверяется повторно. Если ядро поддерживает pidfd, сигнал отправляется через него: он не может попасть в процесс с переиспользованным PID.
Результат = ПрочитатьСтрокуJSON(
	ВнешняяКомпонента.ЗавершитьПроцесс(PID, StartTime, Истина));
Если Не Результат.ok Тогда
	Сообщить("Не удалось завершить процесс: " + Результат.error);
КонецЕсли;

Проверяет процесс по паре PID + StartTime и возвращает его состояние.

Параметры функции:

  • ИдентификаторПроцесса (обязательный), Тип: Целое число
  • StartTime (обязательный), Тип: Строка

Тип возвращаемого значения: Строка — JSON:

{
  "State": "Running",
  "StartTimeMatches": true,
  "ExitCode": null,
  "error": "",
  "errorCode": 0
}

Возможные состояния:

State Значение
Running Процесс существует, StartTime совпал.
Zombie Процесс завершился, но запись /proc ещё не убрана (Linux).
Exited Процесс завершился; ExitCode известен, если его удалось получить.
NotFound Процесса с таким PID нет.
StartTimeMismatch PID существует, но принадлежит другому запуску.
AccessDenied Нет прав на проверку; fail closed.
Unknown Иная ошибка; fail closed.

StartTimeMatches=false для NotFound, StartTimeMismatch, AccessDenied и Unknown. Для Zombie и Exited ExitCode может быть null, если процесс уже был собран системой. При StartTimeMismatch возвращается errorCode=4; метод возвращает JSON, а не Булево.

Состояние = ПрочитатьСтрокуJSON(ВнешняяКомпонента.ПроцессСуществует(PID, StartTime));
Если Состояние.State = "Running" Тогда
	// Процесс жив.
ИначеЕсли Состояние.State = "StartTimeMismatch" Тогда
	// PID переиспользован; завершать процесс нельзя.
КонецЕсли;

Коды ошибок новых методов

Код Значение
0 Успех.
1 Некорректный аргумент (PID <= 0, пустой StartTime, неизвестный режим окна, недопустимая команда).
2 Ошибка запуска процесса.
3 Зарезервирован.
4 StartTime не совпал (StartTimeMismatch); процесс не трогать.
5 Нет прав.
6 Зарезервирован.
7 Внутренняя ошибка.
8 Не удалось прочитать StartTime.
9 Процесс завершился сразу после запуска.

Простейшая функция однократного обмена данными по протоколу WebSocket. Может использоваться для интеграции с браузером Google Chrome.

Параметры функции:

  • Адрес (обязательный), Тип: Строка
  • Команда (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит данные, полученные как ответ сервера WebSocket на отправленную команду.
	АдресВебСокет = "ws://localhost:9222/devtools/page/771BF9AF6EE6F712337EF74397960652";
	КомандаJSON = "{""id"":1,""method"":""Page.captureScreenshot"",""params"":{""format"":""png""}";
	ТекстJSON = ВнешняяКомпонента.ВебСокет(АдресВебСокет, КомандаJSON);
	ДанныеJSON = ПрочитатьСтрокуJSON(ТекстJSON);
	ДвоичныеДанные = Base64Значение(ДанныеJSON.result.data);

Подробная информация о Chrome DevTools Protocol доступна по адресу:

Подключение к серверу WebSocket для начала многократного обмена данными. Может использоваться для интеграции с браузером Google Chrome.

Параметры функции:

  • Адрес (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Пустая строка в случае успеха, либо сообщение об ошибке.
АдресВебСокет = "ws://localhost:9222/devtools/page/771BF9AF6EE6F712337EF74397960652";
Результат  = ВнешняяКомпонента.ОткрытьВебСокет(АдресВебСокет);
Если Не ПустаяСтрока(Результат) Тогда
	Сообщить(Результат);
КонецЕсли

Обмен данными по протоколу WebSocket: отправка пакета данных и получение результата. Может использоваться для интеграции с браузером Google Chrome.

Параметры функции:

  • Команда (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит данные, полученные как ответ сервера WebSocket на отправленную команду.
КомандаJSON = "{""id"":1,""method"":""Page.captureScreenshot""}";
ТекстJSON = ВнешняяКомпонента.ПослатьВебСокет(КомандаJSON);
ДанныеJSON = ПрочитатьСтрокуJSON(ТекстJSON);
ДвоичныеДанные = Base64Значение(ДанныеJSON.result.data);

Закрытие открытого ранее соединения WebSocket.

Возвращаемое значение отсутствует.

ВнешняяКомпонента.ЗакрытьВебСокет();

Приостанавливает выполнение программного кода на заданное количество миллисекунд.

ВнешняяКомпонента.Пауза(1000);

По дескриптору окна получает список дисплеев, на которых располагается окно или его части.

Параметры функции:

  • ДескрипторОкна (необязательный), Тип: Целое число Если параметр не задан, будет получена информация обо всех дисплеях.

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Массив из элементов типа Структура со свойствами дисплея: координаты границ, высота и ширина, наименование дисплея, координаты и размер рабочей области дисплея.
ТекстJSON = ВнешняяКомпонента.ПолучитьСписокДисплеев(ДескрипторОкна);
Для каждого ЭлементМассива из ПрочитатьСтрокуJSON(ТекстJSON) Цикл
	ЗаполнитьЗначенияСвойств(СписокДисплеев.Добавить(), ЭлементМассива);
КонецЦикла;

По дескриптору окна получает свойства дисплея, на котором располагается наибольшая часть окна.

Параметры функции:

  • ДескрипторОкна (необязательный), Тип: Целое число Если параметр не задан, будет получена информация для активного окна.

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура со свойствами дисплея: координаты границ, высота и ширина, наименование дисплея, координаты и размер рабочей области дисплея.
ТекстJSON = ВнешняяКомпонента.ПолучитьСвойстваДисплея(ДескрипторОкна);
СвойстваДисплея = ПрочитатьСтрокуJSON(ТекстJSON);
ВнешняяКомпонента.УстановитьПозициюОкна(ДескрипторОкна, СвойстваДисплея.Left, СвойстваДисплея.Top);

Возвращает текст в формате JSON, при чтении которого получаем объект типа Массив из элементов типа Структура с информацией об окнах, принадлежащих указанному процессу.

Параметры функции:

  • ИдентификаторПроцесса (обязательный), Тип: Целое число
    • Если параметр нулевой или не задан, возвращается список всех окон.

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Массив из элементов типа Структура с информацией о найденых окнах:
    • Window - дескриптор окна (Число)
    • ProcessId - идентификатор процесса (Число)
    • Class - идентификатор класса окна (Строка)
    • Title - заголовок окна (Строка)
    • Owner - окно владелец (Число)
ТекстJSON = ВнешняяКомпонента.ПолучитьСписокОкон(ИдентификаторПроцесса);
МассивОкон = ПрочитатьСтрокуJSON(ТекстJSON);
ТаблицаОкон.Очистить();
Для каждого Стр из МассивОкон Цикл
	ЗаполнитьЗначенияСвойств(ТаблицаОкон.Добавить(), Стр);
КонецЦикла;

Возвращает текст в формате JSON, при чтении которого получаем объект типа Структура с информацией об основных свойставх окна:

Параметры функции:

  • ДескрипторОкна (обязательный), Тип: Целое число
    • Если параметр нулевой, будут получены свойства активного окна.

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура с информацией об основных свойствах окна:
    • Window - дескриптор окна (Число)
    • ProcessId - идентификатор процесса (Число)
    • Maximized - распахнуто, максимизировано (Булево)
    • Class - идентификатор класса окна (Строка)
    • Title - заголовок окна (Строка)
    • Owner - окно владелец (Число)
ТекстJSON = ВнешняяКомпонента.ПолучитьСписокОкон(ИдентификаторПроцесса);
СвойстваОкна = ПрочитатьСтрокуJSON(ТекстJSON);
ЗаголовокОкна = СвойстваОкна.Title;

Возвращает текст в формате JSON, при чтении которого получаем объект объект типа Структура с информацией о размерах и позиции окна.

Параметры функции:

  • ДескрипторОкна (обязательный), Тип: Целое число
    • Если параметр нулевой, будут получены размеры активного окна.

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура с информацией о размерах и позиции окна:
    • Left - левая граница (Число)
    • Top - верхняя граница (Число)
    • Right - правая граница (Число)
    • Bottom - нижняя граница (Число)
    • Width - ширина окна (Число)
    • Height - высота высота (Число)
    • Window - дескриптор окна (Число)

Активирует окно по дескриптору.

Параметры функции:

  • ДескрипторОкна (обязательный), Тип: Целое число
ВнешняяКомпонента.АктивироватьОкно(ДескрипторОкна);

Распахиват (максимизирует) окно, разворачивая его на всё рабочую область экрана.

Параметры функции:

  • ДескрипторОкна (обязательный), Тип: Целое число
ВнешняяКомпонента.РаспахнутьОкно(ДескрипторОкна);

Показывает окно в нормальном режиме отображения, если оно было свёрнуто или распахнуто.

Параметры функции:

  • ДескрипторОкна (обязательный), Тип: Целое число
ВнешняяКомпонента.РазвернутьОкно(ДескрипторОкна);

Перемещает позицию курсора (мышки) в указанную точку экрана.

ВнешняяКомпонента.УстановитьПозициюКурсора(X, Y);

Осуществляет поиск фрагмента картинки, возвращает результат в формате JSON. Используются алгоритмы библиотеки OpenCV

Параметры процедуры:

  • Картинка (обязательный), Тип: Двоичные данные
  • Фрагмент (обязательный), Тип: Двоичные данные
  • МетодПоиска (обязательный), Тип: Число (от 0 до 2)
    • 0 - Соответствует значению TM_SQDIFF_NORMED
    • 1 - Соответствует значению TM_CCORR_NORMED
    • 2 - Соответствует значению TM_CCOEFF_NORMED

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура с информацией о размерах и позиции найденного фрагмента:
    • Match - соответствие найденного фрагмента образцу (Число от 0 до 1)
    • Left - левая граница (Число)
    • Top - верхняя граница (Число)
    • Right - правая граница (Число)
    • Bottom - нижняя граница (Число)
    • Width - ширина фрагмента (Число)
    • Height - высота фрагмента (Число)
    • X - координата центра (Число)
    • Y - координата центра (Число)
ДанныеКартинки = Новый ДвоичныеДанные("C:\Demo\Picture.png");
ДанныеФрагмента = Новый ДвоичныеДанные("C:\Demo\Fragment.png");
ТекстJSON = ВнешняяКомпонента.НайтиФрагмент(ДанныеКартинки, ДанныеФрагмента);

Осуществляет поиск картинки на экране, возвращает результат в формате JSON. Используются алгоритмы библиотеки OpenCV

Параметры процедуры:

  • Фрагмент (обязательный), Тип: Двоичные данные
  • МетодПоиска (обязательный), Тип: Число (от 0 до 2)
    • 0 - Соответствует значению TM_SQDIFF_NORMED
    • 1 - Соответствует значению TM_CCORR_NORMED
    • 2 - Соответствует значению TM_CCOEFF_NORMED

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура с информацией о размерах и позиции найденного фрагмента:
    • Match - соответствие найденного фрагмента образцу (Число от 0 до 1)
    • Left - левая граница (Число)
    • Top - верхняя граница (Число)
    • Right - правая граница (Число)
    • Bottom - нижняя граница (Число)
    • Width - ширина фрагмента (Число)
    • Height - высота фрагмента (Число)
    • X - координата центра (Число)
    • Y - координата центра (Число)
ФрагментКартинки = Новый ДвоичныеДанные("C:\Demo\Fragment.png");
ТекстJSON = ВнешняяКомпонента.НайтиНаЭкране(ФрагментКартинки);

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

ВнешняяКомпонента.ЭмуляцияДвиженияМыши(X, Y, 1000, 3);

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

ВнешняяКомпонента.ЭмуляцияПеретаскивания(X, Y, 1000, 3);

Эмулирует нажаите указанной кнопки мыши.

Параметры процедуры:

  • КнопкаМыши (обязательный), Тип: Целое число
    • 0 - Левая кнопка
    • 1 - Правая кнопка
    • 2 - Средняя кнопка
ВнешняяКомпонента.ЭмуляцияНажатияМыши(0);

Эмулирует нажаите левой кнопкой мыши.

Параметры процедуры:

  • Задержка (необязательный), Тип: Целое число
    • Задержка между нажатиями в милисекундах, по умолчанию 100.
ВнешняяКомпонента.ЭмуляцияДвойногоНажатия();

Эмулирует вращение колеса мыши.

Параметры процедуры:

  • КнопкаМыши (обязательный), Тип: Целое число
    • (+1) - Вращение вперёд
    • (-1) - Вращение назад
ВнешняяКомпонента.ЭмуляцияКолесаМыши(1);

Эмулирует нажаите пользователем горячей клавиши. Параметры функции совместимы с типовым объектом СочетаниеКлавиш. Для вызова рекомендуется использовать следующий программный код.

СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F11, Ложь, Истина, Ложь);

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, СочетаниеКлавиш);
ТекстXML = ЗаписьXML.Закрыть();
ЧтениеXML = Новый ЧтениеXML; 
ЧтениеXML.УстановитьСтроку(ТекстXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
КорневойУзел = ДокументDOM.ПервыйДочерний;
Для каждого ДочернийУзел из КорневойУзел.ДочерниеУзлы Цикл
	Если ДочернийУзел.ИмяУзла = "vKey" Тогда
		Клавиша = Число(ДочернийУзел.ТекстовоеСодержимое);
	ИначеЕсли ДочернийУзел.ИмяУзла = "flags" Тогда
		Флаги = Число(ДочернийУзел.ТекстовоеСодержимое);
	КонецЕсли;
КонецЦикла;

ВнешняяКомпонента.ЭмуляцияНажатияКлавиши(Клавиша, Флаги);

Альтернативный вариант вызова функции, в первом параметра передаётся строка в формате JSON, представляющая собой массив с кодами виртуальных клавиш. Второй параметр при этом необязателен и игнорируется.

ТекстJSON = "[91, 69]"; // Win+E
ВнешняяКомпонента.ЭмуляцияНажатияКлавиши(ТекстJSON);

Эмулирует последовательный ввод пользователем текста.

ВнешняяКомпонента.ЭмуляцияВводаТекста("Текст коментария", 100);

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

Параметры процедуры:

  • Цвет (необязательный), Тип: Целое число
  • Радиус (необязательный), Тип: Целое число
  • Толщина (необязательный), Тип: Целое число
  • Задержка (необязательный), Тип: Целое число
  • Прозрачность (необязательный), Тип: Целое число
ВнешняяКомпонента.ПоказатьНажатиеМыши(255, 30, 12, 12, 127);

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

Параметры процедуры:

  • Цвет (необязательный), Тип: Целое число
  • Радиус (необязательный), Тип: Целое число
  • Толщина (необязательный), Тип: Целое число
  • Задержка (необязательный), Тип: Целое число
  • Прозрачность (необязательный), Тип: Целое число
ВнешняяКомпонента.ВизуализацияНажатияМыши(255, 30, 12, 12, 127);

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

ВнешняяКомпонента.ПоказатьВизуализациюНажатияМыши();

Отключение режима, при котором каждое нажатие мыши сопровождается визуальным эффектом.

ВнешняяКомпонента.ПрекратитьВизуализациюНажатияМыши();

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

ЦветКакЧисло = Цвет.Красный + Цвет.Зеленый * 256 + Цвет.Синий * 65536;
ВремСтруктура = Новый Структура;
ВремСтруктура.Вставить("color", ЦветКакЧисло);
ВремСтруктура.Вставить("thickness", Толщина);
ВремСтруктура.Вставить("transparency", Прозрачность);
ВремСтруктура.Вставить("duration", Длительность);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
НастройкиРисования = ЗаписьJSON.Закрыть();
ВнешняяКомпонента.НачатьВызовНарисоватьПрямоугольник(
	Новый ОписаниеОповещения, НастройкиРисования, 
	ПозицияСлева, ПозицияСверху, ШиринаФигуры, ВысотаФигуры);

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

ВнешняяКомпонента.НачатьВызовНарисоватьЭллипс(
	Новый ОписаниеОповещения, НастройкиРисования, 
	ПозицияСлева, ПозицияСверху, ШиринаФигуры, ВысотаФигуры);

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

ВремСтруктура = Новый Структура;
ВремСтруктура.Вставить("color", ЦветКакЧисло);
ВремСтруктура.Вставить("thickness", Толщина);
ВремСтруктура.Вставить("transparency", Прозрачность);
ВремСтруктура.Вставить("frameCount", ЧислоКадровАнимации);
ВремСтруктура.Вставить("frameDelay", ЗадержкаАнимацииКадра);
ВремСтруктура.Вставить("duration", Длительность);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
НастройкиРисования = ЗаписатьJSON(ЗаписьJSON, Данные);
ВнешняяКомпонента.НачатьВызовНарисоватьСтрелку(
	Новый ОписаниеОповещения, НастройкиРисования, x1, y1, x2, y2);

Рисует между двумя точками на экране искривленную стрелку заданного цвета и прозрачности. Параметры определяют толщину контура, анимацию и длительность отображения фигуры. Количество точек в массиве должно быть кратным (3 * N + 1).

МассивТочек = Новый Массив;
МассивТочек.Добавить(Новый Структура("x,y", 100, 500));
МассивТочек.Добавить(Новый Структура("x,y", 300, 500));
МассивТочек.Добавить(Новый Структура("x,y", 300, 700));
МассивТочек.Добавить(Новый Структура("x,y", 500, 700));
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ТекстJSON = ЗаписатьJSON(ЗаписьJSON, МассивТочек);
ВнешняяКомпонента.НачатьВызовНарисоватьСтрелку(
	Новый ОписаниеОповещения, НастройкиРисования, ТекстJSON);

Отображает на экране видеоэффект затенения всего экрана за исключением определенной области. Оборажает подсказку и стрелку от текста подсказки к выделенной области.

ЦветКакЧисло = Цвет.Красный + Цвет.Зеленый * 256 + Цвет.Синий * 65536;
ВремСтруктура = Новый Структура;
ВремСтруктура.Вставить("color", ЦветКакЧисло);
ВремСтруктура.Вставить("thickness", Толщина);
ВремСтруктура.Вставить("transparency", Прозрачность);
ВремСтруктура.Вставить("duration", Длительность);
ВремСтруктура.Вставить("fontName", ШрифтНадписи.Имя);
ВремСтруктура.Вставить("fontSize", ШрифтНадписи.Размер);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
НастройкиРисования = ЗаписьJSON.Закрыть();
ВнешняяКомпонента.НачатьВызовНарисоватьТень(
	Новый ОписаниеОповещения, НастройкиРисования, 
	ПозицияСлева, ПозицияСверху, ШиринаФигуры, ВысотаФигуры, ТекстПодсказки);

Отображает на экране видеоэффект подсказки для точки по указанным координатам.

ВремСтруктура = Новый Структура;
ВремСтруктура.Вставить("color", ЦветКакЧисло(ЦветКонтура));
ВремСтруктура.Вставить("background", ЦветКакЧисло(ЦветФона));
ВремСтруктура.Вставить("fontColor", ЦветКакЧисло(ЦветТекста));
ВремСтруктура.Вставить("fontName", ШрифтНадписи.Имя);
ВремСтруктура.Вставить("fontSize", ШрифтНадписи.Размер);
ВремСтруктура.Вставить("radius", РадиусЗакругления);
ВремСтруктура.Вставить("thickness", ТолщинаКонтура);
ВремСтруктура.Вставить("duration", Длительность);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
НастройкиРисования = ЗаписьJSON.Закрыть();
ВнешняяКомпонента.НачатьВызовПоказатьПодсказку(
	Новый ОписаниеОповещения, НастройкиРисования, 
	ПозицияСлева, ПозицияСверху, ТекстПодсказки);

Воспроизводит WAV-файл синхронно или асинхронно. Вызов без параметров останавливает воспроизведение.

Параметры функции:

  • ИмяФайла (необязательный), Тип: Строка
  • Асинхронно (необязательный), Тип: Булево

Возвращаемое значение отсутствует.

ВнешняяКомпонента.ВоспроизвестиЗвук("sound.wav", Истина);

Воспроизводит мультимедиа файл в асинхронном режиме в отдельном потоке.

Параметры функции:

  • ИмяФайла (обязательный), Тип: Строка
  • Идентификатор (необязательный), Тип: Строка

Возвращаемое значение отсутствует.

Идентификатор = Строка(Новый УникальныйИдентификатор);
ВнешняяКомпонента.ВоспроизвестиМедиа("sound.mp3", Идентификатор);

Возвращает статус воспроизведения мультимедиа файла по его идентификатору.

Прерывает воспроизведение мультимедиа файла по его идентификатору.

Выполняет произвольную мультимедиа команду, возвращая результат в виде строки.

Параметры функции:

  • Команда (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит данные, полученные как результат выполнения команды.

Получает снимок экрана или активного окна, в зависимости от переданного параметра.

Параметры функции:

  • Режим (обязательный), Тип: Целое число
    • 0 - Чтобы сделать снимок всего экрана
    • 1 - Чтобы сделать снимок области активного окна

Тип возвращаемого значения: Двоичные данные

  • Возвращает картинку в формате PNG.
ДвоичныеДанные = ВнешняяКомпонента.ПолучитьСнимокЭкрана(0);

Получает снимок области экрана по координатам.

Параметры функции:

  • X (обязательный), Тип: Целое число (координата слева)
  • Y (обязательный), Тип: Целое число (координата сверху)
  • W (обязательный), Тип: Целое число (ширина области экрана)
  • H (обязательный), Тип: Целое число (высота области экрана)

Тип возвращаемого значения: Двоичные данные

  • Возвращает картинку в формате PNG.
ДвоичныеДанные = ВнешняяКомпонента.ПолучитьСнимокОбласти(200, 200, 800, 600);

Получает снимок произвольного окна по его дескриптору.

Параметры функции:

  • ДескрипторОкна (обязательный), Тип: Целое число
    • 0 - Чтобы сделать снимок активного окна

Тип возвращаемого значения: Двоичные данные

  • Возвращает картинку в формате PNG.
ДвоичныеДанные = ВнешняяКомпонента.ПолучитьСнимокОкна(ДескрипторОкна);

Получает снимок верхнего окна экземпляра 1С:Предприятие по идентификатору процесса.

Параметры функции:

  • ИдентификаторПроцесса (обязательный), Тип: Целое число
    • Идентификатор процесса приложения 1С:Предприятие

Тип возвращаемого значения: Двоичные данные

  • Возвращает картинку в формате PNG.
ДвоичныеДанные = ВнешняяКомпонента.ПолучитьСнимокПроцесса(ИдентификаторПроцесса);

Рекурсивный поиск файлов по маске и содержимому.

Параметры функции:

  • Директория (обязательный), Тип: Строка
    • Начальная директория для поиска файлов
  • МаскаПоиска (обязательный), Тип: Строка
    • Маска поиска файлов, например: *.txt
  • ИскомыйТекст (обязательный), Тип: Строка
    • Искомый тект для поиска по содержимому файла
  • ИгнорироватьРегистр (необязательный), Тип: Строка
    • Проверка на соответствие регистра искомого текста

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Массив из элементов типа Структура с информацией о найденых файлах:
    • name - имя файла (Строка)
    • path - полный путь файла (Строка)
    • size - размер файла в байтах (Число)
    • date - дата модификации файла (Дата)
ТекстJSON = ВнешняяКомпонента.НайтиФайлы(Директория, МаскаПоиска, ИскомыйТекст, ИгнорироватьРегистр);
Данные = ПрочитатьСтрокуJSON(ТекстJSON);
СписокФайлов.Очистить();
Если ТипЗнч(Данные) = Тип("Массив") Тогда
	Для каждого Стр Из Данные Цикл
		НоваяСтр = СписокФайлов.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтр, Стр);
	КонецЦикла;
КонецЕсли;

Очищает буфер обмена.

ВнешняяКомпонента.ОчиститьБуферОбмена();

Получает элементы UI Automation в виде древовидной структуры по идентификатору процесса, либо идентификатору родительского элемента. Второй параметр ограничивает грубину рекурсии получения дочерних элементов.

Параметры функции:

  • ИдентификаторПроцесса (обязательный), Тип: Целое число
  • Глубина (необязательный), Тип: Целое число

Вариант вызова функции:

  • ИдентификаторРодителя (обязательный), Тип: Строка
  • Глубина (необязательный), Тип: Целое число

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем массив объектов типа Структура, каждый из которых также может содержать массив дочерних элементов.
ТекстJSON = ВнешняяКомпонента.ПолучитьЭлементы(ИдентификаторПроцесса);

Осуществляет поиск элементов UI Automation по условиям отбора.

Параметры функции:

  • УсловиеОтбора (обязательный), Тип: Строка формата JSON

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем массив объектов типа Структура, содержащий свойства найденных элементов.
ВремСтруктура = Новый Структура;
ВремСтруктура.Вставить("ProcessId", ИдентификаторПроцесса);
ВремСтруктура.Вставить("Parent", ИдентификаторРодителя);
ВремСтруктура.Вставить("Name", ИмяЭлемента);
ВремСтруктура.Вставить("ControlType", "Button");
ВремСтруктура.Вставить("LegacyIAccessibleHelp", "Расширенная подсказка элемента");
ВремСтруктура.Вставить("LegacyIAccessibleKeyboardShortcut", "F12");
УсловиеОтбора = ЗаписатьСтрокуJSON(ВремСтруктура);
ТекстJSON = ВнешняяКомпонента.НайтиЭлементы(УсловиеОтбора);

Получает элемент UI Automation по его идентификатору. Идентификатор элемента уникален для каждого экземпляра приложения.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура, содержащий свойства полученного элемента.
ТекстJSON = ВнешняяКомпонента.ЭлементПоИдентификатору(ИдентификаторЭлемента);

Получает UI Automation по идентификатору элемента его родительский элемент. Идентификатор элемента уникален для каждого экземпляра приложения.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура, содержащий свойства полученного родительского элемента.
ТекстJSON = ВнешняяКомпонента.ПолучитьРодителяЭлемента(ИдентификаторЭлемента);

Получает по идентификатору элемента следующий ближайший соседний элемент UI Automation в пределах подчинения одному общему родителю.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура, содержащий свойства полученного соседнего элемента.
ТекстJSON = ВнешняяКомпонента.ПолучитьСледующийЭлемент(ИдентификаторЭлемента);

Получает по идентификатору элемента предыдущий ближайший соседний элемент UI Automation в пределах подчинения одному общему родителю.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура, содержащий свойства полученного соседнего элемента.
ТекстJSON = ВнешняяКомпонента.ПолучитьПредыдущийЭлемент(ИдентификаторЭлемента);

Активирует элемент UI Automation по его идентификатору.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура, содержащий свойства полученного элемента.
ВнешняяКомпонента.АктивироватьЭлемент(ИдентификаторЭлемента);

Выполняет действие по умолчанию (обычно это нажатие на кнопку) для элемента UI Automation.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Содержит строку с текстом в формате JSON, при чтении которого получаем объект типа Структура, содержащий свойства полученного элемента.
ВнешняяКомпонента.ВызватьЭлемент(ИдентификаторЭлемента);

Получает значение для элемента UI Automation.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка

Тип возвращаемого значения: Строка

  • Возвращает значение элемента.
ЗначениеЭлемента = ВнешняяКомпонента.ПолучитьЗначениеЭлемента(ИдентификаторЭлемента);

Устанавливает значение для элемента UI Automation.

Параметры функции:

  • ИдентификаторЭлемента (обязательный), Тип: Строка
  • НовоеЗначение (обязательный), Тип: Строка
ВнешняяКомпонента.УстановитьЗначениеЭлемента(ИдентификаторЭлемента, НовоеЗначение);

Показывает независимое окно для прерывания пользователем продолжительных действий.

Параметры процедуры:

  • Параметры (обязательный), Тип: Строка
  • Заголовок (обязательный), Тип: Строка
  • Надпись (обязательный), Тип: Строка
ВремСтруктура = Новый Структура;
ВремСтруктура.Вставить("identifier", Строка(УникальныйИдентификатор));
ВремСтруктура.Вставить("color", ЦветКакЧисло(ЦветКонтура));
ВремСтруктура.Вставить("background", ЦветКакЧисло(ЦветФона));
ВремСтруктура.Вставить("buttonColor", ЦветКакЧисло(ЦветКнопки));
ВремСтруктура.Вставить("iconColor", ЦветКакЧисло(ЦветИконки));
ВремСтруктура.Вставить("fontColor", ЦветКакЧисло(ЦветТекста));
ВремСтруктура.Вставить("fontName", ШрифтНадписи.Имя);
ВремСтруктура.Вставить("fontSize", ШрифтНадписи.Размер);
ВремСтруктура.Вставить("transparency", Прозрачность);
ВремСтруктура.Вставить("thickness", ТолщинаКонтура);
ТекстJSON = ЗаписатьСтрокуJSON(ВремСтруктура);

ВнешняяКомпонента.ПоказатьОкноПрерывания(ТекстJSON, ТекстНадписи, "Стоп");

Закрывает открытое ранее окно прерывания продолжительных действий.

ВнешняяКомпонента.ЗакрытьОкноПрерывания();