win32:使用 SetCursorPos 与 mouse_event 移动鼠标

Cla*_*diu 7 python winapi automation input

使用以下两种技术在窗口中移动鼠标有什么区别吗?

win32api.SetCursorPos((x,y))
Run Code Online (Sandbox Code Playgroud)

对比:

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

Windows 处理移动的方式是否有什么不同?

jay*_*lee 6

我相信这是mouse_event通过将事件插入鼠标输入流来实现的,只需SetCursorPos在屏幕上移动光标即可。我也不相信 SetCursorPos 会生成任何输入事件(尽管我可能是错的)。

实际含义是,当您使用 时SetCursorPos,它只是移动光标。当您使用 时mouse_event,它会将事件插入输入流中,这将为正在侦听的任何程序生成输入事件。这对于侦听较低级别鼠标事件而不仅仅是光标单击的程序有影响;例如游戏。另外,如果您用于mouse_event移动光标并打开光标/指针加速,则产生的鼠标运动应受到窗口正在使用的任何加速曲线的影响。