Здравствуйте!
Как-то по работе мне нужно было для студентов написать небольшую утилиту, которая проверяла бы у них на ПК работу консоли ввода-вывода на определенные клавиши клавиатуры и мышки. Я такую утилиту написал, переделанный образец выкладываю здесь в приложении... чисто для примера и пробы... можете у себя попробовать... Так вот, заработала эта утилита не сразу. Мне нужно было установить глобальный хук, и чтобы не возится с 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 его изначально не прописывают в системе или я чего-то не понимаю???