首页
社区
课程
招聘
收藏 如何挂钩任务管理器发出的强制结束的消息?实现自己程序处理这个消息。
发表于: 2012-11-19 17:17 5222

收藏 如何挂钩任务管理器发出的强制结束的消息?实现自己程序处理这个消息。

2012-11-19 17:17
5222
如何在自己的程序中设置一个api或者消息处理程序,当ctrl+alt+del弹出任务管理器后,别人强制结束你的程序,你的程序此时就象notepad一样,弹出一个窗口,询问是否要保存文件。而不是别人一强制结束你的程序,你的程序就没了。请问如何编写这个功能啊?甚至还有,我看见windows结束关机时,某些程序也是弹出窗口,询问你是否保存文件,如果你选择否,不退出,那么这个程序可以通知windows,不要结束系统了,继续工作。这个程序的功能真强啊,还可以把windows退出系统,结束关机的消息给打回去。请问这个功能是如何实现的?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 677
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
任务管理器是native结束,推荐研究r3 阻止结束进程
2012-11-19 19:39
0
雪    币: 235
活跃值: (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
晕,好好了解下windows编程吧,关机时系统发消息询问,这个你俩还在。。。。
2012-11-19 20:13
0
雪    币: 7673
活跃值: (5497)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
禁止用户管理器结束进程,网上有使用钩子的例子,如下:
http://wenku.baidu.com/view/b23f1e671ed9ad51f01df20e.html

主要是通过HOOK鼠标消息,当用户点击立即结束进程按钮后返回0,不处理鼠标消息使其失效。

如果是HOOKAPI  ,那么可以HOOK OpenProcess函数,判断OpenProcess参数中的进程ID是指定进程ID就直接返回NULL就行了。APIHOOK具体实现如下:
http://wenku.baidu.com/view/d62479791711cc7931b71637.html

如果是禁止系统关机,可以创建窗口响应WM_QUERYENDSESSION消息,当接收到WM_QUERYENDSESSION消息后直接返回FALSE就可以禁止关机了,当然,特殊关机手法除外(如,拔电源,结束winlogon.exe等..)
具体实现如下:
创建MFC工程,建立类向导,把classinfo中的Message Filter改为window


然后在Message Maps找到WM_QUERYENDSESSION消息并添加响应函数OnQueryEndSession


最后把OnQueryEndSession返回值改成FALSE即可,你可以在OnQueryEndSession中处理你需要做的事情。
上传的附件:
2012-11-20 11:16
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,这正是我要了解的。
2012-11-20 18:31
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还有一个问题啊,比如系统要结束我的进程,就象notepad吧,如果你要结束notepad ,它就会弹出窗口,询问你是否要保存文件。这个功能怎么实现啊?
2012-11-20 18:33
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
把OnClose映射出来就是这个效果了.
2012-11-20 19:27
0
雪    币: 7673
活跃值: (5497)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
添加WM_CLOSE消息,方法跟添加WM_QUERYENDSESSION一样。

消息框类型是MB_OKCANCEL的话会有确定--取消按钮,点击确定程序退出,取消则不退出,代码如下:
void CInlineHookDlg::OnClose()
{
        // TODO: Add your message handler code here and/or call default
        if (IDOK==MessageBox("程序退出,是否保存文件?","提示",MB_OKCANCEL))
                CDialog::OnClose();
}
2012-11-20 20:54
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我知道了。我的主窗口底下又生成了一个子对话框,我的主窗口早就添加了WM_CLOSE消息响应,在只有主窗口没有子对话框弹出的情况下,可以正确响应WM_CLOSE消息,但弹出了子对话框的情况下,如果ctrl+alt+del结束程序,则显示“我的程序没有响应”,怎么办?
2012-11-21 11:46
0
游客
登录 | 注册 方可回帖
返回
//