在C#中截取系统消息时,主要有以下两种方案:
通过在From中重写Control类的虚方法WndProc来截取Windows消息。
protected override void WndProc(ref Message m)
{
switch(m.Msg)
{
case 513:
MessageBox.Show("单击了鼠标左键!","系统信息");
m.Result = (IntPtr)0;
break;
case 516:
MessageBox.Show("单击了鼠标右键!","系统信息");
m.Result = (IntPtr)0;
break;
default:
base.WndProc(ref m);
break;
}
}
通过实现IMessageFilter接口来创建消息筛选器,从而截取Windows消息。
private MessageFilter m = new MessageFilter();
private void Form1_Load(object sender, EventArgs e)
{
Application.AddMessageFilter(m);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Application.RemoveMessageFilter(m);
}
public class MessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
switch (m.Msg)
{
case 513:
MessageBox.Show("单击了鼠标左键!", "系统信息");
return true;
case 516:
MessageBox.Show("单击了鼠标右键!", "系统信息");
return true;
default:
return false;
}
}
}