如何截获系统消息,比如说系统关机的消息等等。
实现这项功能最基本的一个函数就是WndProc(ref Message message)函数,其次我们还要知道系统消息的代码值,比如说关机消息的代码值就是0x0011。接下来我们以关机消息为例进行讲解:
首先定义关机消息代码值
private const int WM_QUERYENDSESSION = 0x0011; //关机消息定义
其次在WndProc函数中处理消息
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_QUERYENDSESSION:
// 你的处理代码
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
其中还有一个方法可以控制系统消息,那就是bool PreFilterMessage(ref System.Windows.Forms.Message m)。
用法如下:
//添加监视消息
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)
{
case 513: //拦截左键单击事件
MessageBox.Show("哈哈,你点击了左键被拦截!");//返回true则消息被裁取,系统不再处理
case 516: //拦截左键单击事件
MessageBox.Show("哈哈,你点击了右键被拦截!");//返回true则消息被裁取,系统不再处理 default:
return false; //返回false则消息未被裁取,系统会处理
}