首页
社区
课程
招聘
[旧帖] [求助]在dll中安装了钩子,dllmain退出后,钩子就失效,请大神指点 0.00雪花
发表于: 2013-8-7 00:56 1738

[旧帖] [求助]在dll中安装了钩子,dllmain退出后,钩子就失效,请大神指点 0.00雪花

2013-8-7 00:56
1738
CLogic* g_Logic=NULL;
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
        if(!g_Logic)
        {
                g_Logic = new CLogic();
        }
       
        switch (ul_reason_for_call)  
        {  
        case DLL_PROCESS_ATTACH:
                MessageBoxA(NULL,"1","~",MB_OK);
                g_Logic->InstallHookKeyBoard();
                break;  
        case DLL_THREAD_ATTACH:  
                MessageBoxA(NULL,"2","~",MB_OK);
                break;  
        case DLL_THREAD_DETACH:  
                MessageBoxA(NULL,"3","~",MB_OK);
                break;  
        case DLL_PROCESS_DETACH:  
                MessageBoxA(NULL,"4","~",MB_OK);
                if(g_Logic)
                {
                        delete g_Logic;
                        g_Logic = 0;
                }
                break;
        }

        return TRUE;
}

void CLogic::InstallHookKeyBoard()
{
        if(0==hKeyBoardHook)
                hKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD_LL ,(HOOKPROC)LowLevelKeyboardProc ,GetModuleHandle("vcdll.dll"),0);
        if(!hKeyBoardHook)
        {
                MessageBoxA(NULL,"键盘钩子安装失败","Err",MB_OK);
        }
        else
        {
                MessageBoxA(NULL,"键盘钩子安装成功","OK",MB_OK);
        }
}

//键盘消息
LRESULT CALLBACK LowLevelKeyboardProc(
        __in  int nCode,
        __in  WPARAM wParam,
        __in  LPARAM lParam
        )
{
        MessageBox(NULL,"aaaaaaaa","",MB_OK);

        return CallNextHookEx(g_Logic->hKeyBoardHook,nCode ,wParam ,lParam);
}

在dllmian未退出的时候,键盘输入可以捕获,如果dllmain一退出,就不行了,我是win7系统,谢谢了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 189
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我晕,还有这样安装钩子的,dllmain主线程执行完当然全退出了,一般的做法是在DLL_PROCESS_ATTACH里面创建线程,线程的执行体里面下钩,同时注意要在下钩后加个消息泵,就是消息循环了,防止线程退出同时拦截并处理消息。
2013-8-7 03:21
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,我试试
2013-8-7 17:58
0
游客
登录 | 注册 方可回帖
返回
//