C#拦截系统消息

来源:互联网 发布:多益网络手游官网 编辑:程序博客网 时间:2024/05/17 04:45

 继承IMessageFilter接口


/**//*C#截取系统消息 */ //一、截取系统消息//方法一://添加监视消息private void Form_Load(object sender, System.EventArgs e){  Application.AddMessageFilter(this);}//撤消消息监视private void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e){  Application.RemoveMessageFilter(this);}//截取消息,进行处理public bool PreFilterMessage(ref System.Windows.Forms.Message m){  switch(m.Msg )  {  case 513:        //拦截左键单击事件   MessageBox.Show("哈哈,你点击了左键被拦截!");  return true;    //返回true则消息被裁取,系统不再处理  case 516:        //拦截左键单击事件   MessageBox.Show("哈哈,你点击了右键被拦截!");  return true;    //返回true则消息被裁取,系统不再处理  default:  return false;    //返回false则消息未被裁取,系统会处理  }} //方法二: //截取消息,进行处理 protected override void WndProc(ref Message m) {  switch(m.Msg)  {  case 17:  MessageBox.Show("哈哈,你不能关闭计算机!");  m.Result=(IntPtr)0;  break;  case 513:  MessageBox.Show("哈哈,你不能点击左键!");   m.Result=(IntPtr)0;  break;  case 516:  MessageBox.Show("哈哈,你不能点击右键!");   m.Result=(IntPtr)0;  break;  default:  base.WndProc(ref m);  break;  }} 
 protected override void WndProc(ref Message m)//监视Windows消息        {            const int WM_DEVICECHANGE = 0x219;            const int WM_DEVICEARRVIAL   =   0x8000;//如果m.Msg的值为0x8000那么表示有U盘插入            const int WM_DEVICEMOVECOMPLETE=0x8004;            switch (m.Msg)            {                case WM_DEVICECHANGE:                    {                        ShowDeviceChanged("WM_DEVICECHANGE");//                        if (m.WParam.ToInt32() == WM_DEVICEARRVIAL)                            ShowDeviceChanged("WM_DEVICEARRVIAL");                        else if (m.WParam.ToInt32() == WM_DEVICEMOVECOMPLETE)                            ShowDeviceChanged("WM_DEVICEMOVECOMPLETE");                    }                    break;            }            base.WndProc(ref m); //将系统消息传递自父类的WndProc        }        private void BTN_Start_Click(object sender, EventArgs e)        {        }        public void ShowDeviceChanged(string message)        {            switch(message)            {                case "WM_DEVICECHANGE":                    this.textBox_Message.Text += "Device Changed \r\n";                    break;                case "WM_DEVICEMOVECOMPLETE":                    this.textBox_Message.Text += "Device Moved\r\n";                    break;                case "WM_DEVICEARRVIAL":                    this.textBox_Message.Text += "Device Arrived\r\n";                    break;            }        }