-1
我有一個代碼來顯示鼠標移動時的一部分屏幕。但WH_MOUSE不起作用。我需要將GetModuleHandle(0), 0
更改爲hInst, GetCurrentThreadId()
。在沒有DLL的情況下全局使用WH_MOUSE
但是,只有當鼠標懸停在應用程序本身上時,應用程序才能工作。
我希望它是全球性的,我試過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);
}
是的,因爲GetDIBits每次移動鼠標時都會捕獲屏幕並將其打印到我的窗口中。你知道另一種方法來有效地完成這樣的任務嗎? – user565739
@ user565739:你不應該直接在你的鉤子程序中這樣做。您可以在掛鉤程序中設置一個標誌,然後在窗口中有一個計時器來檢查標誌並捕獲屏幕。事實上,如果你使用計時器,你甚至可能不需要掛鉤 - 你可以簡單地檢查鼠標是否從前一個位置移開。 – casablanca