我正在使用 Visual c++ 2012 更新 3 中的一个项目。我需要将键盘连接一段时间并允许用户仅输入密码。所以我禁用了所有键,除了那些需要输入密码的键。它运作良好。但是在 unHook 之后,alt 键会自动按下。我的意思是在脱钩后,如果我按 Tab 键,它就像我按 alt + tab 一样工作。在 Windows 8 中,按下 win 键。但是一旦我在键盘上手动按下 alt 键,问题就解决了。但这对我来说是一个非常严重的案例,因为用户肯定会因为这种奇怪的行为而失去对我的应用程序的信任。任何人都可以帮忙。
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0 || nCode != HC_ACTION ) return CallNextHookEx( NULL, nCode, wParam, lParam);
KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*) lParam;
if(
(p->vkCode == VK_BACK) ||
(p->vkCode == VK_SHIFT) ||
(p->vkCode == VK_CAPITAL) ||
(p->vkCode == VK_SPACE) ||
(p->vkCode == VK_HOME) ||
(p->vkCode == VK_END) ||
(p->vkCode == VK_LEFT) ||
(p->vkCode == VK_RIGHT) ||
(p->vkCode == VK_DELETE) ||
(p->vkCode >= 0x30 && p->vkCode <= 0x39) ||
(p->vkCode >= 0x41 && p->vkCode <= 0x5A) ||
(p->vkCode >= 0x60 && p->vkCode <= 0x6F) ||
(p->vkCode == 0x90) ||
(p->vkCode == 0x91) ||
(p->vkCode == 0xA0) ||
(p->vkCode == 0xA1) ||
(p->vkCode >= 0xBA && p->vkCode <= 0xC0) ||
(p->vkCode >= 0xDB && p->vkCode <= 0xDF) ||
(p->vkCode == 0xE2)
)
{
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
else
return 1;
}