Вопрос на тему низкоуровневых хуков...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Вопрос на тему низкоуровневых хуков...

Сообщение Vova_2581 » 18.02.2023 (Сб) 20:17

Здравствуйте!
Как-то по работе мне нужно было для студентов написать небольшую утилиту, которая проверяла бы у них на ПК работу консоли ввода-вывода на определенные клавиши клавиатуры и мышки. Я такую утилиту написал, переделанный образец выкладываю здесь в приложении... чисто для примера и пробы... можете у себя попробовать... Так вот, заработала эта утилита не сразу. Мне нужно было установить глобальный хук, и чтобы не возится с DLL я решил пойти простым путем, использовать низкоуровневый хук с константами WH_KEYBOARD_LL и WH_MOUSE_LL. Хук стал работать как-то странно... и по началу я думал, что где-то у меня присутствует баг, не мог понять где и что не так? Как работал хук: почему-то нажатие клавиш отрабатывалось только ровно шесть(!) раз, а на седьмое нажатие на клавиатуре хук сам по себе снимался. Тоже самое было и с мышкой. Отрабатывались нажатия, а отпускания нет и т.д. Никак не мог понять такого странного поведения, пока не стал читать MSDN --> https://learn.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms644985(v=vs.85)
(и еще здесь --> http://vsokovikov.narod.ru/New_MSDN_API/Hook/fn_lowlevelkeyboardproc.htm)
в котором прочел, что для корректной работы такого типа хуков нужно делать запись в реестре по адресу -->
HKEY_CURRENT_USER\Control Panel\Desktop
и в нем по значению параметра LowLevelHooksTimeout указывать тайм аут времени обработки хука. Заглянул в реестр и действительно... такого ключа в нем не было. Прописал, перезагрузил ПК и все пошло, как по маслу! Все стало работать корректно и правильно. Проверял на разных системах Win 7, 10, 11 – нигде такого ключа нет. Только на некоторых 7-ках он был уже прописан изначально. У меня такой вопрос: если он так нужен для правильной работы хуков низкого уровня, то какого хрена microsoft его изначально не прописывают в системе или я чего-то не понимаю???
Вложения
LowLevelHooks.rar
Пример низкоуровневого глобального хука...
(2.67 Кб) Скачиваний: 28

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Вопрос на тему низкоуровневых хуков...

Сообщение Teranas » 19.02.2023 (Вс) 16:33

Первый раз слышу, чтобы хук зависел от каких-либо параметров из реестра Windows.
Мне кажется, тут какое-то непонимание принципов.
С уважением, Андрей.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 376
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Вопрос на тему низкоуровневых хуков...

Сообщение Vova_2581 » 20.02.2023 (Пн) 14:20

я тоже первый раз с этим столкнулся и тем не менее... :roll:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList  
cron