研究了一天,并没有直接的已知解决方法,只是做了一个变通吧,先看问题。
主要是滑动的问题,点击的话只会用到一组数据,MAKELONG 转码并没有问题。
滑动会用到两组数据,第一组数据的转码也没有问题,但是一旦有第二组数据加入就会出问题,坐标混乱。
from requests import PreparedRequest
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 DOClick(X1,Y1,X2,Y2):
# 后台点击
if X2 == -1 and Y2 == -1:
# 通过 win32api.MAKELONG 给坐标数据转码
temp = win32api.MAKELONG(X1,Y1)
# 通过 win32api.SendMessage 给指定窗口发送信息
win32api.SendMessage(Hand2, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, temp) # 鼠标按下
win32api.SendMessage(Hand2, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, temp) # 鼠标弹起
# 后台滑动
else:
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) # 鼠标弹起
DOClick(1844,1014,0,0)
这里用到了两组数据 (1844,1014,0,0) ,预想中的结果应该是从右下角滑到左上角 。
下面是在雷电模拟器的画画软件上运行的结果,很明显第二个坐标完全不对。ヽ(ー_ー)ノ
经过一系列过程,我想到,它是不是把窗口一分为四了,还特意做了一个图,Σ(⊙▽⊙"a
下面是修改后的代码和运行结果
from requests import PreparedRequest
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 DOClick(X1,Y1,X2,Y2):
# 后台点击
if X2 == -1 and Y2 == -1:
# 通过 win32api.MAKELONG 给坐标数据转码
temp = win32api.MAKELONG(X1,Y1)
# 通过 win32api.SendMessage 给指定窗口发送信息
win32api.SendMessage(Hand2, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, temp) # 鼠标按下
win32api.SendMessage(Hand2, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, temp) # 鼠标弹起
# 后台滑动
else:
temp = win32api.MAKELONG(X1,Y1)
win32api.SendMessage(Hand2, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, temp) # 鼠标按下
X2 = -1846 + (X2*2)
Y2 = -1020 + (Y2*2)
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) # 鼠标弹起
DOClick(1844,1014,114,265)
不知道你们有没有注意,这里参与计算的值并不是-1920,-1080,而是-1846,-1020 。
这是因为,它好像分割的并不是四等份,或者他是四等份,但是有一部分在屏幕外。
所以这个数据是微调之后的结果。
目前来说,这个问题的根源我并没有找到,也没有解决,只是换了一种思路。



