自己写了个鼠标的全局DLL钩子,相关代码如下:
#include<windows.h>HINSTANCE m_hDLL;
HHOOK m_hhookDll;
HWND m_hWnd; //调用DLL的窗口句柄
MOUSEHOOKSTRUCT* mhookstruct;BOOL WINAPI DllMain(
  HINSTANCE hinstDLL,
  DWORD fdwReason,
  LPVOID lpvReserved
)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
m_hDLL = hinstDLL;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
UnhookWindowsHookEx(m_hhookDll);
}
return true;
}LRESULT CALLBACK MouseProc(int nCode,
    WPARAM wParam,
    LPARAM lParam
)
{
if(wParam == WM_MOUSEMOVE)
{
mhookstruct = (MOUSEHOOKSTRUCT*)lParam;
PostMessage(m_hWnd,WM_MOUSEMOVE,0,MAKELPARAM((mhookstruct->pt).x,(mhookstruct->pt).y ));
return 1; 
}
else
{
if(wParam == WM_LBUTTONDOWN )
{
mhookstruct = (MOUSEHOOKSTRUCT*)lParam;
PostMessage(m_hWnd,WM_LBUTTONDOWN ,0,MAKELPARAM(mhookstruct->pt.x,mhookstruct->pt.y));

return 1; 
}
}
return CallNextHookEx(m_hhookDll,nCode,wParam,lParam);
}
void _stdcall setHook(HWND hWnd)
{
m_hWnd = hWnd;
m_hhookDll = SetWindowsHookEx(WH_MOUSE,MouseProc,m_hDLL,0);
return;
}
再写个程序去获取的时候却只能在窗口之类获取到,出了本窗口就获取不到了...l

解决方案 »

  1.   

    用 SetWindowsHookEx(WH_MOUSE_LL...
      

  2.   

    我也是抓鼠标位置 用的 WH_GETMESSAGE 成功了 你试试吧
    同时关注你的问题-_-
      

  3.   

    用WH_MOUSE_LL的话鼠标会不动的...我用过
      

  4.   

    SetWindowsHookEx(WH_MOUSE_LL...
    然后SetCursorPos下,发现是可以的,但是为什么WH_MOUSE_LL可以而WH_MOUSEMOVE不行呢?
      

  5.   

    我的写法
    static LRESULT CALLBACK hookproc(UINT nCode, WPARAM wParam, LPARAM lParam)
    {
    if (nCode < 0)
    {
    // pass it on
    CallNextHookEx(hook, nCode, wParam, lParam);
    } LPMSG msg = (LPMSG)lParam;
    if (msg->message == WM_MOUSEMOVE || msg->message == WM_NCMOUSEMOVE || msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONUP)
    {
    unsigned long currentKeyMouseTime = timeGetTime();
    unsigned long difftime = currentKeyMouseTime - oldKeyMouseTime;
    if (difftime > 20) // up to 50 frames per second
    {
    HCURSOR hcur = GetCursor();
    PostMessage(hWndServer, WM_USER_SAVECURSOR_MSG, (unsigned int)hcur, msg->message);
    oldKeyMouseTime = currentKeyMouseTime;
    }
    } return CallNextHookEx(hook, nCode, wParam, lParam);
    }WM_USER_SAVECURSOR_MSG 是我自己注册消息