通过截取系统消息判断鼠标的单机键

Posted on 2019-01-17 15:57  努力成长静待花开  阅读(203)  评论(0编辑  收藏  举报

实现效果:

   

知识运用:

  通过在From中重写Control类的虚方法 WndProc 来获取信息

  protected virtual void WndProc(ref Message m)    Message结构的属性

  

     通过实现IMessageFilter接口来创建消息筛选器  从而截取Windows消息

实现代码:

        private void Form1_Load(object sender, EventArgs e)     //窗体加载消息筛选器
        {
            Application.AddMessageFilter(mf);   //添加消息筛选器 向目标传递Windows消息时监视这些消息
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.RemoveMessageFilter(mf);  //从应用程序的消息泵中移除一个消息筛选器
        }
            //方法一:重写WndProc虚方法  与二不可共存
        //protected override void WndProc(ref Message m)
        //{
        //    switch (m.Msg)
        //    {
        //        case 513:
        //            MessageBox.Show("单机了鼠标左键", "系统信息");
        //            m.Result = (IntPtr)0;         //为了响应消息处理而向Windows返回的值
        //            break;
        //        case 516:
        //            MessageBox.Show("单机了鼠标右键", "系统信息");
        //            m.Result = (IntPtr)0;
        //            break;
        //        default:
        //            base.WndProc(ref m);
        //            break;
        //    }
        //}
    }
    //方法二: 实现IMessageFilter接口  从而获取Windows消息
    public class MessageFilter : IMessageFilter
    {
        public bool PreFilterMessage(ref Message message)
        {
            switch (message.Msg)
            {
                case 513:
                    MessageBox.Show("单机了鼠标左键", "系统信息");
                    return true;
                case 516:
                    MessageBox.Show("单机了鼠标右键", "系统信息");
                    return true;
                default:
                    return false;
            }
        }
    }