x2890201 发表于 2020-9-18 08:02

某顶之奕赌狗福音自动买卡python纯源码,后台鼠标不占用前台版!

#暂无界面 请自己写..自用的话随便写个命令行就好了 !接下来会把官方卡组对接进去.慢慢来!贼流畅,用python写dm脚本效率其实还可以的比易语言稳定,异常更容易发现和处理!

import os,time
from win32com.client import Dispatch
# 注册大漠到系统中.
def regDM():
    '''
    注册大漠插件,需要把文件dm.dll放在根目录
    :return: 返回大漠对象
    '''
    try:
      dm = Dispatch('dm.dmsoft')
    except:
      os.system('regsvr32 dm.dll')
      dm = Dispatch('dm.dmsoft')
    return dm

# 从系统中卸载大漠
def unRegDM():
    '''
    从系统中卸载大漠插件
    :return:
    '''
    os.system('regsvr32 dm.dll /u')
class AutoOPlayingChess():
    '''
    自动购买棋子,后台鼠标,不占用前台用户的鼠标体验
    '''
    def __init__(self):
      self.dm=regDM()
      self.hwnd =0
      self.chess=[]
    def __del__(self):
      self.dm.UnBindWindow()
    def dmReg(self,reg_code, ver_info=''):
      '''
      登录大漠.就是身份验证一下,从而使用插件的高级功能,如果你的是3.xx的免费版本,就不需要这步
      :param reg_code: 大漠后台的注册码
      :param ver_info: 附加信息,主要用于查询消费情况 填了更好查询,不填也无所谓
      :return: 返回1表示成功,其它值请查接口说明
      '''
      value = self.dm.reg(reg_code, ver_info)
      return value
    def SetDict(self,path,errorMsg=0):
      '''
      设置字库,顺便关掉错误提示
      :param path: 字库路径
      :param errorMsg: 默认为关闭错误提示,如果要设置请填1
      :return:0失败,1成功!
      '''
      self.dm.SetShowErrorMsg(errorMsg)
      return self.dm.SetDict(0, path)
    def checkHwnd(self,processName):
      '''
      循环寻找窗口,直到成功才返回
      :param processName: 进程名
      :return: 返回目标窗口句柄
      '''

      while self.hwnd==0:
            self.hwnd=self.dm.FindWindowByProcess(processName,'','')
            time.sleep(1)
    def chessAdd(self,chessName):
      '''
      将名为chessName的棋子添加进购买库
      :param chessName: 棋子名
      :return:
      '''
      if chessName not in self.chess:
            self.chess.append(chessName)
    def delChess(self,i):
      '''
      删除序号为i的购买池中的棋子
      :param i: 序号
      :return:
      '''
      del self.chess
    def removeChess(self,chessName):
      '''
      删除名字为chessName的购买池中的棋子
      :param chessName: 棋子名
      :return:
      '''
      self.chess.remove(chessName)
    def startAuto(self,starX=200,starY=100,color_format="ffffff-060606",sim=0.9):
      '''
      启动自动购买棋子程序,默认1920*1080分辨率不需要改东西,,如果是更高的分辨率贼需要自己量参数
      :param starX: 识别开始的x坐标 商店1号棋子的名字 的x坐标.,可以小,但是不能大
      :param starY: 商店棋子名字距离屏幕最下方的距离 可以大 不能小
      :param color_format: 颜色格式串
      :param sim:相似度,取值范围0.1-1.0
      :return:如果返回False说明绑定失败.运行失败!
      '''
      dm_ret = self.dm.BindWindowEx(self.hwnd, "dx2",
                                 "dx.mouse.position.lock.api|dx.mouse.clip.lock.api|dx.mouse.input.lock.api|dx.mouse.state.api|dx.mouse.state.message|dx.mouse.api|dx.mouse.cursor",
                                 "normal", "dx.public.active.api", 0)
      if dm_ret == 0:
            print('绑定失败!')
            return False
      ret, ScreenWidth, ScreenHeight = self.dm.GetClientSize(self.hwnd)
      lScreenHeight = ScreenHeight - starY
      bd = False
      ls = []
      while True:
            if len(self.chess)>0:#判断自动购买棋子池是否有需要购买的棋子,有需要才有必要运行下面的代码
                sls = self.dm.OcrEx(starX, lScreenHeight, ScreenWidth, ScreenHeight, color_format, sim).split('|')
                print(sls)
                for item in sls:
                  s = item.split('

字库和dm.dll打包:https://www.lanzoui.com/iWnW1gq155i持续更新中...只为练手和技术交流!纯源码,不编译!切勿用于非法用途!否则后果自负!本人不承担任何法律责任!

)
                  if s in chess:
                        print(s, bd)
                        if ls != sls:
                            bd = False
                        if bd == False:
                            for i in range(2):
                              self.dm.MoveTo(int(s) + 20, int(s) - 20)
                              self.dm.LeftClick()
                              time.sleep(0.1)
                              ls = self.dm.OcrEx(starX, lScreenHeight, ScreenWidth, ScreenHeight, color_format, sim).split('|')
                              if ls == sls:
                                    bd = True
                              else:
                                    bd = False
                                    break

if __name__ == "__main__":
    chess=[]#模拟选中的棋子池,没界面模拟一下
    chess.append('卡特琳娜')
    chess.append('金克丝')
    chess.append('盖伦')
    chess.append('嘉文四世')
    chess.append('赵信')
    chess.append('瑟庄妮')
    chess.append('阿兹尔')
    chess.append('奈德丽')
    chess.append('蔚')
    #初始化必要数据
    reg_code = "luxiaolan63735f4be12fda045a12cf1b2927d5cbc19c"    # 大漠后台的注册码,,这个就得自己去大漠注册了便宜的很..自用的话,我这可以暂时用用也就100块钱了,别一直漂我这个,
    ver_info = '52pojie'# 附加信息,主要用于查询消费情况 填了更好查询,不填也无所谓
    dictPath='1920.txt'#字库路径
    #----------------------------------------------------------------------------
    #创建自动购买棋子对象
    atpc = AutoOPlayingChess()
    #登录大漠,免费版的大漠就可以省略这一步
    value=atpc.dmReg(reg_code,ver_info)
    #设置好字库和配置
    atpc.SetDict(dictPath)
    #判断是否登录成功
    if value == 1:#免费版的就不要这个if了,,注意了免费版没办法后台鼠标
      print(f'验证成功!')
      # 接下来就可以自己查接口说明来使用里面的全部方法了
      atpc.checkHwnd('League of Legends.exe')
      #将需要购买的棋子放入池子中
      atpc.chess=chess
      #启动自动购买棋子程序
      atpc.startAuto()
    else:
      if value == -2:
            print('进程没有以管理员方式运行或者被第三方杀毒拦截. (建议关闭uac和杀毒软件),请用管理员权限运行本程序!')
      else:
            print(f'验证失败,失败代码为:{value},大概率是被杀毒拦截了!')

字库和dm.dll打包:https://www.lanzoui.com/iWnW1gq155i持续更新中...只为练手和技术交流!纯源码,不编译!切勿用于非法用途!否则后果自负!本人不承担任何法律责任!

sjp000 发表于 2020-9-18 08:02

谢谢分享

偏离. 发表于 2020-9-18 08:02

谢谢大佬

yuhang198856 发表于 2020-9-18 08:03

谢谢大牛

4550450 发表于 2020-9-18 08:05

6666666666

雨落弦心 发表于 2020-9-18 08:05

好的,非常感谢

yulang7632106 发表于 2020-9-18 08:19

6666

yeskey2004 发表于 2020-9-18 08:29

感谢楼主分享!大牛有你更精彩!

474476981 发表于 2020-9-18 08:40

感谢楼主分享
页: [1]
查看完整版本: 某顶之奕赌狗福音自动买卡python纯源码,后台鼠标不占用前台版!