-1
我正在處理visual C++ 2012 update 3中的一個項目。我需要鉤住鍵盤一段時間,並且只允許用戶輸入密碼。因此,我禁用除鍵入密碼所需的所有密鑰。它運作良好。但解除後,alt鍵自動按下。我的意思是解開後,如果我按Tab鍵,它就像我按Alt + Tab一樣工作。在Windows 8中,按下win鍵。但是,一旦我在鍵盤上手動按下alt鍵,問題就解決了。但這對我來說是一個非常嚴重的情況,因爲用戶由於這種奇怪的行爲而肯定會失去對應用程序的信任。任何人都可以幫忙。在Visual C++的鍵盤掛鉤後發生意外的行爲
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;
}
程序啓動時是否正在等待? – chris
用戶插入密碼後,我的程序即將關閉。 alt鍵在程序關閉後被保留 – Jasir
我的觀點是如果用戶在程序啓動時持有alt鍵,那麼keyup會被您的鉤子佔用,並且在程序關閉後仍然沒有鍵盤,因此係統認爲它是下。 – chris