Global Keyboard Hooks (C#) [duplicate]

六月ゝ 毕业季﹏ 提交于 2019-11-27 04:40:25

问题


Possible Duplicate:
Global keyboard capture in C# application

Can anyone help me setup a global keyboard hook for my application?

I want to set hotkeys (such as Ctrl+S) that can be used when not focused on the actual form.


回答1:


Paul's post links to two answers, one telling you how to implement a hook, and another telling you to call RegisterHotKey. You shouldn't need to install a hook for something as simple as a Ctrl+S hotkey, so call RegisterHotKey instead.




回答2:


Or you can use C#'s MessageFilter. It should work while any control/form from your application's process has focus.

Sample Code:

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;
    }
}

And than simply add a new MessageFilter to your Application:

Application.AddMessageFilter(new KeyboardMessageFilter());


来源:https://stackoverflow.com/questions/824229/global-keyboard-hooks-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!