Перехватчик клавиатуры, выполненный по технологии NATIVE

0. 224 22.09.11 08:57 Сейчас в теме
Внешняя компонента для 1С 8.2 NATIVE для перехвата нажатий кнопок клавиатуры (включая исходники проекта на VC++ 2010).

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
95. Kobra_RU 224 13.03.18 17:01 Сейчас в теме
Я сейчас не отслеживаю (и не использую) эту компоненту. Поэтому и ранее писал и сейчас сообщаю: Можно использовать, видоизменять, публиковать здесь ссылки (если это не нарушает правил, установленных infostart-ом).
96. Wladimir_spb 13.03.18 17:14 Сейчас в теме
Ок
Вот пример обработки для управляемых форм. Если кому еще пригодится
Прикрепленные файлы:
KeyboardHook.epf
97. WellMaster 104 14.03.18 11:40 Сейчас в теме
(96) В моей конфе это не заработало. Я использую вместо ПодключитьВнешнююКомпоненту(...) метод НачатьПодключениеВнешнейКомпоненты(...). И использую компоненту из макета из 80-го сообщения.

Кстати, для тех, кто интересуется, для чего это может быть полезным: я это использую для более выразительного выделения кнопок на управляемой форме. На внешнее событие повесил раскраску активной кнопки. Эта задача обсуждалась в том числе и тут: https://forum.infostart.ru/forum9/topic118724/
Прикрепленные файлы:
98. Wladimir_spb 14.03.18 12:32 Сейчас в теме
(97) Метод НачатьУстановкуВнешнейКомпоненты() нужен для переноса компоненты с сервера на клиент.
Я тестировал в файловом варианте, поэтому мне перенос не понадобился и все подключилось методом ПодключитьВнешнююКомпоненту()
99. WellMaster 104 14.03.18 15:51 Сейчас в теме
(98) Вот с этим я и бился так долго.
100. Wladimir_spb 15.03.18 11:59 Сейчас в теме
(97) В теме про выделение кнопок предложен метод через поиск текущего элемента опросом раз в какой-то период. Этот метод не работает?
101. WellMaster 104 15.03.18 15:13 Сейчас в теме
(100) Этот метод не работает.
102. wash 2 22.03.18 15:55 Сейчас в теме
Подскажите, пожалуйста, вот хочу сделать чтоб при нажатии кнопки ентер на строке выводилось приглашение ввести количество:
Процедура ВнешнееСобытие(Источник, Событие, Данные)

	Если Не ВводДоступен() Тогда
		Возврат;
	КонецЕсли;

	ВиртуальнаяКлавиша	= ПолученноеЧисло % 256;
	
	ВыбраннаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные;
	Если ВиртуальнаяКлавиша = 13 тогда
		//это ентер
		Количество = ВыбраннаяСтрока.Количество;
		Если ВвестиЧисло(Количество, "Введите кол-во", 15, 3) тогда
			ВыбраннаяСтрока.Количество = Количество;
			ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(ВыбраннаяСтрока, ЭтотОбъект);			
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()	
	Макет	= ПолучитьМакет("ВнешняяКомпонента");
	Макет.Записать(ИмяФайла);
	
	ПодключитьВнешнююКомпоненту(ИмяФайла, "KeyboardHook",ТипВнешнейКомпоненты.Native);
	КомпонентаKeyBoardHook = Новый("AddIn.KeyboardHook.KeyboardHook");
	КомпонентаKeyBoardHook.ЗахватРазрешен = Истина;
	КомпонентаKeyBoardHook.СобытиеПриНажатии = истина;
	КомпонентаKeyBoardHook.ЗахватПервым = ложь;
	КомпонентаKeyBoardHook.КлавиатураЗаблокирована = ложь;
КонецПроцедуры // ПриОткрытии()
Показать

При нажатии кнопки ентер на окне "Введите кол-во", хук опять срабатывает и опять выводится окно "Введите кол-во".
Подскажите, как правильно в коде описать?
Формы обычные.
Прикрепленные файлы:
103. Kobra_RU 224 23.03.18 08:59 Сейчас в теме
(102)
Вариант 1: Перед открытием диалога ввода количества инициализировать глобальную переменную формы (например СейчасВВодимКоличество = Истина). При сработке проверяем эту переменную и не обрабатываем сработку если она Истина. После ввода количества сбрасываем переменую в ЛОЖЬ.
Вариант 2: Делаем отдельную форму ввода количества и открываем ее. Так как в этой отдельной форме нет обработки внешнего события, то и прерывания не произойдет.
104. wash 2 23.03.18 12:58 Сейчас в теме
105. privin731 11.06.18 07:48 Сейчас в теме
Спасибо автору! Он выложил свою компоненту в "свободный доступ" на ресурсе который НЕ ПОЗВОЛЯЕТ СВОБОДНО СКАЧИВАТЬ. Уважаемый автор, убедительная просьба выложить результат Вашего труда действительно в НАСТОЯЩИЙ СВОБОДНЫЙ ДОСТУП. Спасибо.
110. user1309444 18.11.19 18:42 Сейчас в теме
Ребята, гуру 1С, подскажите пожалуйста новичку, можно ли работать в данной компоненте с окнами 1С ? Если да, то каким образом?
111. Kobra_RU 224 19.11.19 08:09 Сейчас в теме
С окнами работать не получится.
113. tormozit 6307 27.09.20 14:19 Сейчас в теме
Как проверить что нажато CTRL+C? Мне в параметре "Данные" в английской раскладке приходит строка "04163" (6! символов). В конце какой то странный неотображаемый символ (его код=3). А в русской раскладке приходит строка "04163" (5 символов). Беспокоит что код символа при этом непонятно как вычислять - в примере он получается пустой (Символ = Сред(Данные,6))
114. tormozit 6307 29.09.20 19:41 Сейчас в теме
(113) Решил проблему проверкой только первых 5 символов. Этого оказалось достаточно.

Но нашлась более серьезная проблема. Эта ВК не посылает событие при циклической генерации нажатий когда клавиша физически зажата. А мне надо чтобы я получал эти нажатия. Например пользователь зажал кнопку вниз и держит, чтобы курсор ехал вниз. Как этого добиться?
115. tormozit 6307 12.10.20 16:42 Сейчас в теме
116. tormozit 6307 16.10.20 19:32 Сейчас в теме
Столкнулся с проблемой
"Неоправданное обновление всех табличных полей на активных страницах обычных форм, имеющих обработчик внешнего события"
https://www.hostedredmine.com/issues/891484
Похоже тут уже сам не смогу побороть. Направил запрос в 1С.
Оставьте свое сообщение
Вопросы с вознаграждением