-1

マウスの移動時に画面の一部を表示するコードがあります。しかし、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);
}
4

1 に答える 1

2

DLL なしで WH_MOUSE をグローバルに使用することは可能ですか?

いいえ、フック プロシージャは、他のプロセスに挿入できるように DLL 内にある必要があります。

WH_MOUSE_LL を試してみましたが、WH_MOUSE より遅いです。

これはおそらく、フック プロシージャが遅いことを意味します。

于 2012-09-03T22:18:23.123 に答える