如何得知系统需要关机,先完成我的任务后再继续操作???

westhod 2008-07-04 02:11:36
假如用户关闭、重启或者注销系统,我的应用程序需要捕获这个消息,然后阻止系统立即关闭、重启或者注销,然后我的程序将数据上传到服务器,再继续关闭、重启或者注销系统。
OnQueryEndSession()函数能获得通知,只要我返回false系统将不会立即结束我的进程,但我该怎么做,才能实现我所说的,在完成了数据上传后,如何继续系统的操作呢?我如何得知用户是要关闭还是注销系统。
...全文
140 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-07-04
  • 打赏
  • 举报
回复
改成响应WM_ENDSESSION消息来处理。
westhod 2008-07-04
  • 打赏
  • 举报
回复
就是系统会弹出一个应用程序无响应,是否立即结束的对话框,这点不爽。
但似乎也能满足我程序的要求了。
孤客天涯 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jason_wentzel 的回复:]
在CMainFrame中增加WM_QUERYENDSESSION的响应函数OnqueryEndssion
[/Quote]
if(lEndReason == ENDSESSION_LOGOFF)
{
// 发送一个消息给主线程,处理你要处理的事情,然后根据lEndReason的值再发消息给操作系统,完成操作系统关闭或注销操作
return false;
}
hyblusea 2008-07-04
  • 打赏
  • 举报
回复
系统会发送WM_QUERYENDSESSION给每一个进程.此时返回FALSE.
系统还会发送WM_ENDSESSION给每一个进程.参数wParam是再可以正常结束进程.
cnzdgs 2008-07-04
  • 打赏
  • 举报
回复
响应WM_QUERYENDSESSION消息,lParam参数如果是ENDSESSION_LOGOFF表示注销,如果0表示关机或重启动。在响应消息时先做自己的处理,处理完后再返回。
wltg2001 2008-07-04
  • 打赏
  • 举报
回复
我如何得知用户是要关闭还是注销系统。
===============================
在系统关闭时会向所有进程发送WM_QUERYENDSESSION消息,其中参数lParam中有关机选项,可以知道到底是关机还是注销.
westhod 2008-07-04
  • 打赏
  • 举报
回复
如你所说的增加WM_QUERYENDSESSION的响应函数OnqueryEndssion,如果函数不立即返回,系统会弹出程序无响应,询问是否立即结束的对话框。
孤客天涯 2008-07-04
  • 打赏
  • 举报
回复
在CMainFrame中增加WM_QUERYENDSESSION的响应函数OnqueryEndssion
westhod 2008-07-04
  • 打赏
  • 举报
回复
to jason_wentzel:
如何得到lEndReason,还有,OnQueryEndSession的函数原型是哪个
我上面所说的是afx_msg BOOL OnQueryEndSession()
孤客天涯 2008-07-04
  • 打赏
  • 举报
回复
在OnQueryEndSession函数中处理
//根据lEndReason的值判断是关闭还是其它.
if(lEndReason == ENDSESSION_LOGOFF)
{
//完成你的操作后再重发相应的命令给操作系统,让其退出,关闭或注销
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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