日期:2014-05-20  浏览次数:21065 次

c# winform中怎么截获处理windows关闭的消息
c#   winform中怎么截获处理windows关闭的消息
有没有个专家给条名路?

------解决方案--------------------
如果是VS2005的话,可以用如下的事件,这个事件是系统关闭或注销的时候发生的:
Microsoft.Win32.SystemEvents.SessionEnding

------解决方案--------------------
在窗口程序里,可以用WndProc来得到并处理Window系统注销或关闭的消息,如:

protected override void WndProc(ref Message m)
{
if (m.Msg == 0x11)//WM_QUERYENDSESSION
{

}
else if (m.Msg == 0x16)//WM_ENDSESSION
{

}
base.WndProc(ref m);
}
------解决方案--------------------
public class form1:System.Windows.Forms.Form,IMessageFilter
{
public bool PreFilterMessage(ref System.Windows.Forms.Message mm)
{
if(mm.Msg> =512&&mm.Msg <=515)
{return true;}
return false;
}
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{

}

private void Form1_Load(object sender, System.EventArgs e)
{
Application.AddMessageFilter(this);
}
}
------解决方案--------------------
如果你是要在窗口點關閉時,處理事情,那就可以在Form_Closing事件中寫代碼,取消關閉執行e.Cancel = true;就可。
------解决方案--------------------
平民百姓说得没错,很久以前我也回答了一位CSDN上的朋友同样的问题,以下是阻止关机的代码:
private const int WM_QUERYENDSESSION=0x0011;
protected override void WndProc(ref Message m)
{
int i=0;
switch(m.Msg)
{
case WM_QUERYENDSESSION:
m.Result=(IntPtr)i;
break;
default:
base.WndProc(ref m);
break;
}

}
---------------------------------
当然你关了电源就没办法阻止了,不过还是可以在关机前保存数据的(在case WM_QUERYENDSESSION:处添加代码就行了)