![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
Уважаемые форумчане, не убивайте только сразу. Объясняю как могу)) У меня есть игровая клавиатура, которая при подключении параллельно основной полностью дублирует ввод. На этой клавиатуре есть мультимедийные клавиши, которые при опросе программой в демо папке компонента JvHID возвращают Report-ID. При опросе остальных клавиш программа молчит. Вопрос такой: Можно ли изменить репорт стандартных клавиш на свой (произвольный репорт, по аналогии репорта мультимедийной клавиши), который я буду перехватывать в своей программе при помощи компонента JvHID. Спасибо.
P.S. Если это сделать не реально-напишите. Не проходите мимо темы. Спасибо. Это сообщение отредактировал(а) Mozgunov - 25.9.2012, 21:13 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Вы можете в своей программе присосаться к любой клавиатуре и читать с нее все, что она передает. Читать на тему Raw Input
Поменять что либо в уже готовой клавиатуре IMHO нереально |
|||
|
||||
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
А не подскажите, если ставить хук, то Raw Input сработает раньше или позже? В описании сказано, что она работает "напрямую" с устройством. Спасибо.
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
||||
|
||||
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
Спасибо. Извините за глупый вопрос. А что такое thread? |
|||
|
||||
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
xvr, Помогите ещё одну проблемку решить. Мои ковыряния привели к такому коду(ниже). В переменной sss хранится строка из которой можно вытащить PID VID. Значения изменяются если я ввожу клавиши с разных клавиатур, но всё это работает если активно окно моей программы. Как сделать так , чтобы вывод на форму шёл независимо от того какое окно сейчас активное.
Я подозреваю что нужно менять Rid.Target и перезапускать процедуру клика, но что-то не получается...((( Это сообщение отредактировал(а) Mozgunov - 26.9.2012, 23:56 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
'Нить'. Параллельно исполняющийся поток в вашей (или чужой) программе.
Может не получиться В любом случае попробуйте дать флаг RIDEV_INPUTSINK в Rid.Flags.
Это не надо |
||||
|
|||||
| Mozgunov |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
xvr, Спасибо большущее!! Сработало. Данные с PID VID выводятся на этикетку.С хуком не успел попробовать (что раньше сработает). Ничего не получается((( Хук срабатывает раньше(хоть и написано что обращение Raw Input идёт напрямую ) Это сообщение отредактировал(а) Mozgunov - 28.9.2012, 17:40 |
||||||
|
|||||||
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
стерто
Это сообщение отредактировал(а) Mozgunov - 29.9.2012, 13:01 |
|||
|
||||
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
xvr, А скажите в какое именно место нужно поставить хук чтобы RawInput сработала раньше. Как я понял, что при отлове нажатия в WndProc код клавиши уже отправен системе и обратно его не вернуть, а если ставить хук раньше, то не поймать клавишу потому, что на неё сработал хук. Как это сделать? в одну нить... Спасибо.
|
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Если вам надо отлавливать коды с вашего девайса в эксклюзивном режиме (что бы в другие приложения они не попали), то ставьте флаг RIDEV_NOLEGACY (ну и RIDEV_NOHOTKEYS для комплекта).
Она срабатывает раньше, но после нее клавиша продолжает обрабатываться обычным способом (если не был установлен вышеупомянутый флаг RIDEV_NOLEGACY), и повлиять на это вы не сможете |
||||
|
|||||
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
xvr,
поставил эти флаги:
Правильно? Для моей программы всё работает отлично. Если пытаюсь ввести в мемо текст, то символ не отсылается но функция информирует меня о нажатой или отпущенной клавиши, но если только я перехожу в другое приложение, то символ в него отправляется. Скажите, процедуре RegisterRawInputDevices для чего нужен хендл? Может быть у меня срабатывает только в Form1 потому, что я RegisterRawInputDevices вызывал c Rid.Target := Self.Handle; ? Как бы сделать так чтобы блокировался ввод клавиш во всех приложениях, а не только в Форм1. Это сообщение отредактировал(а) Mozgunov - 30.9.2012, 21:48 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Угу, так и есть
Raw Input не предназначен для перехвата ввода с устройства глобально (по всем Windows'ам). Он обеспечивает прямой доступ к устройству для конкретного приложения, которое хочет получать не переваренные Windows данные устройства, а читать их напрямую. Так что глобальный перехват работать скорее всего не будет Вам надо записать в Rid.Target NULL, но система все равно будет обрабатывать Raw Input только в вашем приложении (и отправлять его текущему окну вашего приложения) |
||||
|
|||||
| Mozgunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 25.9.2012 Репутация: нет Всего: нет |
А нельзя как нибудь повесить хендл на другую программу (допустим "блокнот") при регистрации RegisterRawInputDevices? Я пробовал. У меня не получилось. Может как-то можно? То есть не глобально, а на конкретную. Можно было бы тогда по таймеру получать активное окно, узнавать его хендл, ставить его на прослушку этой функцией и блокировать ввод именно в него ("Блокнот").
xvr, Всё же хук почему-то раньше срабатывает(((... Это сообщение отредактировал(а) Mozgunov - 1.10.2012, 13:27 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Это можно сделать только изнутри этой самой 'другой программы'. А для этого в нее придется инжектить свою dll. А потом бороться с антивирусами, т.к. они начнут хором орать на такое действие Посмотрите опции в RegisterRawInputDevices и выставите все, которые блокируют обычную обработку Windows. Хук должен отвалиться |
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |