比较常用的是重载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 class
MessageFilter : 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 static
MessageFilter msgFliter = new MessageFilter();

  在Main方法中注册消息筛选器:

  Application.AddMessageFilter(msgFliter);

  如果要取消注册,可以调用Application.RemoveMessageFilter方法

  在这里有一个Windows的MessageID的枚举,挺有用的,好几次都忘了地址,这次写在这里好好保存

  Windows Message ID
constants

一、截取系统消息

方法一:

//添加监视消息
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;
  }
}

最新文章

  1. 优酷土豆2014校园招聘笔试题目之Java开发类
  2. Objective-C 编码建议
  3. centos启用ftp功能
  4. Virtual Box创建共享目录
  5. JavaScript数据结构,队列和栈
  6. wifi热点共享 3G网络
  7. [转]Oracle_ProC编程
  8. asp.net web forms和asp.net mvc比较
  9. POJ 3701 概率DP
  10. 【转】掌握java枚举类型(enum type)
  11. C++学习之虚继承
  12. POJ 2991 Crane(线段树+计算几何)
  13. Sass与Compress实战:第三章
  14. JavaScript字符集编码与解码
  15. C#在与java对接时候的UrlEncode的坑
  16. 【转】Awk 命令学习总结、AWk命令系列学习(linux shell)
  17. 【转载】DRuid 大数据分析之查询
  18. 【js】【图片显示】js控制html页面显示图片方式
  19. Haproxy 安装初体验
  20. Elasticsearch索引模板和别名

热门文章

  1. 【距离GDOI:131天】 后缀数组完毕
  2. POJ 1039 Pipe | 线段相交
  3. idiots
  4. 向mysql中批量插入数据的性能分析
  5. Java面试题之类的静态代码块和静态属性等的加载顺序
  6. Oracle 根据逗号分隔字符串 同时记录一波坑
  7. 基于Windows Server 2008 R2的Failover Cluster
  8. 转:android service总结2
  9. POJ3207 Ikki's Story IV – Panda's Trick
  10. windows7下检测耳机麦克拔插(转)