首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

全局键盘钩子有关问题

2012-11-11 
全局键盘钩子问题今天写了一个全局键盘钩子,但是在别的程序里面打字,这个钩子失灵了,问问原因下面是DLL文

全局键盘钩子问题
今天写了一个全局键盘钩子,但是在别的程序里面打字,这个钩子失灵了,问问原因

下面是DLL文件的代码

C/C++ code
#include "hookkey.h"#pragma code_seg("code")HWND phmain = NULL ;HHOOK g_keyhook = NULL ;HHOOK g_mousehook = NULL ;#pragma code_seg()#pragma comment(linker , "/SECTION:code,RWS")BOOL APIENTRY DllMain( HANDLE hModule,                        DWORD  ul_reason_for_call,                        LPVOID lpReserved                     ){//     switch (ul_reason_for_call)//     {//         case DLL_PROCESS_ATTACH://         case DLL_THREAD_ATTACH://         case DLL_THREAD_DETACH://         case DLL_PROCESS_DETACH://             break;//     }    return TRUE;}LRESULT CALLBACK KeyboardProc(  int code,       // hook code                              WPARAM wParam,  // virtual-key code                              LPARAM lParam   // keystroke-message information                              ){    if (code <0 ||code== HC_NOREMOVE )    {        return CallNextHookEx(g_keyhook , code , wParam ,lParam);    }        if (code & 0x40000000) //消息重复就交给下一个HOOK链    {        return CallNextHookEx(g_keyhook , code , wParam , lParam );    }    PostMessage( phmain , WM_KEY , wParam , lParam );    return CallNextHookEx(g_keyhook , code , wParam,lParam );}LRESULT CALLBACK MouseProc(  int nCode,      // hook code                           WPARAM wParam,  // message identifier                            LPARAM lParam   // mouse coordinates                           ){    return 1;}HOOKKEY_API void sethook(int instal , HWND mhwnd  ){    if (instal == 1)    {        phmain = mhwnd ;        g_keyhook =SetWindowsHookEx(WH_KEYBOARD ,KeyboardProc , GetModuleHandle("hookkey") , 0  );    }    else    {        UnhookWindowsHookEx(g_keyhook);    }}HOOKKEY_API void setsss(int instal , HWND mhwnd  ){    if (instal == 1)    {        phmain = mhwnd ;        g_mousehook =SetWindowsHookEx(WH_MOUSE ,MouseProc , GetModuleHandle("hookkey") , 0  );    }    else    {        UnhookWindowsHookEx(g_mousehook);    }}




下面是mfc里面的代码

WM_KEY是自定义的消息,m_code是idet控件变量。

C/C++ code
    char szkey[80];    GetKeyNameText(lParam, szkey , 80);    m_code += szkey ;    m_code += "\r\n" ;    UpdateData(false);



求大神解释

[解决办法]
大概看了一下不知道对不对:在处理键盘消息的时候,你是像当前窗口发送WM_KEY消息,而其它程序如果作为当前窗口并没有处理屏蔽这个消息,所以屏蔽不了。而鼠标的消息是直接就屏蔽的,所以其它程序应该可以屏蔽掉鼠标消息吧?
[解决办法]
添加相应的消息映射

热点排行