栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python win32 后台 鼠标滑动 坐标混乱问题解决思路

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python win32 后台 鼠标滑动 坐标混乱问题解决思路

研究了一天,并没有直接的已知解决方法,只是做了一个变通吧,先看问题。

主要是滑动的问题,点击的话只会用到一组数据,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 。

这是因为,它好像分割的并不是四等份,或者他是四等份,但是有一部分在屏幕外。

所以这个数据是微调之后的结果。

目前来说,这个问题的根源我并没有找到,也没有解决,只是换了一种思路。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853305.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号