在wndproc中捕获Ctrl + Alt键

时间:2017-01-12 06:22:05

标签: c++ qt

我使用以下方法成功捕获了 Alt + F4 在我的被覆盖的wndproc函数中:

LRESULT CALLBACK NewWndProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
    if (uMsg == WM_SYSKEYDOWN)
    {
        switch (wParam)
        {
        case VK_F4:
        {
            qDebug() << "Alt+F4 pressed";
            break;
        }

    };

}
else
    return CallWindowProc(OldWinProc,hwnd,uMsg,wParam,lParam);
}

我现在需要抓住 Ctrl + Alt + Tab Ctrl + Alt +

但我似乎无法找到它们。 我知道在C#中函数中的一个参数是:

Keys keyData

我可以使用以下内容:

case Keys.Control | Keys.Alt | Keys.Q:

如何在C ++中获得这些组合键?

1 个答案:

答案 0 :(得分:1)

使用GetKeyState WinAPI函数获取修改键的状态,例如 Ctrl 。例如:

case VK_LEFT:
  {
     if (GetKeyState(VK_CONTROL) & 0x8000)
     {
        qDebug() << "Alt+Ctrl+Left Arrow pressed";
        break;
     }
  }

但请注意Windows下的某些显卡驱动程序可以在 Ctrl + Alt + 组合中旋转屏幕在代码获取之前拦截此组合。在驱动程序之前实现获取此键盘事件将会有点困难。但是你可以disable this feature