注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

分享,态度 ·~~

—— 十年太长,五年;如果可以回到五年前,你最想对那时候的自己说什么?

 
 
 

日志

 
 

C#:在Windows关机前主动退出程序  

2010-05-13 16:32:32|  分类: DotNet |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

原理:Windows在关机的时候会想所有顶层窗口广播一个消息WM_QUERYENDSESSION,其lParam参数可以区分是关机还是注销用户(注销用户时lParam是ENDSESSION_LOGOFF)。然后Windows会等到所有的应用程序都对这个消息返回TRUE才会关机。下面看例子,例子的源程序在这里。  
   
  LRESULT   CALLBACK   WndProc   (HWND   hwnd,   UINT   iMsg,   WPARAM   wParam,   LPARAM   lParam)  
  {   
  switch   (iMsg)  
  {   
      case   WM_DESTROY   :  
          PostQuitMessage   (0)   ;  
          return   0   ;   
      case   WM_QUERYENDSESSION:  
          ::MessageBox(hwnd,"未经本程序许可,你不能关机!","禁止关机",MB_OK|MB_SYSTEMMODAL);  
   
          return 1; //此处返回0则不能关机,返回1就能关机。  
  }  
  return   DefWindowProc   (hwnd,   iMsg,   wParam,   lParam)   ;  
  }   
        
          为了节省篇幅,这里之列出了消息处理过程。为了更清楚的看到消息处理,这个例子没有用VCL,而是直接使用了SDK。  
   
          另外,这个程序也不是绝对能阻止Windows关机,因为如果某个应用程序调用ExitWindowsEx(EWX_POWEROFF|EWX_FORCE,0);来关机,我这个程序就阻止不了,应为那样调用ExitWindowsEx,系统不会发出WM_QUERYENDSESSION消息,这个程序也就没有用了。  

【from http://www.onlyblog.com/blog/saobaolpsj/archives/2007/6526.html

  评论这张
 
阅读(1507)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017