关于notifyicon的问题。解决问题马上给分

commandos 2007-07-03 01:33:24
一个winform程序里用到了notifyicon 。现在发现,系统关机是无法关闭了。到了这个程序就会卡住。
重载了WinProc函数。处理WM_QUERYENDSESSION消息。
protected override void WndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
//系统退出消息处理
case WM_QUERYENDSESSION:
Application.Exit();
break;
default:
break;
}
base.WndProc (ref m);
}
现在的情况是。关机时程序能够自己退出。但是还会卡住。后面的程序都不会自己关闭了。。好像是收不到WM_QUERYENDSESSION消息了。。
那位知道这是怎么回事?麻烦告诉一下。谢谢了。。。
...全文
236 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovingkiss 2007-07-03
  • 打赏
  • 举报
回复
又来晚了;

确实这样,前些天我也遇到了同样的问题;
我在关闭里面判断ToClosed = true是否真的需要关闭

C#
protected override void WndProc(ref Message m)
{
//获取系统消息:系统级别关闭为17
if ((m.Msg == 17))
{
//如果不处理,将会造成系统无法注销重启等操作!
ToClosed = true;
Application.Exit();
}
base.WndProc(m);
}

VB
Protected Overrides Sub WndProc(ByRef m As Message)
'获取系统消息:系统级别关闭为17
If (m.Msg = 17) Then
'如果不处理,将会造成系统无法注销重启等操作!
ToClosed = True
Application.Exit()
End If
MyBase.WndProc(m)
End Sub

===========================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明:<我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q66840199(请注明业务/技术咨询)
===========================================================
commandos 2007-07-03
  • 打赏
  • 举报
回复
谢谢楼上2位大虾。。现在就试试。。
北京的雾霾天 2007-07-03
  • 打赏
  • 举报
回复
在你的代码逻辑中当系统询问是否关闭的时候,你不管"3721"就把程序狠狠的给退出了:
case WM_QUERYENDSESSION:
Application.Exit();
break;

这是不应该的.

你一定要响应系统的询问并返回系统一个答案才可以.
北京的雾霾天 2007-07-03
  • 打赏
  • 举报
回复
WM_QUERYENDSESSION是询问程序是否需要关闭,你一定要有相应的反回值,参考一下下面的代码:


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);
}

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧