0

我需要实现一个代码来识别和忽略 Windows 中的一些键盘输入,为此我正在使用安装钩子的整个过程(我需要它来阻止Alt+TabWindows+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);
}

不管我在 return 中输入了什么,系统仍然会得到 key 输入。

那么我需要在那里放什么?

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 回答