Visual C++ 2012 update 3 のプロジェクトに取り組んでいます。少しの間キーボードをフックし、ユーザーがパスワードのみを入力できるようにする必要があります。したがって、パスワードの入力に必要なキーを除くすべてのキーを無効にします。それはうまくいきます。ただし、フックを外した後、Alt キーが自動的に押されます。つまり、フックを外した後、タブキーを押すと、alt + タブを押したように機能します。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;
}