C#實現在Form上截取訊息的兩種方法

來源:互聯網
上載者:User

標籤:style   color   io   os   使用   ar   for   sp   div   

比較常用的是重載Form的DefWndProc方法,例如截取滑鼠按下的訊息:

protected override void DefWndProc(ref Message m)
    {
      if ( m.Msg == 0x0201 )
      {
        MessageBox.Show(m.Msg.ToString());
      }
      else
      {
        base.DefWndProc (ref m);
      }
    }

還可以通過另一種辦法,使用IMessageFilter 介面:

public classMessageFilter : IMessageFilter
  {
        public bool PreFilterMessage(ref Message m)
        {
            if (m.Msg == 0x0201)
            {
                MessageBox.Show("WM_LBUTTONDOWN is: " +m.Msg);
                return true;
            }
            return false;
    }
  }

  然後使用Application.AddMessageFilter方法,例如:

  private staticMessageFilter msgFliter = new MessageFilter();

  在Main方法中註冊訊息篩選器:

  Application.AddMessageFilter(msgFliter);

  如果要取消註冊,可以調用Application.RemoveMessageFilter方法

  在這裡有一個Windows的MessageID的枚舉,挺有用的,好幾次都忘了地址,這次寫在這裡好好儲存

  Windows Message IDconstants

 

 

 

一、截取系統訊息

方法一:

//添加監視訊息
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.Messagem)
{
  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 Messagem) 
{
  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;
  }
}

C#實現在Form上截取訊息的兩種方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.