win32api 虚拟移动鼠标

2 投票
2 回答
7176 浏览
提问于 2025-04-17 20:51

我正在尝试用Python模拟一次鼠标点击。

我的代码如下:

class Mouse(object):

    def __init__(self):
        self.x_res = win32api.GetSystemMetrics(0)
        self.y_res = win32api.GetSystemMetrics(1)

    def rightClick(self, x, y):
        nx = x*65535/self.x_res
        ny = y*65535/self.y_res
        win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE|win32con.MOUSEEVENTF_MOVE,nx,ny)
        win32api.Sleep(200)
        win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE|win32con.MOUSEEVENTF_RIGHTDOWN,x,y,0,0)
        win32api.Sleep(200)
        win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE|win32con.MOUSEEVENTF_RIGHTUP,x,y,0,0)
        win32api.Sleep(700)

我这样使用这段代码:

mouse = Mouse()
win32api.Sleep(2000)
x = 2520
y = 414
mouse.leftClick(x, y)

但是这样会真的移动鼠标,这样会打扰到用户。有办法发送这个点击事件,但不让鼠标真的移动吗?

2 个回答

0

可以查看这个链接:多个鼠标/光标?,里面提到了Windows MultiPoint Mouse SDK。我觉得CPNMouse这个项目现在已经不存在了。

2

如果你坚持要假装输入来自动化这个操作,那你就会一直遇到现在的问题。当你假装输入时,系统会像处理真实输入一样来响应。虽然你可以把光标移回原来的位置,但用户会看到光标在那儿闪来闪去。这其实不是个好主意。

你需要的是一个不涉及假装输入的解决方案。当然,你没有详细说明问题,只提到了你的解决办法,所以我们只能猜测你的问题。看起来你是在尝试自动化某个外部应用程序。这个平台通过UIAutomation提供了对这方面的支持。

撰写回答