在没有DLL的情况下全局使用WH_MOUSE

时间:2012-09-03 20:19:14

标签: c winapi hook mouseevent mousemove

我有一个代码可以在鼠标移动时显示部分屏幕。但是WH_MOUSE并不起作用。我需要将GetModuleHandle(0), 0更改为hInst, GetCurrentThreadId()

但是只有当鼠标悬停在应用程序本身上时,应用程序才会起作用。

我希望它是全局的,我尝试了WH_MOUSE_LL,它比WH_MOUSE慢。

是否可以在没有DLL的情况下全局使用WH_MOUSE?

void SetHook()
{
    gMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, GetModuleHandle(0), 0);
}   

//================================================================================
// Mouse Hook

static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode < 0) {
    return CallNextHookEx(gMouseHook, nCode, wParam, lParam);
    }

    if (wParam == WM_MOUSEMOVE) {

    MOUSEHOOKSTRUCT *mouseInfo = (MOUSEHOOKSTRUCT*)lParam;

    int x = mouseInfo->pt.x;
    int y = mouseInfo->pt.y;

    PrintScreen(x, y);
    }

    return CallNextHookEx(gMouseHook, nCode, wParam, lParam);
}

1 个答案:

答案 0 :(得分:2)

  

是否可以在没有DLL的情况下全局使用WH_MOUSE?

不,钩子程序需要在DLL中,以便可以将其注入其他进程。

  

我尝试过WH_MOUSE_LL,它比WH_MOUSE慢。

这可能意味着你的钩子程序很慢。