先谢谢各位了。这是DLL的代码,用于全局消息钩子的,exe文件就是LoadLibrary加载这个DLL,然后GetProcAddress得到installhook()函数的地址,再调用。我跟踪下去,到SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC) KeyboardProc,hModDLL,0)这个函数时总是报错,failed with error 18,找不到更多的文件。哪位高手帮忙解释一下啊#include <windows.h>#pragma data_seg(".SHARDAT")
static HHOOK hkb=NULL;
#pragma data_seg()HINSTANCE hModDLL;
LRESULT  CALLBACK  KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);BOOL APIENTRY DllMain( HMODULE hModule,
  DWORD  ul_reason_for_call,
  LPVOID lpReserved
  )
{
hModDLL = (HMODULE)hModule;//把此DLL加载到的基址保存起来 switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}extern "C" __declspec(dllexport) BOOL installhook()
{hkb=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC) KeyboardProc,hModDLL,0);//安装全局消息钩子
if(NULL==hkb)
{
    ErrorExit("SetWindowsHookEx");
}return TRUE;
}
BOOL __declspec(dllexport)  UnHook()
    {
    
     BOOL unhooked = UnhookWindowsHookEx(hkb);
   // MessageBox(0,"exit","sasa",MB_OK);
     return unhooked;
} LRESULT CALLBACK  KeyboardProc(
                            int nCode, 
                           WPARAM wParam, 
                            LPARAM lParam)
{
    //if(nCode<0)
return  CallNextHookEx(hkb,nCode,wParam,lParam);}

解决方案 »

  1.   

    代码没问题,就是告诉你钩子安装失败了.ErrorExit的效果
      

  2.   

    我按你的代码写了工程,没有任何错误,代码全是你的.你自己下去看有没有什么区别
    http://www.brsbox.com/filebox/down/fc/bfbe4f2c9e27dcb4e0f793ae62fb368c我这边没有任何错误
      

  3.   

    哪位看下我的代码啊
    http://www.brsbox.com/filebox/uploadcomplete/randstr/y9bB1r6L82511Y4YJg5D1684Y0/fgid/0fc98737a15ed2326da58c0864a22f54/dirids/
    不知道哪里错了?