首页
社区
课程
招聘
使用全局SetWindowsHookEx的WH_GETMESSAGE能HOOK到系统关机消息吗?
发表于: 2011-4-12 08:23 10054

使用全局SetWindowsHookEx的WH_GETMESSAGE能HOOK到系统关机消息吗?

2011-4-12 08:23
10054
最近学习SetWindowsHookEx 在DLL中全局HOOK键盘鼠标已经成功,现在想完成一个功能

就是在Windows关机或重启时先得到广播的WM_QUERYENDSESSION 消息,处理好自己的

工作后再让机子正常关机或重启。

但我把键盘HOOK的功能改成 WH_GETMESSAGE 但去HOOK不到WM_QUERYENDSESSION

源码如下DLL里的,请高手帮助指点下,谢谢了!!

#include "windows.h"

HHOOK g_hMsgProc;
HWND g_hWnd;

LRESULT CALLBACK GetMsgProc(
                                                        int code,       // hook code
                                                        WPARAM wParam,  // removal option
                                                        LPARAM lParam   // message
                                                        )
{
        MSG *lpMsg;
        lpMsg = (MSG*)lParam;
        if(lpMsg->message==WM_QUERYENDSESSION)
        {
                MessageBox(NULL,"Exit!","!!!!!!!!",0);
                SendMessage(g_hWnd,WM_CLOSE,0,0);
                UnhookWindowsHookEx(g_hMsgProc);
                return CallNextHookEx(g_hMsgProc,code,wParam,lParam);
        }
        return CallNextHookEx(g_hMsgProc,code,wParam,lParam);       
}

/*LRESULT CALLBACK KeyboardProc(
                                                          int code,       // hook code
                                                          WPARAM wParam,  // virtual-key code
                                                          LPARAM lParam   // keystroke-message information
                                                          )
{
        if(VK_F2==wParam) //只有按F2可以退出
        {
                SendMessage(g_hWnd,WM_CLOSE,0,0);
                UnhookWindowsHookEx(g_hMouse);
                UnhookWindowsHookEx(g_hKeyboard);
        }
        return 1;//危险!!
}

LRESULT CALLBACK MouseProc(
                                                   int nCode,      // hook code
                                                   WPARAM wParam,  // message identifier
                                                   LPARAM lParam   // mouse coordinates
                                                   )
{
        return 1;
}*/

void SetHook(HWND hWnd)
{
        g_hWnd=hWnd;
        //g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
        //g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
        g_hMsgProc=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,GetModuleHandle("Hook"),0);

}

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 165
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
表示关注,然后找资料去
2011-4-12 09:13
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
表示关注,同时想:要是知道了程序退出顺序,在杀毒软件退出后再安装小马,是否可小过主动防御?
2011-4-12 09:56
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵,没想那么深,毕竟关机或重启时间不能太长,只能干一些很快的事情,要不机主也怀疑了

问题我自己解决了,不是用WH_GETMESSAGE,而是用WH_CALLWNDPROC这个来HOOK

就OK了。谢谢大家
2011-4-12 10:18
0
雪    币: 74
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不需要hook,你在自己的程序中处理一下 WM_QUERYENDSESSION 就可以了

几行代码就可以搞定,可以参考这里:http://blog.csdn.net/skyxie/archive/2009/06/09/4255767.aspx
2011-4-12 10:25
0
游客
登录 | 注册 方可回帖
返回
//