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

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

В свое время очень мучал вопрос сворачивания/разворачивания динамических списков. Ситуацию обостряло тысяча подобных вопросов в гугле и не одного толкового ответа (по крайней мере я не видел).

Проблема тогда была решена здоровенным костылем: запуском скомпилированного скрипта AHK на сочетание Ctrl+Shift+Num-/Num+

Душа терзалась столь неизящным решением и вот наконец дошли руки сделать это чуть лучше и вдобавок слегка расширить функционал 1с.

Функционал:

Не буду долго тянуть, вк использует функцию Win Api - SendInput() для симуляции нажатий клавиш клавиатуры/мыши по виртуальным кодам.

Также в вк для удобства добавлена функция паузы и свойство определяющее продолжительность зажатия клавиши.

Для удобства в 1с создана обертка над вк, позволяющая использовать её весьма интуитивно, понятно и максимально просто.

Можно вызывать нажатие клавиши по её имени. Тестировал на Win Server 2012 R2 с Qwerty клавиатурой на 1с 8.3.10.2561.

Примеры использования:

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

Клавиатура.Пауза()

Клавиатура.Свернуть()

Клавиатура.Развернуть()

Клавиатура.ВыполнитьНажатие()

Листинг основного функционала общего модуля:

Листинг вспомогательного функционала общего модуля:

Послесловие:

Во вложении будет архив, в нем: тестовая конфигурация с примерами использования, утилитой для определения кодов клавиш, текстовый файл с ссылкой на вирустотал, xls документ с используемыми соответсвиями названиями и кодами клавиш, листинг общего модуля и собственно сама подключаемая библиотека. Надеюсь хоть комуто смог помочь, также прошу прощения за очепятки и абшибки. Повторюсь, компонента только для OS Windows начиная с 2000 , тоесть, по сути, должна работать только на любой современной Windows оси, в процессе использования она сама откидывает линь, мак, мобильное приложение и браузер, функции возвращают Ложь, вместо Истина. Возможно будет работать через Wine, такого Я не пробывал, не знаю.

ЕСЛИ У ВАС ВОЗНИКЛИ ВОПРОСЫ, С УДОВОЛЬСТВИЕМ ОТВЕЧУ В КОММЕНТАРИЯХ ИЛИ ЛС

UPD 17.10.19

Как мне подсказал в комментариях Сергей Лесовой, для сворачивания/разворачивания дин. списка можно применить более изящное решение:

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

Компонента, Я полагаю, имеет право продолжать жить для других задач по автоматизации.

Скачать файлы Специальные предложения

(10) Протестировал, спасибо, действительно такой код будет много изящнее:

Сейчас добавлю в темку.

  • Скопировать ссылку
  • Перейти

WshShellW = Новый COMОбъект("WScript.Shell"); WshShellW.AppActivate(ПолучитьЗаголовокСистемы());

// Команда может состоять из одной буквы ПозицияОткрывающейСкобки = Найти(ПередаваемыеДанные.СочетаниеКлавиш, " "); Если ПозицияОткрывающейСкобки <> 0 Тогда Если ПозицияЗакрывающейСкобки - ПозицияОткрывающейСкобки - 1 = 1 Тогда Буква = Сред(ПередаваемыеДанные.СочетаниеКлавиш, ПозицияОткрывающейСкобки + 1, 1); Буква = ИСТП_ПреобразоватьБуквуВСоответствииСРаскладкой(Буква); Команда = Сред(ПередаваемыеДанные.СочетаниеКлавиш, 1,ПозицияОткрывающейСкобки) + Буква + Сред(ПередаваемыеДанные.СочетаниеКлавиш, ПозицияЗакрывающейСкобки); Иначе Команда =ПередаваемыеДанные.СочетаниеКлавиш; КонецЕсли; Иначе // скобок может и не быть Команда = ПередаваемыеДанные.СочетаниеКлавиш; ЕстьКТРЛ = Ложь; ЕстьАЛЬТ = Ложь; ЕстьШИФТ = Ложь; Если Найти(Команда, "^") > 0 Тогда Команда = СтрЗаменить(Команда, "^", ""); ЕстьКТРЛ = Истина; КонецЕсли; Если Найти(Команда, "%") > 0 Тогда Команда = СтрЗаменить(Команда, "%", ""); ЕстьАЛЬТ = Истина; КонецЕсли; Если Найти(Команда, "+") > 0 Тогда Команда = СтрЗаменить(Команда, "+", ""); ЕстьШИФТ = Истина; КонецЕсли;

Если СтрДлина(Команда) = 1 Тогда Команда = ИСТП_ПреобразоватьБуквуВСоответствииСРаскладкой(Команда);

Если ЕстьШИФТ Тогда Команда = "+" + Команда; КонецЕсли;

Если ЕстьАЛЬТ Тогда Команда = "%" + Команда; КонецЕсли;

Если ЕстьКТРЛ Тогда Команда = "^" + Команда; КонецЕсли; Иначе Команда = ПередаваемыеДанные.СочетаниеКлавиш; КонецЕсли; КонецЕсли;

📎📎📎📎📎📎📎📎📎📎