VC 捕获Windows关机事件

时间:2021-08-29 17:15:34

环境VC6.0 MFC

某些时候我们需要在系统关机的时候进行相应的处理。

在某个窗口添加窗口过程函数

LRESULT CMyDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if ( message == WM_ENDSESSION ) //Windows关机消息
{

//相应的处理代码

}
return CNewDialog::WindowProc(message, wParam, lParam);
}

 

 

http://www.cnblogs.com/pbreak/archive/2010/10/20/1856492.html

 

//下面是对话框工程 响应消息中自动添加的过程函数

LRESULT CProjectorControllerDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: 在此添加专用代码和/或调用基类
 switch (message)
 {
  case WM_QUERYENDSESSION:
   /*如果要注销或关闭系统返回 1 否则返回 0
            不管WM_QUERYENDSESSION最后的结果是可以顺利结束或不能顺利结束,Windows会再送
            一个WM_ENDSESSION的信息给所有的Process,而wParam的内容便是指出是否可以顺利结束*/
   //wchar_t tmp[10];
   //wsprintf(tmp,L"wParam = 0x%x  lParam = 0x%x",wParam,lParam);   
   if(lParam == 0){
    ::MessageBox(0,L"收到关机或重启消息",L"关机",MB_OK);
   }
   else//lParam == 0x80000000
    ::MessageBox(0,L"收到注销消息………………………………",L"0x80000000",MB_OK);
    
   return 0; //无论返回什么值,都不能实现阻止关机的功能,但SDK方式可以阻止关机,WHY?
  case WM_ENDSESSION:
   return 0; //无论返回什么值,都不能实现阻止关机的功能
 }

 return CDialog::DefWindowProc(message, wParam, lParam);
}

 
VC SDK方式截获windows关机消息,拦截消息后可控制是否继续关机-

 http://www.verysource.com/20070731getshutdown_-download-108496.html

 

VC6 MFC方式截获windows关机消息,但拦截消息后不能控制是否继续关机 -
http://www.verysource.com/20070801getshutdown_-download-119005.html

 

http://bbs.csdn.net/topics/70331603