C# capture main form keyboard events

前端 未结 4 1940
盖世英雄少女心
盖世英雄少女心 2020-12-20 17:10

How to catch keyboard events of the WinForm main form, where other controls are. So I want to catch one event Ctrl + S and doesn\'t matter where focus

4条回答
  •  一整个雨季
    2020-12-20 18:07

    Try this code. Use the interface IMessageFilter you can filter any 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;
            }
        }
    }
    

    I tested this and worked for me.

提交回复
热议问题