【问题标题】:win32api move mouse virtuallywin32api 虚拟移动鼠标
【发布时间】:2014-03-04 21:42:14
【问题描述】:

我正在尝试用 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)

但是,这会移动真正的鼠标,因此会打扰用户。它们是一种发送该事件但无需真正移动鼠标的方法吗?

【问题讨论】:

  • 我是唯一一个将“这会移动真正的鼠标”想象成用户手在鼠标上并且它会在鼠标垫上快速移动到不同位置的人吗?
  • 也就是说,我相信你只要记下原来的位置,移动光标,点击,再往回移动
  • Windows 中通常只有一只鼠标。所以我同意@mhlester。但也许您可以添加第二个鼠标。
  • 问题的真正问题在这里描述:stackoverflow.com/questions/22198792/…

标签: python winapi mouse simulation


【解决方案1】:

如果您坚持通过伪造输入来自动执行此操作,那么您将陷入当前的问题。当您伪造输入时,系统会像对待真实输入一样做出响应。您可以将光标移回其原始位置,但用户会看到它在左右移动。这真的不是一件好事。

您需要的是不涉及伪造输入的问题解决方案。当然,您没有详细说明问题,只是您的解决方案,所以我们必须猜测问题。看起来您正在尝试自动化某些外部应用程序。该平台通过 UIAutomation 提供支持。

【讨论】:

【解决方案2】:

参见Multiple mouse/mice/cursor?,它指的是Windows MultiPoint Mouse SDK。 CPNMouse 项目不再存在,AFAICT。

【讨论】:

  • 投反对票的人能解释一下原因吗?如果有两个鼠标光标,则可以根据需要移动一个以单击按钮,将用户的鼠标指针留在原处。因此,尽管其他答案可能更好,但我认为我的答案没有错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 2015-10-15
  • 1970-01-01
  • 2013-05-05
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多