0

Windowsでいくつかのキーボード入力を識別して無視するコードを実装する必要があり、そのためにフックをインストールするすべてを使用しています( 、 、 などをブロックするために必要Alt+TabですWindows+TabWindows+D。これは、私のソフトウェアがフォーカスを持っている場合 (フルスクリーン モードになる場合) にのみ発生するという事実を考えると、(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);
}

リターンに何を入力しても、システムは引き続きキー入力を取得します。

それで、私はそこに何を置く必要がありますか?

4

1 に答える 1

2

やっぱりやり方はわかった。違いは、低レベルのキーボード フックを使用するように移動したため、関数の名前が変更されたことです。ここにあります:

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);
}
于 2012-08-16T20:21:21.517 に答える