2010-09-15 233 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