【Python】关于Win32后台,鼠标移动,坐标偏移问题解决方法

下面这段代码按理来说应该没有任何问题。

就是在A点按下鼠标左键,移动到B点放开鼠标。

然而问题还是出现了,下面有运行结果。


import win32api,win32gui,win32con

# win32gui.FindWindow(类名,标题) 获取父级窗口句柄
Hand1 = win32gui.FindWindow('LDPlayerMainFrame','雷电模拟器(64)')
print(Hand1)
# win32gui.FindWindowEx(父级窗口句柄,None,类名,标题) 获取子级窗口句柄
Hand2 = win32gui.FindWindowEx(Hand1,None,'RenderWindow', 'TheRender')
print(Hand2)

def Move(X1,Y1,X2,Y2):
    temp = win32api.MAKELONG(X1,Y1)
    win32api.SendMessage(Hand2, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, temp) # 鼠标按下
    temp1 = win32api.MAKELONG(X2,Y2)
    win32api.SendMessage(Hand2, win32con.WM_MOUSEMOVE, win32con.MK_LBUTTON, temp1) # 鼠标移动
    win32api.SendMessage(Hand2, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, temp1) # 鼠标弹起

Move(1832,1002,942,574)

按照下面的运行结果来看,上面的代码并没有被正确的执行。

如果只是一组坐标的点击,并不会有任何问题。

然而只要加入第二组移动坐标,以下的问题就会出现。

昨天研究了一整天,试了各种方法,试图让坐标被正确读取,甚至想着它是不是把窗口分成了四等份,说起来都是泪。

下面是最后找到的解决方法。

【Python】关于Win32后台,鼠标移动,坐标偏移问题解决方法_第1张图片

我们再来看上面这张图,距离目标点是不是有着一倍的差距。

没错,这就是最后的解决方法,好蠢 ╮( ̄▽ ̄)╭

所以坐标只需要重新计算一下即可。

    X2 = X2 - (X1 - X2)

    Y2 = Y2 - (Y1 - Y2)

下面来看看最后的运行结果


import win32api,win32gui,win32con,time

# win32gui.FindWindow(类名,标题) 获取父级窗口句柄
Hand1 = win32gui.FindWindow('LDPlayerMainFrame','雷电模拟器(64)')
print(Hand1)
# win32gui.FindWindowEx(父级窗口句柄,None,类名,标题) 获取子级窗口句柄
Hand2 = win32gui.FindWindowEx(Hand1,None,'RenderWindow', 'TheRender')
print(Hand2)


def Move(X1,Y1,X2,Y2):
    temp = win32api.MAKELONG(X1,Y1)
    win32api.SendMessage(Hand2, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, temp) # 鼠标按下
    # 坐标的重新计算
    X2 = X2 - (X1 - X2)
    Y2 = Y2 - (Y1 - Y2)
    temp1 = win32api.MAKELONG(X2,Y2)
    win32api.SendMessage(Hand2, win32con.WM_MOUSEMOVE, win32con.MK_LBUTTON, temp1) # 鼠标移动
    win32api.SendMessage(Hand2, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, temp1) # 鼠标弹起

Move(1832,1002,942,574)

 【Python】关于Win32后台,鼠标移动,坐标偏移问题解决方法_第2张图片

 运行正确

大家也可以拿去试试,虽然过程很蠢,但是问题总算解决了。

你可能感兴趣的:(python脚本开发,python,开发语言)