钩子没有反应啊,代码如下啊:
#include "windows.h"
#include "stdio.h"#pragma data_seg("hookdata")
HHOOK oldkeyhook=NULL;   //钩子句柄
HINSTANCE hInst=NULL;   //dll模块的实例句柄
#pragma data_seg()
#pragma comment(linker,"/SECTION:hookdata,RWS")
static HMODULE ModuleFromAddress(PVOID pv) 
{
MEMORY_BASIC_INFORMATION mbi;
if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
{
return (HMODULE)mbi.AllocationBase;
}
else
{
return NULL;
}
}
//鼠标钩子函数LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    LPMOUSEHOOKSTRUCT  pMouseHook=(MOUSEHOOKSTRUCT *) lParam; int x,y;
char ch1[5],ch2[5];
if(nCode==HC_ACTION&&wParam==WM_LBUTTONDOWN)
{
 
POINT pt = pMouseHook->pt;
    
x=pt.x; y=pt.y;
itoa(x,ch1,5);      itoa(y,ch2,5);
   
        ::MessageBox(NULL,ch1,ch2,MB_OK); return TRUE;
               
}
   
   return ::CallNextHookEx(oldkeyhook, nCode, wParam, lParam);
}
_declspec(dllexport) void InstallHook()
{ hInst=ModuleFromAddress(MouseHookProc);if(hInst==NULL) 
{
::MessageBox(NULL,"获取模块错误","警告",MB_OK);
return;
}if(oldkeyhook==NULL) oldkeyhook = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst,0);if(oldkeyhook) ::MessageBox(NULL,"安装钩子成功了!","",MB_OK);
}
_declspec(dllexport) void EndHook(void)
{if(oldkeyhook!=NULL) 
{
UnhookWindowsHookEx(oldkeyhook);
oldkeyhook=NULL;}
}

解决方案 »

  1.   

    if(nCode==HC_ACTION&&wParam==WM_LBUTTONDOWN)
    {
     
    POINT pt = pMouseHook->pt;
        
    x=pt.x;y=pt.y;
    itoa(x,ch1,5);  itoa(y,ch2,5);
        
      ::MessageBox(NULL,ch1,ch2,MB_OK);return TRUE;
        
    }
        这几句代码正确啊,为什么没有反应啊?
      

  2.   

    if(wParam==WM_LBUTTONDOWN)
    {
     
    POINT pt = pMouseHook->pt;
        
    x=pt.x;y=pt.y;
    itoa(x,ch1,5);  itoa(y,ch2,5);
        
      ::MessageBox(NULL,ch1,ch2,MB_OK);return TRUE;
        
    }
      

  3.   

    你好啊,问一下,为什么 要改成这一句:if(wParam==WM_LBUTTONDOWN)   ??
      

  4.   

    还有,我把那个  nCode==wParam 去掉之后,还是没有反应啊 ??这是为什么啊
      

  5.   

    代码就不看了,你先调试下看有没有进你循环。若不行,打印WPARAM 看看
      

  6.   

    我不是很会调试dll
    只能进入接口函数,对于钩子处理函数进步了啊?帮忙看一下 谢谢了啊 
      

  7.   

    还有一个问题:GetModuleHandle(xxx) 这个函数无法返回 dll的句柄,这是为什么啊??我以前写的钩子代码就是用这个 函数来获得的,前几天还正确,可是今天却错误了高手别嫌我烦 ,帮忙解决一下,不胜感激
      

  8.   

    没有进入钩子函数啊
    #include "windows.h"
    #include "stdio.h"#pragma data_seg("hookdata")
    HHOOK oldkeyhook=NULL;   //钩子句柄
    HINSTANCE hInst=NULL;   //dll模块的实例句柄
    #pragma data_seg()
    #pragma comment(linker,"/SECTION:hookdata,RWS")
    static HMODULE ModuleFromAddress(PVOID pv) 
    {
    MEMORY_BASIC_INFORMATION mbi;
    if(::VirtualQuery(pv, &mbi, sizeof(mbi)) != 0)
    {
    return (HMODULE)mbi.AllocationBase;
    }
    else
    {
    return NULL;
    }
    }
    //鼠标钩子函数LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        LPMOUSEHOOKSTRUCT  pMouseHook=(MOUSEHOOKSTRUCT *) lParam; int x,y;
    char ch1[5],ch2[5];/*
    if(wParam==WM_LBUTTONDOWN)
    {
     
    POINT pt = pMouseHook->pt;
        
    x=pt.x; y=pt.y;
    itoa(x,ch1,5);      itoa(y,ch2,5);
       
            ::MessageBox(NULL,ch1,ch2,MB_OK); return TRUE;
                   
    }
       */  char ch3[20];   itoa(wParam,ch3,20);   ::MessageBox(NULL,ch3,"",MB_OK);   return ::CallNextHookEx(oldkeyhook, nCode, wParam, lParam);
    }
    _declspec(dllexport) void InstallHook()
    { hInst=ModuleFromAddress(MouseHookProc);if(hInst==NULL) 
    {
    ::MessageBox(NULL,"获取模块错误","警告",MB_OK);
    return;
    }if(oldkeyhook==NULL) oldkeyhook = ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst,0);if(oldkeyhook) ::MessageBox(NULL,"安装钩子成功了!","",MB_OK);
    }
    _declspec(dllexport) void EndHook(void)
    {if(oldkeyhook!=NULL) 
    {
    UnhookWindowsHookEx(oldkeyhook);
    oldkeyhook=NULL;}
    }//入口函数,可以直接复制该代码
    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;
    }
      

  9.   

    是的 用GetModuleHandle返回是NULL
    我又换了个办法来获得正确的模块的句柄但是问题又来了  无法进入钩子函数 MouseHookProc  要不你亲自测试一下啊 ,谢谢了a
      

  10.   

    是怎么无法进入钩子函数,hhk=null还是其他问题
      

  11.   

    hhk!=NULL
    如果等于null  ,会提示 安装钩子失败!!!
      

  12.   

    BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, PVOID fImpLoad) 
    {
    if (fdwReason == DLL_PROCESS_ATTACH) 
    {
    hInst=hInstDll;
    }
       return(TRUE);
    }
     ::SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseHookProc,hInst,0);
    我上面的回答很不负责任,楼主的问题应该是 hInst 无效钩子没安装成功吧。在DLLMAIN里 获得DLL模块句柄就可以实现楼主的功能。