Windows下C++通過hook捕捉鼠標

mx3y 9年前發布 | 1K 次閱讀 C/C++

/*

  • 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>

 本文由用戶 mx3y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!