Windows下C++通過hook捕捉鼠標
/*
- Make sure project type is windows application */
define _WIN32_WINNT 0x0500
include<windows.h>
include<cmath>
LRESULT CALLBACK mouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { // Get event information PMSLLHOOKSTRUCT p = (PMSLLHOOKSTRUCT) lParam;
bool eat = false;
// Screen resolution static float screen_cx = static_cast<float>( GetSystemMetrics(SM_CXSCREEN) ); static float screen_cy = static_cast<float>( GetSystemMetrics(SM_CYSCREEN) );
// Centre of screen static float screen_centre_x = screen_cx / 2.0f; static float screen_centre_y = screen_cy / 2.0f;
// Calculate distance away from centre of screen float dx = p->pt.x - screen_centre_x; float dy = p->pt.y - screen_centre_y;
float dist = sqrt(dx dx + dy dy);
// Check if cursor is more than 300px away from centre of screen if (dist > 300) { float angle = atan2(dy, dx);
// Trap cursor
SetCursorPos(
/* X */ int( screen_centre_x + cos(angle) * 300 ),
/* Y */ int( screen_centre_y + sin(angle) * 300 )
);
// Stop windows handling event
eat = true;
}
return (eat ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam)); }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
// Set mouse hook HHOOK mouseHook = SetWindowsHookEx( WH_MOUSE_LL, / Type of hook / mouseHookProc, / Hook process / hInstance, / Instance / NULL);
// Wait for user to exit
MessageBox(NULL, "Press OK to close.", "", MB_OK);
return 0;
}</pre>