2010-09-15 77 views
3

使用以下兩種技術在Windows中移動鼠標有什麼區別?win32:移動鼠標與SetCursorPos與mouse_event

win32api.SetCursorPos((x,y)) 

VS:

nx = x*65535/win32api.GetSystemMetrics(0) 
ny = y*65535/win32api.GetSystemMetrics(1) 
win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE|win32con.MOUSEEVENTF_MOVE,nx,ny) 

做任何事情在Windows處理運動的方式發生變化?

回答

4

我相信,mouse_event通過插入事件到鼠標輸入流的作品,因爲SetCursorPos只是在屏幕上移動光標。我不相信SetCursorPos也會產生任何輸入事件(雖然我可能是錯的)。

實際的影響是,當你使用SetCursorPos時,它只是移動光標。在使用mouse_event時,它會將事件插入到輸入流中,從而爲正在監聽的任何程序生成輸入事件。這對偵聽低級別鼠標事件而非僅光標點擊的程序有影響;比如遊戲。另外,如果您使用mouse_event來移動光標,並且光標/指針加速度已打開,則所產生的鼠標移動應受制於窗口正在使用的任何加速度曲線。

+0

另一個不同之處在於SetCursorPos用於將鼠標位置設置爲第二個監視器,而SendInput/mouse_event上的絕對定位僅限於主顯示器。 – 2011-08-09 00:46:06