Из документации LowLevelKeyboardProc
MSDN :
Если процедура подключения обработала сообщение, она может вернуть ненулевое значение , чтобы система не могла передать сообщение остальной части цепочки подключения или процедуре целевого окна.
[Акцент шахты]
Так что это не совсем хорошо задокументировано, что произойдет, если вы на самом деле return 0
. Я предполагаю, что это значение заставляет систему вызывать следующую подключаемую процедуру в цепочке в любом случае, и в конечном итоге она обрабатывается вашей оконной процедурой по умолчанию.
Недавно я написал простое приложение, которое требует, чтобы вы удерживали Caps Lock в течение заданного промежутка времени, чтобы переключать его, и всякий раз, когда я фактически обрабатываю этот ключ в моем LowLevelKeyboardProc
, я всегда возвращаю 1, в противном случае
CallNextHookEx( NULL, nCode, wParam, lParam );
Дополнительное примечание: если вы ориентируетесь на NT / XP / 2003 и более новые системы, вы можете передать NULL
в первом параметре CallNextHookEx
, так как он игнорируется.