protected override void WndProc(ref System.Windows.Forms.Message m)
{
try
{
switch(m.Msg)
{
case WM_QUERYENDSESSION:
m.Result = (IntPtr)WM_TRUE;
return;
//休眠事件处理
case WM_POWERBROADCAST :
if (m.WParam == (IntPtr)PBT_APMQUERYSUSPEND)
{
}
break;
default:
break;
}
base.WndProc (ref m);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
{
try
{
switch(m.Msg)
{
case WM_QUERYENDSESSION:
m.Result = (IntPtr)WM_TRUE;
return;
//休眠事件处理
case WM_POWERBROADCAST :
if (m.WParam == (IntPtr)PBT_APMQUERYSUSPEND)
{
}
break;
default:
break;
}
base.WndProc (ref m);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
{
switch (m.Msg)
{
case 0x0011:
MessageBox.Show("想要关机,先关闭本程序");
m.Result = (IntPtr)0;
break;
default:
base.WndProc(ref m);
break;
}
}
或
Microsoft.Win32.SystemEvents.SessionEnding
事件
private bool isExitApp = false;
private const int WM_QUERYENDSESSION = 0x0011;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_QUERYENDSESSION:
isExitApp = true;
Application.Exit();
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
} }将这段代码加到程序中,在系统关机时,程序先关闭,系统再关闭,够全了吧。