我在尝试让 WarpPointer 适合我的工作时遇到了一些麻烦。我正在尝试做的场景类似于记录用户的点击,然后在屏幕上重放它们。我已经能够毫无问题地记录屏幕动作和点击;但是,在重放用户录制的内容时,我遇到了困难。
def MoveCursorAndClick(self, e):
# get the current screen position
sp = self.GetPosition()
p = self.getNextPosition() # returned in absolute x,y from screen rec
self.WarpPointer(p.x - sp[0], p.y - sp[1])
# wx.PostEvent(EVT_LEFT_DOWN, self.GetId())
显然,上面的代码是不正确的,因为 WarpPointer 似乎只在窗口内工作,而不是全屏。尝试将坐标从功能窗口移开也被证明是很麻烦的,因为它们似乎总是在 Y 方向上偏离大约 50 像素。我目前唯一的假设是我让这变得比它需要的更难,而且由于我对 wxpython 缺乏经验,我没有看到更好的原因。
此外,破坏的 PostEvent 行是我设法通过谷歌搜索的唯一东西,看起来像是将鼠标点击发送到可能是也可能不是另一个窗口的东西的正确方法。这甚至是正确的方向吗?
更新 如下所述,没有一个很好的跨平台方式来实现这一点。这是我所做的(在互联网上找到了不同的地方):
def ClickScreenPositon(self, x, y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)