CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

如何在Form的Closing事件中判断是程序关闭还是系统关闭?

楼主liuyuan_zy(网络蚂蚁)2005-12-12 02:09:55 在 .NET技术 / VB.NET 提问

如果是系统关闭,我就不阻止Closing事件,如果是手工关闭,则需要阻止Closing事件.  
  现在我的问题是如何判断这个关闭事件是由谁引起的?  
   
  谢谢~~~~ 问题点数:20、回复次数:10Top

1 楼SqlDataAdapter(咸蛋超人)回复于 2005-12-12 08:59:49 得分 0

应该实现不了,系统关闭和程序关闭也是向窗口发送关闭窗口的消息,窗口接收消息进行处理。  
  Top

2 楼software_lin(田野)回复于 2005-12-12 10:03:14 得分 0

加个全局变量区分一下。Top

3 楼CloneCenter(复制中心)回复于 2005-12-12 10:14:46 得分 0

应该是区分不了的,可以自己用自己的程序关闭系统啊。Top

4 楼wuyazhe(wyz&xyl)回复于 2005-12-12 11:03:33 得分 0

关闭windows的时候。回发送给当前每个进程WM_QUERYENDSESSION消息,都返回True,才会关闭windows。你可以拦截这个消息。Top

5 楼sz_lgp(longguoping)回复于 2005-12-12 11:03:38 得分 0

form.closing只对form有效,对程序和系统要分开对待。Top

6 楼wuyazhe(wyz&xyl)回复于 2005-12-12 11:04:58 得分 0

如果上面消息被用户返回True,允许了。还可以拦截  
  WM_ENDSESSION  
  用来写保存的代码。保存后回退出系统。Top

7 楼wuyazhe(wyz&xyl)回复于 2005-12-12 11:38:31 得分 0

程序里加入这个  
   
  public   const   WM_QUERYENDSESSION   as   integer   =     &H11  
  protected   overrides   Sub   WndProc(byref   m   as   Message)  
  {  
  if   m.Msg   ==   WM_QUERYENDSESSION   then  
  MessageBox.Show("Catch   it.")  
  m.Result   =   new   IntPtr(0)  
  else  
  mybase.WndProc   (ref   m);  
  end   if  
  }Top

8 楼wuyazhe(wyz&xyl)回复于 2005-12-12 11:39:16 得分 20

public   const   WM_QUERYENDSESSION   as   integer   =     &H11  
  protected   overrides   Sub   WndProc(byref   m   as   Message)  
  if   m.Msg   ==   WM_QUERYENDSESSION   then  
  MessageBox.Show("Catch   it.")  
  m.Result   =   new   IntPtr(0)  
  else  
  mybase.WndProc   (ref   m);  
  end   if  
  end   subTop

9 楼liuyuan_zy(网络蚂蚁)回复于 2005-12-12 15:47:42 得分 0

多谢多谢,昨天我用了这个方法,苦于没有找到这个消息值,现在被你直接给出来了,我一下就解决了,呵呵,多谢,顺便把我按照你的方法修改过后的代码附上,供大家参考一下:  
   
  ----------------------------------------------------------------------  
          Dim   blnSystemClose   As   Boolean   =   False  
   
          Protected   Overrides   Sub   WndProc(ByRef   m   As   Message)  
                  If   m.Msg   =   &H11   Then   blnSystemClose   =   True  
                  MyBase.WndProc(m)  
          End   Sub  
   
          Private   Sub   Form1_Closing(ByVal   sender   As   Object,   ByVal   e   As   _  
                                    System.ComponentModel.CancelEventArgs)   Handles   MyBase.Closing  
                  If   Not   blnSystemClose   Then  
                          MessageBox.Show("本系统不允许关闭")  
                          e.Cancel   =   True  
                  End   If  
          End   Sub  
  ----------------------------------------------------------------------  
  Top

10 楼liuyuan_zy(网络蚂蚁)回复于 2005-12-12 15:54:17 得分 0

wuyazhe(我的宝贝叫阿刺)   ,能给我你的QQ号吗?以后有问题的话可能还需要向你请教哦,谢谢.  
  我的QQ号是10531292Top

相关问题

  • 如何在程序中判断一个FORM在运行时有没有被关闭或隐藏
  • 如何判断应用程序是否关闭?
  • 怎样判断form已关闭?
  • MDI程序,主窗口如何判断所有的子窗口已关闭?
  • 如何判断另一个程序是否已经关闭?只能用OnTimer检测判断吗?
  • 如何在程序里判断别外一个程序是否运行,并关闭它。谢谢各位!
  • 如何隐藏线程不让其显示在“关闭程序”中和如何判断程序已经运行。
  • 怎样判断程序已经运行?为什么我把程序关闭后,在进程里却没有关闭?
  • 程序A.exe自己如何判断用户10分钟没有操作程序A.exe(一直在动Word),将程序A.exe关闭
  • 如何判断Windows是否启动了“活动桌面“,并在程序里启动或关闭它???

关键词

  • 系统
  • 消息
  • 关闭
  • queryendsession
  • h11
  • 程序
  • wndproc
  • 事件
  • 多谢
  • wm

得分解答快速导航

  • 帖主:liuyuan_zy
  • wuyazhe

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo