我需要实现一个代码来识别和忽略Windows中的某些键盘输入,并且我正在使用整个安装钩子的东西(我需要它来阻止 Alt + Tab ,< kbd> Windows + Tab , Windows + D 等)。鉴于只有在我的软件具有焦点(将在FullScreen模式下)时才会发生这种情况,因此不需要(我认为)实现系统范围的钩子(使用DLL等),所以我是现在尝试配置我的KeyboardProc
函数以执行我需要的操作。
问题在于我无法使其发挥作用。我已经能够检测到特定的密钥,但不能让Windows忽略它。
这就是我现在所拥有的(在Qt中):
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if (code < 0)
return CallNextHookEx(NULL, code, wParam, lParam);
switch(wParam)
{
case VK_LWIN:
qDebug() << "VK_LWIN";
return NULL;
break;
case 0x41: //A
qDebug() << "A";
return false;
break;
}
return CallNextHookEx(NULL, code, wParam, lParam);
}
无论我在回程中输入什么,系统仍然可以获得键输入。
那么我需要把它放在那里?
答案 0 :(得分:1)
毕竟我想出了怎么做。不同之处在于我移动使用了低级键盘钩子,因此功能名称发生了变化。这是:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(NULL, nCode, wParam, lParam);
tagKBDLLHOOKSTRUCT *str = (tagKBDLLHOOKSTRUCT *)lParam;
switch(str->flags)
{
case (LLKHF_ALTDOWN):
qDebug() << "ALT";
delete str;
return 1;
}
if (wParam == WM_KEYDOWN)
{
switch (str->vkCode)
{
case VK_RWIN:
case VK_LWIN:
case VK_LCONTROL:
case VK_RCONTROL:
case VK_APPS:
case VK_SLEEP:
case VK_MENU:
qDebug() << "SPECIAL PRESS";
delete str;
return 1;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}