Пардон, это я спутал с GetKeyState.
Что в байтовой матрице происходит - надо смотреть.
В этом списке что-то не нашел. Да и на форуме уже проскакивала тема, что нельзя отличить эти два энтера.
---------- Post added at 20:42 ---------- Previous post was at 20:41 ----------
А как узнать в глобальном хуке состояние PadEnter? Или у него еще свои коды виртуальных клавиш?
Если эта клавиша при нажатии генерит автоповтор - то когда бы ни был подключен глобальный хук - он состояние этой клавиши тут же "подцепит".
Проверить просто - тестовая программка с хуком есть. Хук вызывается при каждом нажатии, автоповторе и отжатии каждой клавиши, получая её скан-код с битом нажата/отжата.
Формат аргументов глобального хука описан здесь: GlobalKeyboardHook.
Последний раз редактировалось Patron; 31.12.2012 в 20:54.
В приложении продвинутая версия хук-теста.
Вот, что она пишет в лог при нажатии и отжатии сначала обычного, а потом дополнительного Enter:
Отличие есть - это флаг доп. клавиатуры в наборе флагов.Код:wp[0x100] ; vkCode[0xD] ; scanCode[0x1C] ; flags[0x0] wp[0x101] ; vkCode[0xD] ; scanCode[0x1C] ; flags[0x80] wp[0x100] ; vkCode[0xD] ; scanCode[0x1C] ; flags[0x1] wp[0x101] ; vkCode[0xD] ; scanCode[0x1C] ; flags[0x81]
...
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Только что сделал тест для сравнения виртуальных кодов клавиш через GetKeyboardState(). В ней, к сожалению, нажатия разных энтеров ТОЧНО не различаются.
Опять, получается, костыли всякие.
---------- Post added at 21:33 ---------- Previous post was at 21:30 ----------
Все правильно, и в доке так сказано:
0 Specifies whether the key is an extended key, such as a function key or a key on the numeric keypad. The value is 1 if the key is an extended key; otherwise, it is 0.
Ну в ней хоть все единообразно, в одном массиве, где все клавиши различаются.
Ну, допустим, сделать перехват клавиши дополнительного энтера в хуке. Куда потом его сувать? Придумывать новый сканкод? Это будет самодеятельность, т.к. эти же сканкоды получают другие приложения.
Так же всегда есть задержка между включеним и отключением глобального хука по активизации окна.
Можно, конечно, засинхронизироваться, но это все усложненно.
Можно вести полностью свою матрицу всех клавиш - в удобном для себя формате.
Хук можно включать один раз - при запуске программы. При получении фокуса устанавливать флажок для хука, а при потере - убирать. А уже хук, глядя на этот флажок - будет пропускать или не пропускать нажатие NumLock в Windows.Так же всегда есть задержка между включеним и отключением глобального хука по активизации окна.
Чтобы не пустить нажатие в Windows - хук должен сделать return 1;,
а чтобы пропустить - return CallNextHookEx( ghKeyboardHook, nCode, wp, lp );
Кстати - у меня в хук-тесте ошибка, там в CallNextHookEx передаются не оригинальные параметры вызова ( wp и lp ), а переработанные ( wParam и lParam ) - а надо передавать точно те, которые получены хуком.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)