Внешняя компонента Native API для управления окнами и буфером обмена, получения снимков окон Windows и Linux

16.04.20

Разработка - Разработка внешних компонент

Внешняя компонента Native API для Windows и Linux с исходными кодами на C++. Возможности компоненты: получение списка окон и списка процессов, управление размерами и положением окна, снимок окон и снимок экрана, доступ к данным буфера обмена, взаимодействие по протоколу WebSocket.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
1cWinCtrl_src.zip
.zip 1,36Mb ver:0.09.8
20
20 Скачать (2 SM) Купить за 2 150 руб.
1cWinCtrl.epf
.epf 1,19Mb ver:0.09.8
19
19 Скачать (1 SM) Купить за 1 850 руб.

Изначально разрабатывалась как составная часть инструмента тестирования прикладных решений Vanessa Automation, однако имеет самостоятельную ценность и может быть использована с составе других продуктов. Главным достоинством компоненты является возможность получения снимка любого открытого окна 1С, даже если оно перекрыто другими окнами приложений.

Внешняя компонента поддерживает как синхронный, так и асинхронный вызов. Далее по тексту все примеры будут приводиться для синхронных вызовов. 

 
Пример асинхронного вызова внешней компоненты:

Для создания объекта экземпляра внешней компоненты используйте имя WindowsControl.

В прилагаемом примере файлы внешней компоненты хранятся в макете _1cWinCtrl. 
Реквизит формы МестоположениеКомпоненты используется для передачи макета компоненты между сервером и клиентом.

 
 Установка и подключения внешней компоненты:

Многие свойства и методы компоненты возвращают сложные типы данных, которые сериализованы в строку формата JSON. Поэтому рекомендуется объявить в вызывающем модуле универсальную функцию, которая будет использоваться ниже в примерах работы компоненты: 

&НаКлиенте
Функция ПрочитатьСтрокуJSON(ТекстJSON)
	Если ПустаяСтрока(ТекстJSON) Тогда
		Возврат Новый Структура;
	Иначе
		ЧтениеJSON = Новый ЧтениеJSON();
		ЧтениеJSON.УстановитьСтроку(ТекстJSON);
		Возврат ПрочитатьJSON(ЧтениеJSON);
	КонецЕсли;
КонецФункции

Компонента преимущественно предназначена для управления окнами тонкого клиента «1С:Предприятие». Поскольку разрабатывалась она для работы в составе менеджера тестирования, имеется специальный метод для поиска запущенного экземпляра процесса клиента тестирования 1С по номеру порта подключения.

ТекстJSON = ВнешняяКомпонента.НайтиКлиентТестирования(ПортПодключения);
ДанныеJSON = ПрочитатьСтрокуJSON(ТекстJSON);
ИдентификаторПроцесса = ДанныеJSON .ProcessId;

Используя идентификатор процесса, получаем список открытых окон приложения и для каждого окна его снимок. Если формы 1С открываются в режиме «Блокировать окно владельца», то список окон имеет иерархическую структуру, и у каждого элемента списка есть ссылка на идентификатор родительского окна.

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

Подробная инструкция по работе с компонентой доступна на сайте: http://lintest.github.io 

clipboard websocket process NativeAPI

См. также

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Программист Пользователь Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18000 руб.

30.05.2017    54043    9    69    

46

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1127    3    4    

3

Разработка внешних компонент Телефония, SIP Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    47298    124    66    

67

Разработка внешних компонент Программист Платформа 1С v8.3 Платформа 1C v8.2 Платные (руб)

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    3598    3    0    

5

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    77516    72    257    

191

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3000 руб.

12.05.2020    28657    138    100    

91

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    1872    bayselonarrend    10    

44

Разработка внешних компонент Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    4726    kovalevdmv    26    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 307 16.04.20 13:14 Сейчас в теме
Добрый день !

Скачал компоненту с гитхаба ранее до этой статьи.

Заинтересовала работа с обозревателем Хром через веб-гнезда.

Вопрос
Вы запускаете обозреватель, чтобы он слушал 9222 порт, а потом пробуете обратиться к обозревателю.
Так вот у меня пишет, что нет возможности подключиться к обозревателю.
Что-то вроде этого, пишу по памяти.

Есть возможность сделать простое видео, как у вас это работает ?
Может я что-то делаю ошибочно ?

Или через скайп могу запросить консультацию и показать ?
3. kandr 207 16.04.20 14:16 Сейчас в теме
Добрый день!

Такая ошибка возникает если у Вас уже был запущен Google Chrome.
Закройте все окна браузера Google Chrome перед тем, как запустить его нажатием кнопки в обработке.
Вы также можете запустить его самостоятельно из командной строки, используя синтаксис:

chrome.exe --remote-debugging-port=9222


Подробная документация по протоколу Chrome DevTools Protocol
https://chromedevtools.github.io/devtools-protocol/
4. kandr 207 16.04.20 14:20 Сейчас в теме
Закройте все окна Google Chrome и уже потом запускайте обозреватель нажатием на кнопку в обработке.
2. Steelvan 307 16.04.20 13:19 Сейчас в теме
Второй вопрос

 
// Срабатывает при нажатии кнопки "ПодключитьУправлениеОкнамиНапрямуюФайл".
//
&НаКлиенте
Процедура ПодключитьУправлениеОкнамиНапрямуюФайл(Команда)

	гпИдКомпонентыОкна    = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
	гпАдресКомпонентыОкна = "D:\Bases1S_Razrabotka\ОптимаПрограммы\ОптимаВебГнезда\Ресурсы\­1cWinCtrlWin32_0_9_8_0.dll";
	ВыполнитьПодключениеВнешнейКомпонентыОкнаНапрямую();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПодключениеВнешнейКомпонентыОкнаНапрямую()
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПодключениеВнешнейКомпонентыОкнаНапрямуюЗавершение", ЭтаФорма, , "ПодключениеВнешнейКомпонентыОкнаОшибка", ЭтаФорма);
	НачатьПодключениеВнешнейКомпоненты(ОписаниеОповещения, гпАдресКомпонентыОкна, гпИдКомпонентыОкна, ТипВнешнейКомпоненты.Native);
	
КонецПроцедуры

&НаКлиенте
Процедура ПодключениеВнешнейКомпонентыОкнаНапрямуюЗавершение(Подключено, Парам2 = "") Экспорт
	
	Если Подключено Тогда
		гпВнешняяКомпонентаОкна = Новый("AddIn." + гпИдКомпонентыОкна + ".WindowsControl");
		ОписаниеОповещения = Новый ОписаниеОповещения("ПолученаВерсияКомпоненты", ЭтаФорма);
		гпВнешняяКомпонентаОкна.НачатьПолучениеВерсия(ОписаниеОповещения);
	Иначе
		Сообщить("Компонента окон не подключена");
	КонецЕсли;
	
КонецПроцедуры 
Показать


Данный код срабатывает только при первом нажатии кнопки.
При втором выдает окно ошибки с текстом "AddIn._2374293740923.WindowsControl" нет такого типа.
Средняя часть с идентификатором каждый раз меняется при нажатии кнопки.
5. kandr 207 16.04.20 14:24 Сейчас в теме
(2) Если хотите подключать напрямую, воспользуйтесь следующим кодом

&НаКлиенте
Перем ИдентификаторКомпоненты, МестоположениеКомпоненты, ВнешняяКомпонента;

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	МестоположениеКомпоненты = "D:\Bases1S_Razrabotka\ОптимаПрограммы\ОптимаВебГнезда\Ресурсы\­1cWinCtrlWin32_0_9_8_0.dll";
	ИдентификаторКомпоненты = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
	ВыполнитьПодключениеВнешнейКомпоненты(Истина);
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьПодключениеВнешнейКомпоненты(ДополнительныеПараметры) Экспорт
	НачатьПодключениеВнешнейКомпоненты(Новый ОписаниеОповещения(
		"ПодключениеВнешнейКомпонентыЗавершение", ЭтаФорма, ДополнительныеПараметры),
		МестоположениеКомпоненты, ИдентификаторКомпоненты, ТипВнешнейКомпоненты.Native
	); 
КонецПроцедуры	

&НаКлиенте
Процедура ПодключениеВнешнейКомпонентыЗавершение(Подключение, ДополнительныеПараметры) Экспорт
	Если Подключение Тогда
		ВнешняяКомпонента = Новый("AddIn." + ИдентификаторКомпоненты + ".WindowsControl");
	ИначеЕсли ДополнительныеПараметры = Истина Тогда
		НачатьУстановкуВнешнейКомпоненты(Новый ОписаниеОповещения(
			"ВыполнитьПодключениеВнешнейКомпоненты", ЭтаФорма, Ложь), МестоположениеКомпоненты);
	КонецЕсли;
КонецПроцедуры
Показать
6. Steelvan 307 16.04.20 17:33 Сейчас в теме
7. Steelvan 307 16.04.20 19:08 Сейчас в теме
Разрешите узнать, для чего было сделано имя компоненты через меняющийся идентификатор ?
В других родных dll все делают через постоянное имя, первый раз вижу такой подход.
8. kandr 207 16.04.20 19:11 Сейчас в теме
(7) Позволяет использовать различные версии компоненты внутри одной конфигурации без необходимости перезапуска. Подсмотрел такой подход кажется в библиотеке стандартных подсистем или в библиотеке подключаемого оборудования.
9. Darklight 33 21.04.20 15:50 Сейчас в теме
Спасибо, немного опередили меня - я тоже разрабатывал нечто подомное (для wiwndows, linux и в перспективе для MacOS). Но я доведу разработку - ибо там практические цели несколько другие - здесь не достигнутые. Хотя - возможно мне теперь имеет смысл сделать форк от вашего проекта - и потом, возможно, сделать туда пулреквест - ибо у меня пока часть связанная со скриншотами достаточно примитивна - а упор я пока делал на другой функционал, у Вас не реализованный, но использующий скриншоты как одну из основных составляющей для главного функционала
10. sivin-alexey 511 26.04.20 09:26 Сейчас в теме
Добрый день. Исходный код компонент прилагается?
11. kandr 207 26.04.20 10:54 Сейчас в теме
(10) Исходный код прилагается, доступен на GitHub
12. Pawlick 10 21.11.21 00:14 Сейчас в теме
Скажите, может ли работать как самостоятельный websocket?
Т.е напрямую подключаться к серверу, без Хрома, слушать события?
13. kandr 207 21.11.21 01:30 Сейчас в теме
(12) Нет. Может только подключиться к WebSocket, отправить сообщение в формате JSON и сразу получить ответ в JSON. Этого достаточно для управления Chrome посредством DevTools Protocol.
14. binx 173 15.03.24 09:42 Сейчас в теме
Подскажите пожалуйста кто нибудь есть шаблон внешней компоненты для С#?
Оставьте свое сообщение