魔鬼作坊吧 关注:349贴子:459
  • 0回复贴,共1

SetWindowsHookEx的用法大家看看

只看楼主收藏回复

大致思路是搞个钩子将WH_MOUSE截获 也可以截获WH_GetMOUSE 测试效果一样感觉还是WH_GetMOUSE效果好一点
要想搞全局的钩子那就必须放在DLL中
然后我们看看
SetWindowsHookEx这个函数
HHOOK SetWindowsHookEx(
int idHook,    // 待安装的勾子类型
HOOKPROC lpfn, // 回调函数地址 必须在DLL里边
HINSTANCE hMod, // 应用程序中包含回调函数lpfn的DLL句柄
DWORD dwThreadId //要安装勾子的线程,为0则是全局勾子,向所有线程注入
)
既然是鼠标钩子那我们就写
HHOOK hok; //全局变量
hok=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,GetModuleHandle(_T("HookDll")),NULL);// HOOK安装函数
if(!hok)
{
return FALSE;
} //如果注册失败返回FALSE
g_dwThread=dwThread;
return TRUE; //钩子注册成功返回TRUE
会调函数:
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
LRESULT lpesult=::CallNextHookEx(hok,nCode,wParam,lParam);
if (g_dwThread>0)
{
POINT pt;
static POINT ptold;
::GetCursorPos(&pt);
if (pt.x!=ptold.x || pt.y!=ptold.y)
{
::PostThreadMessage(g_dwThread,WM_MOUSE_ALL,0,MAKELPARAM(pt.x,pt.y));
ptold.x=pt.x;
ptold.y=pt.y;
}
}
return lpesult;
}


IP属地:江西1楼2017-10-14 21:41回复