我是个软件专业的大一新生,最近在做一个鼠标拦截的钩子,我用到了底层钩子,但是,钩子安装上去了却没有拦截,仅仅让鼠标的移动变慢了(是不是因为Windows的机制问题,看到一些教程上说如果反应时间太长久忽略),求高手解答!!!主程序调用安装钩子函数,然后延时1分钟后自动卸载钩子。
#define _WIN32_WINNT 0X0500
#include <windows.h>
#include <stdio.h>
#include "mouseh.h"
#define DllExport extern "C"__declspec(dllexport)HHOOK glhHook=NULL;
HHOOK glhHookend=NULL;
HINSTANCE glhInstance=NULL;
BOOL APIENTRY DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
         break;
case DLL_PROCESS_DETACH: break;
} glhInstance=(HINSTANCE)hInstance; return TRUE;
}
LRESULT WINAPI MouseProc(int nCod,WPARAM wparam,LPARAM lparam )
{
             return TRUE;

}
DllExport BOOL Starthook()
{
BOOL bResult=FALSE;
glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0);
if (glhHook!=NULL)
{
//MessageBox(NULL, "hook 安装成功咯 ", "傻冒 ",0);
bResult=TRUE;
} return bResult; }DllExport BOOL Stophook()
{
return UnhookWindowsHookEx(glhHook);
}

解决方案 »

  1.   

    你这是WH_MOUSE又不是WH_MOUSE_LL,WH_MOUSE_LL的钩子过程是不需要在dll中的
      

  2.   

    =。=
    打错了的确是WH_MOUSE_LL,这个是我测试不是底层钩子时候用到的
    WH_MOUSE_LL不需要在DLL中吗?它不是个全局钩子么?
      

  3.   

    WM_MOUSE的时候会屏蔽掉一部分的鼠标操作,WM_MOUSE_LL则会变成鼠标的缓慢移动,一直到钩子卸载
      

  4.   

    不是全局钩子都要在dll中,WH_MOUSE_LL就不需要,调用SetWindowsHookEx的线程需要有一个消息循环才能得到钩子被触发的通知,然后调用钩子过程,WH_MOUSE_LL的钩子过程是由调用SetWindowsHookEx的线程执行的
      

  5.   

    如果你调用SetWindowsHookEx的线程没有消息循环,MouseProc就根本不会执行,而windows却等它执行,因此很慢
      

  6.   

    也就是说,我需要在SetWindowsHookEx后加入一个消息循环。。但是,我看到网络上下载的源码或者是网上贴的教程都没有这一步啊可以给我个例子么?关于SetWindowsHookEx这段的
      

  7.   

    消息循环很简单
    MSG msg;
    while(GetMessageW(&msg,0,0,0)!=-1)DispatchMessageW(&msg);
    它们没加是因为它们的界面就有消息循环