如何捕获WinForm主窗体的键盘事件以及其他控件所在的位置。
因此,我想捕获一个事件Ctrl + S,而焦点在哪里都无所谓。
但是没有Pinvoke(钩子等等)
只有.NET管理内部电源。

最佳答案

试试这个代码。使用接口IMessageFilter可以过滤任何ctrl + key。

public partial class Form1 :
    Form,
    IMessageFilter
{
    public Form1()
    {
        InitializeComponent();

        Application.AddMessageFilter(this);
        this.FormClosed += new FormClosedEventHandler(this.Form1_FormClosed);
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        Application.RemoveMessageFilter(this);
    }

    public bool PreFilterMessage(ref Message m)
    {
        //here you can specify  which key you need to filter

        if (m.Msg == 0x0100 && (Keys)m.WParam.ToInt32() == Keys.S &&
            ModifierKeys == Keys.Control)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}


我对此进行了测试并为我工作。

关于c# - C#捕获主要形式的键盘事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22560756/

10-13 09:15