全局键盘挂钩(C#)

时间:2009-05-05 10:16:50

标签: c# windows hotkeys global-hotkey

  

可能重复:
  Global keyboard capture in C# application

有人可以帮我为我的应用程序设置全局键盘钩子吗?

我想设置热键(例如 Ctrl + S ),可以在不关注实际表格时使用。

2 个答案:

答案 0 :(得分:7)

Paul的帖子链接到两个答案,一个告诉你如何实现一个钩子,另一个告诉你调用RegisterHotKey。您不需要像Ctrl + S热键那样简单地安装钩子,所以请改为调用RegisterHotKey

答案 1 :(得分:2)

或者您可以使用C#的MessageFilter。当应用程序进程中的任何控件/表单都有焦点时,它应该可以正常工作。

示例代码:

class KeyboardMessageFilter : IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {
        if (m.Msg == ((int)Helper.WindowsMessages.WM_KEYDOWN))
        {
            switch ((int)m.WParam)
            {
                case (int)Keys.Escape:
                    // Do Something
                    return true;
                case (int)Keys.Right:
                    // Do Something
                    return true;
                case (int)Keys.Left:
                    // Do Something
                    return true;
            }
        }

        return false;
    }
}

而不仅仅是在你的应用程序中添加一个新的MessageFilter:

Application.AddMessageFilter(new KeyboardMessageFilter());
相关问题