Nea*_*eal 3 winapi keyboard-hook
我试图使用低级键盘挂钩完全禁用键盘上的字母“ a”。问题是,当我从keyboardproc返回0时,按键未被禁用,但是当我返回1时,按键被禁用。我以为从keyboardproc返回而没有调用CallNextHookEx会阻止该消息。返回0和返回1有什么区别?
LRESULT CALLBACK LowLevelKeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT* details = (KBDLLHOOKSTRUCT*) lParam;
if(code == HC_ACTION && wParam == WM_KEYDOWN)
{
if(details->vkCode == 0x41)
{
return 1;
}
}
return CallNextHookEx(g_hhkKeyboard, code, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
如果挂钩过程处理了该消息,则它可能返回一个非零值,以防止系统将该消息传递给其余的挂钩链或目标窗口过程。
[强调我的]
因此,它并没有完全有据可查,如果您实际上会发生什么return 0。我猜想这个值会导致系统无论如何都要调用链中的下一个钩子过程,最终它会由默认的窗口过程处理。
我最近写了一个简单的应用程序,要求您按住Caps Lock一定时间才能切换它,并且每当我实际在自己的键中操作时LowLevelKeyboardProc,我总是返回1,否则
CallNextHookEx( NULL, nCode, wParam, lParam );
Run Code Online (Sandbox Code Playgroud)
附加说明:如果您的目标是NT / XP / 2003和更高版本的系统,则可以传入NULL第一个CallNextHookEx参数,因为它会被忽略。
| 归档时间: |
|
| 查看次数: |
5860 次 |
| 最近记录: |