您的位置:程序门 -> .net技术 -> c#



c# winform中怎么截获处理windows关闭的消息


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c# winform中怎么截获处理windows关闭的消息[已结贴,结贴人:qdzhaokun]
发表于:2007-01-08 13:16:21 楼主
c#   winform中怎么截获处理windows关闭的消息
有没有个专家给条名路?
发表于:2007-01-08 13:20:571楼 得分:0
是vs2005的环境吗?
发表于:2007-01-08 13:22:252楼 得分:5
如果是vs2005的话,可以用如下的事件,这个事件是系统关闭或注销的时候发生的:
microsoft.win32.systemevents.sessionending
发表于:2007-01-08 13:38:093楼 得分:15
在窗口程序里,可以用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);
}
发表于:2007-01-08 13:49:454楼 得分:15
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);
}
}
发表于:2007-01-08 14:40:465楼 得分:0
关注
发表于:2007-01-08 14:49:156楼 得分:5
如果你是要在窗口點關閉時,處理事情,那就可以在form_closing事件中寫代碼,取消關閉執行e.cancel   =   true;就可。
发表于:2007-01-08 15:12:277楼 得分:0
mark
发表于:2007-01-08 22:12:408楼 得分:0
我的意思是,程序没有关闭,但windows要关闭,类似work抓到windows关闭的消息,提示是否要保存那样的操作,正在试验hbxtlhx(平民百姓)   和tuyile006(小y)   的方法
发表于:2007-01-09 08:40:489楼 得分:0
类似word
发表于:2007-01-09 08:53:2010楼 得分:0
顶。
发表于:2007-01-09 09:16:4311楼 得分:0
form   针对关闭有两个事件:

1、closing   :在关闭窗体时发生。
2、closed   :   关闭窗体后发生。
   
lz可以看看msdn,上面有详细解释。
发表于:2007-01-09 09:25:0212楼 得分:0
hbxtlhx(平民百姓)   和tuyile006(小y)   的方法都对!
但你并不能阻止windows   关闭
发表于:2007-01-09 09:30:4913楼 得分:0
如下的代码就是了:
protected   override   void   wndproc(ref   message   m)
{
if   (m.msg   ==   0x11)//wm_queryendsession
{
m.result   =   (intptr)0;//0不关闭程序和系统;1关闭程序及系统
return;
}
else   if   (m.msg   ==   0x16)//wm_endsession
{
}
base.wndproc(ref   m);
}
另外,可以用closeing事件,事件里的参数e有个cancel,当e.cancel=true的时候也会不关闭程序及系统(或注销)
发表于:2007-01-09 12:15:3914楼 得分:0
wndproc并不能截获全局消息,只能截获发送给本窗口的消息
要想阻止windows关闭,只能使用api
发表于:2007-01-09 12:36:4815楼 得分:0
to:gxy2005(晓晨美眉好^_^)   (   )   信誉:91         blog  
---------------
要想阻止windows关闭,只能使用api?
这句话不对吧...
发表于:2007-01-09 15:48:4516楼 得分:10
平民百姓说得没错,很久以前我也回答了一位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:处添加代码就行了)
发表于:2007-01-09 16:13:2117楼 得分:0
严重同意楼上,楼上的楼上。(:
发表于:2007-01-09 16:57:0118楼 得分:0
搞定了,就是hbxtlhx(平民百姓)   和tuyile006(小y)   lovevsnet(编程一把手)     说的那样
我要做得就是在关机前处理稍微一下,保存一下数据,然后退出系统
发表于:2007-01-09 17:47:3819楼 得分:0
mark
发表于:2007-01-25 14:37:2620楼 得分:0
mark
发表于:2007-02-07 17:22:0321楼 得分:0
该回复于2007-12-21 20:35:46被管理员或版主删除
发表于:2007-12-10 14:01:5522楼 得分:0
mark


快速检索

最新资讯
热门点击