C#通过IMessageFilter捕获鼠标消息(转载)
在c#中怎样禁用鼠标左键的使用,其实我们可以通过ImessageFilter接口下的PreFilterMessage方法、Application类的AddMessageFilter方法,RemoveMessageFilter方法和Message结构的Msg属性来禁用鼠标左键。Message结构包装Windows发送的消息,可使用该结构包装消息,并将其分配给窗口过程以进行调度,还可以使用该结构获取系统向应用程序或控件发送的关于某个消息的信息。
使用PreFilterMessage方法在调度消息之前将其筛选出来。语法格式如下:
Bool PreFilterMessage(refMessage m)
参数说明:
m:要调度的消息,无法修改此消息。
返回值:如果筛选消息并禁止消息被调度,则为True;如果允许消息继续到达下一个筛选器或控件,则为False。使用AddMessageFilter方法添加消息筛选器以便在向目标传送Windows消息时监视这些消息。使RemoveMessageFilter 从应用程序的消息泵移除一个消息筛选器。
下面给出大家一下主要代码:
Public partial class Form1:Form,ImessageFilter
{
Public Form1()
{
InitializeComponent();
}
Public bool PreFilterMessage(ref System.Windows.Forms.Message MyMessage)
{
//不响应鼠标左键消息
If(MyMessage.Msg>=513 && MyMessage.Msg<=515)
{
Return true;
}
Return false;
}
Private voi button1_Click(object sender,EventArgs e)
{
Application.AddMessageFilter(this);
MessageBox.show(“鼠标左键已经被禁止,请用Tab键执行操作”,”信息提示”,
MessageBoxButtons.OK,MessageBoxIcn.Information);
}
Private void button2_Click(object sender,EventArgs e)
{
Application.RemoveMessageFilter(this);
MessageBox.Show(“鼠标左键已经被解禁,可以执行操作!”,”信息提示”,
MessageBoxButtons.OK,messageBoxIcon.Information)
}
}
{
Public Form1()
{
InitializeComponent();
}
Public bool PreFilterMessage(ref System.Windows.Forms.Message MyMessage)
{
//不响应鼠标左键消息
If(MyMessage.Msg>=513 && MyMessage.Msg<=515)
{
Return true;
}
Return false;
}
Private voi button1_Click(object sender,EventArgs e)
{
Application.AddMessageFilter(this);
MessageBox.show(“鼠标左键已经被禁止,请用Tab键执行操作”,”信息提示”,
MessageBoxButtons.OK,MessageBoxIcn.Information);
}
Private void button2_Click(object sender,EventArgs e)
{
Application.RemoveMessageFilter(this);
MessageBox.Show(“鼠标左键已经被解禁,可以执行操作!”,”信息提示”,
MessageBoxButtons.OK,messageBoxIcon.Information)
}
}
鼠标移动:512
鼠标左键:
down:513
up: 514
double click:515
鼠标右键:
down:516
up:517
鼠标滚轮:522