如何使鼠标相对于其最后一个位置移动

问题描述

我有标签和 (x,y) 坐标,我想基于这些来控制基本的鼠标操作。到目前为止,我可以执行移动鼠标,单击(鼠标左键),双击和右键单击等操作。 我面临的问题是光标移动到绝对位置,但我想让它从最后一个位置移动。 这是函数

import mouse as m
def OperateMouse(mX,mY,sW,sH,classLabl):

    if classLabl == "Close":
        print("Close Sign Detected... Exiting")
        return False
    if classLabl == "Move":
        #mX = sW + ((mX - (sW/2))*sW/(sW/2)-(sH/2))
        m.move(mX,mY)
    elif classLabl == "SC":
        m.click(button='left')
    elif classLabl == "T_DC":
        m.double_click(button='left')
    elif classLabl == "RC":
        m.right_click()

这里,mX 和 mY 是我从屏幕大小的一半的输出窗口获得的坐标,sW 和 sH 是屏幕宽度和高度。 在使用鼠标之前,我也尝试过 pyautogui

这是我尝试的修改

lX,lY = pyautogui.position()
print("Last Pos:",lX,lY)
print("Curnt Pos:",mX,mY)
print("Diff = ",mX-lX,mY-lY)
nX,nY = mX-lX,mY-lY
mX,mY = mX+nX,mY+nY
#m.move(mX-lX,mY-lY)
try:
    pyautogui.move(mX,mY)
    if pyautogui.failSafeCheck():
        raise pyautogui.FailSafeException()
except:
    print("FailSafe Exception")

不起作用,当它跳到右下角时引发 FailSafe 异常

解决方法

PyAutoGUI 支持绝对移动和相对移动。

  • pyautogui.moveRel(xOffset,yOffset) 相对于其当前位置移动鼠标。
  • pyautogui.moveTo(x,y) 移动到指定的屏幕坐标。

如果您查看 PyAutoGUI source code,您可以看到 move() 只是在 v1.0 中添加的 moveRel() 的别名

如果您想将坐标从窗口空间转换为屏幕空间,您需要先计算窗口在屏幕空间中的位置,并在计算屏幕空间坐标时将其用作偏移量。