全局键盘钩子(C#)

5

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

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

我想设置热键(例如Ctrl+S),即使没有焦点在实际窗体上也可以使用。

2个回答

7

Paul的帖子中链接了两个答案,一个告诉你如何实现钩子,另一个告诉你调用RegisterHotKey。对于像Ctrl + S这样简单的热键,您不需要安装钩子,因此请使用RegisterHotKey


1

或者您可以使用 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());

+1 对于最干净的解决方案,也适用于鼠标事件。谢谢! - AVIDeveloper
4
Helper是做什么的?我该如何导入它? - iptq
http://stackoverflow.com/questions/31953297/the-name-helper-does-not-exist-in-the-current-context - vfioox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接