5

可能重复:
C# 应用程序中的全局键盘捕获

谁能帮我为我的应用程序设置一个全局键盘挂钩?

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

4

2 回答 2

7

Paul 的帖子链接到两个答案,一个告诉您如何实现挂钩,另一个告诉您调用 RegisterHotKey。您不需要为像 Ctrl+S 热键这样简单的东西安装挂钩,因此请改为调用RegisterHotKey 。

于 2009-05-05T11:07:28.680 回答
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());
于 2009-05-05T11:31:26.423 回答