使用RegisterHotKey在应用程序中注册多个热键

时间:2012-01-20 20:14:42

标签: c# windows winapi

我正在使用registerHotKey

在我的应用程序中设置多个热键
Win32.RegisterHotKey(hWndSource.Handle, add, Win32.MOD_CONTROL | Win32.MOD_SHIFT, Win32.VK_KEY_D);
Win32.RegisterHotKey(hWndSource.Handle, manage, Win32.MOD_CONTROL | Win32.MOD_SHIFT, Win32.VK_KEY_M);

这都是发现和花花公子,但我很困惑我应该抓住每一个。这是按下热键时发生的过程:

 private IntPtr MainWindowProcCatchManageHotkey(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        switch (msg)
        {
            case Win32.WM_HOTKEY:
                if (wParam == (IntPtr)(-16285))
                {
                    CaptureManageHotkey();
                }
                if (wParam == (IntPtr)(-16303))
                {
                    CaptureSelection();
                }
                handled = true;
                break;
        }

        return IntPtr.Zero;
    }

这是非常贫民窟。它的工作原理从我测试过的很少,但我不愿意在没有更好地了解正在发生的事情的情况下推动它。我知道测试wParam的值是什么的唯一原因是因为我运行了调试器并设置了一个断点,所以我可以看到传递给函数的内容。在某些地方,我可以在我的情况下查找lParam和wParam的值吗?我想捕捉ctrl + shift + d为一个,而ctrl + shift + m为另一个。我在哪里可以看到那些lParam和wParam应该是什么?

tl; dr我怎么知道我想要查找的lParam和wParam的值是什么?

1 个答案:

答案 0 :(得分:3)

wParam值是您调用id时传递的RegisterHotKey值。在这种情况下,它们是值addmanage

lParam值包含实际按下的组合键。

  

低位字指定要与高位字指定的键组合按下的键以生成WM_HOTKEY消息。

所有这些都在WM_HOTKEY的MSDN主题中进行了解释。