win32api系列键盘鼠标操作:路尼亚pvp

阅读: 评论:0

win32api系列键盘鼠标操作:路尼亚pvp

win32api系列键盘鼠标操作:路尼亚pvp

流程:

  1. 遍历所有窗口,通过标题查找游戏窗口
  2. 获取所有游戏窗口的句柄和坐标
  3. 按窗口从左到右排序句柄和坐标
  4. 所有窗口(除了第一个)点击准备,输入验证码后,第一个窗口点开始游戏
  5. 运行一段时间,后一半投降
  6. 重复以上步骤

一些要点:

  1. 需要用SetForegroundWindow激活窗口
  2. 验证码识别见简易数字识别:路尼亚pvp验证码
import win32api, win32con, time, cv2,win32gui
import lunia.pictool as lp, stant as lc,lunia.luniatool as lt,numpy as np,lunia.numberpictool as ln
from PIL import Image, ImageGrabclass AccessoryTool:windowTitle='[#] Lunia [#]'prepareOffset=(725,365)inputboxOffset=(400,375)inputokOffset=(411,416)loseOffset=(83,574)getoutOffset=(503,614)codeOffset1=(390,320)codeOffset2=(420,335)wds,wdposes=[],[]npt=ln.NumberPicTool()#游戏要等130s才能退出,加载有时要半分钟以上,姑且给45swait1,wait2=130,45#胜利等到30swait3,wait4=30,7runTimes=70teamPersons=Nonedef findLuniaWindows(self,x,mouse):if win32gui.GetWindowText(x)==self.windowTitle:self.wds.append(x)self.wdposes.append(win32gui.GetWindowRect(x))amPersons=int(len(self.wds)/2)def calculatePos(self,i,offset):return self.wdposes[i][0] + offset[0],  self.wdposes[i][1] + offset[1]# 第i窗口点击准备def prepare(self,i):#把窗口移动到最前面time.sleep(.3)win32gui.SetForegroundWindow(self.wds[i])time.sleep(1)pos = self.calculatePos(i, self.prepareOffset)time.sleep(.3)win32api.SetCursorPos(pos)time.sleep(.use_click()time.sleep(.3)pos = self.calculatePos(i, self.inputboxOffset)win32api.SetCursorPos(pos)time.sleep(.use_click()code&#Code(i)print('t第{}个窗口code是{}'.format(i,code))for j in code:lt.key_click(keycode=48+int(j))time.sleep(.3)pos = self.calculatePos(i, self.inputokOffset)win32api.SetCursorPos(pos)time.sleep(.use_click()def startGame(self,i=0):#把窗口移动到最前面time.sleep(.3)win32gui.SetForegroundWindow(self.wds[i])time.sleep(1)pos = self.calculatePos(i, self.prepareOffset)time.sleep(.3)win32api.SetCursorPos(pos)time.sleep(.use_click()# 第i窗口认输def loseGame(self,i):time.sleep(.3)win32gui.SetForegroundWindow(self.wds[i])time.sleep(1)time.sleep(.3)lt.key_click(keycode=lc.ESCCODE,scanCode=lc.ESCSCANCODE)pos = self.calculatePos(i, self.loseOffset)time.sleep(.3)win32api.SetCursorPos(pos)time.sleep(.use_click()time.sleep(.3)lt.key_click(keycode=lc.F1CODE)# 第i窗口截图def captureWindow(self,i,doActive=False):if doActive:time.sleep(.3)win32gui.SetForegroundWindow(self.wds[i])time.sleep(1)return self.capture(*self.calculatePos(deOffset1),*self.calculatePos(deOffset2))def capture(self,x1, y1, x2, y2):img = ab((x1, y1, x2, y2))# img = binaryPic(img)# cv2.imwrite(r'D:360down2.png',img)# img.save(r'D:360down2.png')return img#读取第i个窗口的验证码def getCode(self,i):# img1=Image.open(r"D:360down1.png")# text = pytesseract.image_to_string(img1)img= self.captureWindow(i)img=np.asarray(img)code=Code(img)return codedef sortWindows(self):#to do:这里要测试顺序是否正确,貌似对了self.wds=[x for y, x in sorted(zip(self.wdposes,self.wds),key=lambda x:x[0][0])]self.wdposes=sorted(self.wdposes,key=lambda x:x[0])print('窗口句柄是{}'.format(self.wds))print('窗口坐标是{}'.format(self.wdposes))def __init__(self):win32gui.EnumWindows(self.findLuniaWindows, 0)self.sortWindows()def progress(self):for i in range(1,len(self.wds)):time.sleep(.5)self.prepare(i)self.startGame()#听说等130s即可,加载地图也要时间time.sleep(self.wait1+self.wait2)for i in amPersons,len(self.wds)):time.sleep(.5)self.loseGame(i)def main(self):i=0while i<self.runTimes:i+=1print('第{}/{}轮已经开始'.format(i,self.runTimes))self.progress()time.sleep(self.wait3+self.amPersons)if __name__ == "__main__":AccessoryTool().main()

本文发布于:2024-01-27 23:17:13,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063686343246.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:尼亚   键盘鼠标   操作   系列   win32api
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23