在C#中实现消息过滤

In C# we can filter our application's messages so some of them don't get dispatched. See the example below of how to prevent the user from clicking the Left Mouse button in our application:

// created on 20.10.2001 at 18:04
//This example has 2 classes
//1. MyFilter, which exposes the IMesageFilter interface
//The PreFilterMessage method is overriden for our needs
//2. MainForm, which is our main form
using System;
using System.Windows.Forms;
class MyFilter:IMessageFilter //gets the left mouse button messages
{
public bool PreFilterMessage(ref Message m)
{
  if (m.Msg>=513 && m.Msg<=515)
   {
    Console.WriteLine("mouse left button event NOT accepted!Filter working...");
    return(true);
   }
  return(false);
}
}
class MainForm : Form
{
private Button btn=new Button();
public MainForm() //MainForm's constructor
{
  //let's put a button on the form
  btn.Left=30;
  btn.Top=30;
  btn.Width=150;
  btn.Text="Try to Click me!";
  btn.Visible=true;
  this.Controls.Add(btn);
}
public static void Main()
{
  
  //let's put some filter on our Application's message queue
  Application.AddMessageFilter(new MyFilter());
  //create the MainForm object and make it visible
  Application.Run(new MainForm());
}
}

时间: 2024-09-21 08:46:21

在C#中实现消息过滤的相关文章

深度解析VC中的消息(中)

队列消息和非队列消息 从消息的发送途径来看,消息可以分成2种:队列消息和非队列消息.消息队列由可以分成系统消息队列和线程消息队列.系统消息队列由Windows维护,线程消息队列则由每个GUI线程自己进行维护,为避免给non-GUI现成创建消息队列,所有线程产生时并没有消息队列,仅当线程第一次调用GDI函数数系统给线程创建一个消息队列.队列消息送到系统消息队列,然后到线程消息队列:非队列消息直接送给目的窗口过程. 对于队列消息,最常见的是鼠标和键盘触发的消息,例如WM_MOUSERMOVE,WM_

在Exchange 2007中创建邮箱过滤查看

尤其是对于那些公司规模更为庞大的系统管理员们来说,在Exchange2007的管理控制台上加强巩固"邮箱查看"功能,无疑是一个重大的胜利.创建一个"邮箱过滤查看"功能,可以有效的简化在Exchange2007邮箱中查找和管理的过程. 邮箱过滤查看可以按照您活动目录所设置的属性来进行.例如,您想创建一个邮箱过滤查看,让其在Exchange控制台上只显示出本公司市场部的全体员工的邮箱. 在这里要说明一下,所有关于微软的新产品,例如Exchange Server2007,

在VC++中利用消息制作启动封面

1.用Appwizard创建一个空的SDI工程Splash: 2.导入用作启动封面的图片: (1)在创建的新工程Splash中,选择ResourceView面板打开资源编辑器.右击"Splash resources",在打开的快捷菜单中选择"Insert"命令,选择其中的"Bitmap"选项,然后单击"Import"按钮,准备导入用做启动封面的BMP图形文件. (2)在ResourceView面板中,右击刚导入的"I

VB与VC混合编程中处理消息的方法

现在越来越多的人采用VB与VC的混合编程:用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作.IO端口的操作等,VC中还可以嵌入汇编语言进行更底层的操作. 一般的做法是将VC程序编译成DLL,在VB中用Declare语句声明DLL中的函数,例如: Declare Function SendCommand Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.d

探索ASP.NET AJAX中的消息传输模式(二)

在上一篇<探索AJAX中的消息传输模式(一) >一文中,我主要介绍了普通字符串(Plain-text string)和XML格式的传输模式,然而在实际的开发应用中,这两种方法基本上可以足够应付我们的需求 了,不过在对于复杂的对象传输的时候,采用上面所介绍的这两种传输模式有点显得不理想.于此,本文 将结合<探索AJAX中的消息传输模式(一) >再介绍一种轻量级的数据交换格式JSON(JavaScript Object Notation) ,这是一种JavaScrpt自己的一种用来描述

探索ASP.NET AJAX中的消息传输模式(一)

在我们使用AJAX的应用中,消息传输有那些方式呢?纯文本.带HTML的文本.XML.JSON?还有??? 在许多情况下,纯文本的消息传输就足够了.例如,要传输一个用户名,用户密码,或是用户联系方法 (PHONE,EMAIL,MSN)等,通常都是以文本的形式传输的.又比如复杂点的数据信息,表格.对象或者是? ??,这样我们可以使用XML或是JSON来格式化数据后进行传输. 有这样一个AJAX的应用场合,提供一系列的标签连接,让用户任意选择,浏览器向服务器发送请求查 询得到想要的数据信息.下面就以这

深度解析VC中的消息(下)

前面,我们分析了消息的基本理论和基本的函数及用法,接下来,我们将进一步讨论消息传递在MFC中的实现. MFC消息的处理实现方式 初看MFC中的各种消息,以及在头脑中根深蒂固的C++的影响,我们可能很自然的就会想到利用C++的三大特性之一:虚拟机制来实现消息的传递,但是经过分析,我们看到事情并不是想我们想象的那样,在MFC中消息是通过一种所谓的消息映射机制来处理的. 为什么呢?在潘爱民老师翻译的<Visual C++技术内幕>(第4版)中给出了详细的原因说明,我再简要的说一遍.在CWnd类中大约

在C#应用程序与DLL交互中使用消息

C#是一种类似 Java 的完全面向对象的高级编程语言,其处理过程采用事件驱动方式,但在实际的使用过程中,有时候通过调用系统原有的消息处理起来会更简单,特别是在处理与DLL文件的交互时,实践证明的确是非常方便的. 在C#中使用自定义消息 在C#中使用自定义消息非常简单,只需要下面几个简单的步骤就可以了: 1.定义消息 定义消息的方法与在VC中定义消息有一点点不同,比如在VC中申明一个自定义消息是这样的: #define WM_TEST WM_USER + 101 而在C#中消息需要定义成 Win

微信公众帐号开发教程(十) 解析接口中的消息创建时间CreateTime

从微信公众平台的消息接口指南中可以看出,每种类型的消息定义中,都包含有CreateTime参数,它表示 消息的创建时间,如下图所示: 开发教程(十) 解析接口中的消息创建时间CreateTime-create time"> 上图是消息接口指南中4.1-文本消息的定义.注意CreateTime的描述:消息创建时间(整型),重点在于 这是一个整型的时间,而不是我们大家所熟悉的类似于"yyyy-MM-dd HH:mm:ss"的标准格式时间. 本文主要想介绍的就是微信消息接口中