-1

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;   
}
4

1 に答える 1