From ebb73182f7b7ca0708d786cd0e0568724253c7d2 Mon Sep 17 00:00:00 2001 From: DLmaster Date: Wed, 24 Jul 2024 20:57:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BC=80=E6=9C=BA=E8=87=AA?= =?UTF-8?q?=E5=90=AF=E4=B8=8E=E9=98=BB=E6=AD=A2=E4=BC=91=E7=9C=A0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=9B=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=84=E7=90=86=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AUTO_MAA.exe | Bin 52199658 -> 52201877 bytes AUTO_MAA.py | 245 ++++++++++++++++++++++++++++++++++++------------- gui/ui/main.ui | 77 +++++++++++++++- res/info.txt | 10 +- 更新说明.txt | 1 + 5 files changed, 262 insertions(+), 71 deletions(-) diff --git a/AUTO_MAA.exe b/AUTO_MAA.exe index 5f5163867aabdc3ff1326d448175fd228496d538..aa140c91d850908b1917f927747a245a2b45aefa 100644 GIT binary patch delta 29292 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 diff --git a/AUTO_MAA.py b/AUTO_MAA.py index 3088bd4..de5a95b 100644 --- a/AUTO_MAA.py +++ b/AUTO_MAA.py @@ -42,11 +42,14 @@ import sqlite3 import json import datetime import os +import sys +import ctypes import hashlib import subprocess import time import random import secrets +import winreg from Crypto.Cipher import AES from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP @@ -60,6 +63,9 @@ class MaaRunner(QtCore.QThread): UpGui = QtCore.Signal(str, str, str, str, str) UpUserInfo = QtCore.Signal(list, list, list, list) Accomplish = QtCore.Signal() + AppPath = os.path.dirname(os.path.realpath(sys.argv[0])).replace( + "\\", "/" + ) # 获取软件自身的路径 ifRun = False def __init__(self, SetPath, LogPath, MaaPath, Routine, Annihilation, Num, data): @@ -167,7 +173,6 @@ class MaaRunner(QtCore.QThread): "\n".join([self.data[k][0] for k in ErrorUid]), "检测到MAA进程完成代理任务\n正在等待相关程序结束\n请等待10s", ) - maa.wait() time.sleep(10) break elif ( @@ -199,7 +204,6 @@ class MaaRunner(QtCore.QThread): info, ) os.system("taskkill /F /T /PID " + str(maa.pid)) - maa.wait() if self.ifRun: time.sleep(10) break @@ -220,7 +224,7 @@ class MaaRunner(QtCore.QThread): self.UpUserInfo.emit(AllUid, days, lasts, numbs) # 保存运行日志 endtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") - with open("log.txt", "w", encoding="utf-8") as f: + with open(self.AppPath + "log.txt", "w", encoding="utf-8") as f: print("任务开始时间:" + begintime + ",结束时间:" + endtime, file=f) print( "已完成数:" + str(len(OverUid)) + ",未完成数:" + str(len(ErrorUid)), @@ -234,7 +238,7 @@ class MaaRunner(QtCore.QThread): if len(WaitUid) != 0: print("未代理的用户:", file=f) print("\n".join([self.data[k][0] for k in WaitUid]), file=f) - with open("log.txt", "r", encoding="utf-8") as f: + with open(self.AppPath + "log.txt", "r", encoding="utf-8") as f: EndLog = f.read() # 恢复GUI运行面板 self.UpGui.emit("", "", "", "", EndLog) @@ -397,19 +401,24 @@ class MaaRunner(QtCore.QThread): return True -class MaaTimer(QtCore.QThread): +class MainTimer(QtCore.QThread): GetConfig = QtCore.Signal() StartForTimer = QtCore.Signal() + AppPath = os.path.realpath(sys.argv[0]) # 获取软件自身的路径 + AppName = os.path.basename(AppPath) # 获取软件自身的名称 + ES_CONTINUOUS = 0x80000000 + ES_SYSTEM_REQUIRED = 0x00000001 isMaaRun = False def __init__(self, config): - super(MaaTimer, self).__init__() + super(MainTimer, self).__init__() self.config = config def run(self): while True: self.GetConfig.emit() + self.setSystem() TimeSet = [ self.config["Default"]["TimeSet.run" + str(k + 1)] for k in range(10) @@ -420,16 +429,73 @@ class MaaTimer(QtCore.QThread): self.StartForTimer.emit() time.sleep(1) + def setSystem(self): + + # 同步系统休眠状态 + if self.config["Default"]["SelfSet.IfSleep"] == "True": + # 设置系统电源状态 + ctypes.windll.kernel32.SetThreadExecutionState( + self.ES_CONTINUOUS | self.ES_SYSTEM_REQUIRED + ) + elif self.config["Default"]["SelfSet.IfSleep"] == "False": + # 恢复系统电源状态 + ctypes.windll.kernel32.SetThreadExecutionState(self.ES_CONTINUOUS) + + # 同步开机自启 + if ( + self.config["Default"]["SelfSet.IfSelfStart"] == "True" + and not self.IsStartup() + ): + key = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Run", + winreg.KEY_SET_VALUE, + winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, + ) + winreg.SetValueEx(key, self.AppName, 0, winreg.REG_SZ, self.AppPath) + winreg.CloseKey(key) + elif ( + self.config["Default"]["SelfSet.IfSelfStart"] == "False" + and self.IsStartup() + ): + key = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Run", + winreg.KEY_SET_VALUE, + winreg.KEY_ALL_ACCESS | winreg.KEY_WRITE | winreg.KEY_CREATE_SUB_KEY, + ) + winreg.DeleteValue(key, self.AppName) + winreg.CloseKey(key) + + def IsStartup(self): + key = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Run", + 0, + winreg.KEY_READ, + ) + try: + value, _ = winreg.QueryValueEx(key, self.AppName) + return True + except FileNotFoundError: + return False + finally: + winreg.CloseKey(key) + class Main(QWidget): + AppPath = os.path.dirname(os.path.realpath(sys.argv[0])).replace( + "\\", "/" + ) # 获取软件自身的路径 + def __init__(self, PASSWARD=""): super().__init__() - self.DatabasePath = "data/data.db" - self.ConfigPath = "config/gui.json" - self.KeyPath = "data/key" - self.GameidPath = "data/gameid.txt" + self.DatabasePath = self.AppPath + "/data/data.db" + self.ConfigPath = self.AppPath + "/config/gui.json" + self.KeyPath = self.AppPath + "/data/key" + self.GameidPath = self.AppPath + "/data/gameid.txt" self.PASSWORD = PASSWARD self.ifUpDatabase = True self.ifUpConfig = True @@ -450,12 +516,13 @@ class Main(QWidget): "uid", ] - self.ui = uiLoader.load("gui/ui/main.ui") + self.ui = uiLoader.load(self.AppPath + "/gui/ui/main.ui") self.ui.setWindowTitle("AUTO_MAA") - self.ui.setWindowIcon(QIcon("res/AUTO_MAA.ico")) + self.ui.setWindowIcon(QIcon(self.AppPath + "/res/AUTO_MAA.ico")) # 检查文件完整性 if not os.path.exists(self.DatabasePath) or not os.path.exists(self.ConfigPath): self.initialize() + self.CheckConfig() with open(self.ConfigPath, "r") as f: self.config = json.load(f) if not os.path.exists(self.KeyPath): @@ -510,6 +577,12 @@ class Main(QWidget): self.num = self.ui.findChild(QSpinBox, "spinBox_numt") self.num.valueChanged.connect(self.ChangeConfig) + self.IfSelfStart = self.ui.findChild(QCheckBox, "checkBox_ifselfstart") + self.IfSelfStart.stateChanged.connect(self.ChangeConfig) + + self.IfSleep = self.ui.findChild(QCheckBox, "checkBox_ifsleep") + self.IfSleep.stateChanged.connect(self.ChangeConfig) + self.RunText = self.ui.findChild(QTextBrowser, "textBrowser_run") self.WaitText = self.ui.findChild(QTextBrowser, "textBrowser_wait") self.OverText = self.ui.findChild(QTextBrowser, "textBrowser_over") @@ -553,10 +626,10 @@ class Main(QWidget): self.MaaRunner.UpUserInfo.connect(self.ChangeUserInfo) self.MaaRunner.Accomplish.connect(self.end) - self.MaaTimer = MaaTimer(self.config) - self.MaaTimer.GetConfig.connect(self.GiveConfig) - self.MaaTimer.StartForTimer.connect(self.RunStarter) - self.MaaTimer.start() + self.MainTimer = MainTimer(self.config) + self.MainTimer.GetConfig.connect(self.GiveConfig) + self.MainTimer.StartForTimer.connect(self.RunStarter) + self.MainTimer.start() # 载入GUI数据 self.UpdateTable("normal") @@ -565,10 +638,10 @@ class Main(QWidget): # 初始化 def initialize(self): # 检查目录 - if not os.path.exists("data"): - os.makedirs("data") - if not os.path.exists("config"): - os.makedirs("config") + if not os.path.exists(self.AppPath + "/data"): + os.makedirs(self.AppPath + "/data") + if not os.path.exists(self.AppPath + "/config"): + os.makedirs(self.AppPath + "/config") # 生成用户数据库 if not os.path.exists(self.DatabasePath): db = sqlite3.connect(self.DatabasePath) @@ -583,55 +656,74 @@ class Main(QWidget): db.close() # 生成配置文件 if not os.path.exists(self.ConfigPath): - config = { - "Default": { - "TimeSet.set1": "False", - "TimeSet.run1": "00:00", - "TimeSet.set2": "False", - "TimeSet.run2": "00:00", - "TimeSet.set3": "False", - "TimeSet.run3": "00:00", - "TimeSet.set4": "False", - "TimeSet.run4": "00:00", - "TimeSet.set5": "False", - "TimeSet.run5": "00:00", - "TimeSet.set6": "False", - "TimeSet.run6": "00:00", - "TimeSet.set7": "False", - "TimeSet.run7": "00:00", - "TimeSet.set8": "False", - "TimeSet.run8": "00:00", - "TimeSet.set9": "False", - "TimeSet.run9": "00:00", - "TimeSet.set10": "False", - "TimeSet.run10": "00:00", - "MaaSet.path": "", - "TimeLimit.routine": 10, - "TimeLimit.annihilation": 40, - "TimesLimit.run": 3, - } - } + config = {"Default": {}} with open(self.ConfigPath, "w") as f: json.dump(config, f, indent=4) + # 检查配置文件字段 + def CheckConfig(self): + + ConfigList = [ + ["TimeSet.set1", "False"], + ["TimeSet.run1", "00:00"], + ["TimeSet.set2", "False"], + ["TimeSet.run2", "00:00"], + ["TimeSet.set3", "False"], + ["TimeSet.run3", "00:00"], + ["TimeSet.set4", "False"], + ["TimeSet.run4", "00:00"], + ["TimeSet.set5", "False"], + ["TimeSet.run5", "00:00"], + ["TimeSet.set6", "False"], + ["TimeSet.run6", "00:00"], + ["TimeSet.set7", "False"], + ["TimeSet.run7", "00:00"], + ["TimeSet.set8", "False"], + ["TimeSet.run8", "00:00"], + ["TimeSet.set9", "False"], + ["TimeSet.run9", "00:00"], + ["TimeSet.set10", "False"], + ["TimeSet.run10", "00:00"], + ["MaaSet.path", ""], + ["TimeLimit.routine", 10], + ["TimeLimit.annihilation", 40], + ["TimesLimit.run", 3], + ["SelfSet.IfSelfStart", "False"], + ["SelfSet.IfSleep", "False"], + ] + # 导入配置文件 + with open(self.ConfigPath, "r") as f: + config = json.load(f) + # 检查并补充缺失的字段 + for i in range(len(ConfigList)): + if not ConfigList[i][0] in config["Default"]: + config["Default"][ConfigList[i][0]] = ConfigList[i][1] + # 导出配置文件 + with open(self.ConfigPath, "w") as f: + json.dump(config, f, indent=4) + # 配置密钥 def getPASSWORD(self): # 检查目录 - if not os.path.exists("data/key"): - os.makedirs("data/key") + if not os.path.exists(self.AppPath + "/data/key"): + os.makedirs(self.AppPath + "/data/key") # 生成RSA密钥对 key = RSA.generate(2048) public_key_local = key.publickey() private_key = key # 保存RSA公钥 - with open("data/key/public_key.pem", "wb") as f: + with open(self.AppPath + "/data/key/public_key.pem", "wb") as f: f.write(public_key_local.exportKey()) # 生成密钥转换与校验随机盐 PASSWORDsalt = secrets.token_hex(random.randint(32, 1024)) - with open("data/key/PASSWORDsalt.txt", "w", encoding="utf-8") as f: + with open( + self.AppPath + "/data/key/PASSWORDsalt.txt", "w", encoding="utf-8" + ) as f: print(PASSWORDsalt, file=f) verifysalt = secrets.token_hex(random.randint(32, 1024)) - with open("data/key/verifysalt.txt", "w", encoding="utf-8") as f: + with open( + self.AppPath + "/data/key/verifysalt.txt", "w", encoding="utf-8" + ) as f: print(verifysalt, file=f) # 将管理密钥转化为AES-256密钥 AES_password = hashlib.sha256( @@ -641,18 +733,18 @@ class Main(QWidget): AES_password_verify = hashlib.sha256( AES_password + verifysalt.encode("utf-8") ).digest() - with open("data/key/AES_password_verify.bin", "wb") as f: + with open(self.AppPath + "/data/key/AES_password_verify.bin", "wb") as f: f.write(AES_password_verify) # AES-256加密RSA私钥并保存密文 AES_key = AES.new(AES_password, AES.MODE_ECB) private_key_local = AES_key.encrypt(pad(private_key.exportKey(), 32)) - with open("data/key/private_key.bin", "wb") as f: + with open(self.AppPath + "/data/key/private_key.bin", "wb") as f: f.write(private_key_local) # 加密 def encryptx(self, note): # 读取RSA公钥 - with open("data/key/public_key.pem", "rb") as f: + with open(self.AppPath + "/data/key/public_key.pem", "rb") as f: public_key_local = RSA.import_key(f.read()) # 使用RSA公钥对数据进行加密 cipher = PKCS1_OAEP.new(public_key_local) @@ -662,13 +754,17 @@ class Main(QWidget): # 解密 def decryptx(self, note): # 读入RSA私钥密文、盐与校验哈希值 - with open("data/key/private_key.bin", "rb") as f: + with open(self.AppPath + "/data/key/private_key.bin", "rb") as f: private_key_local = f.read().strip() - with open("data/key/PASSWORDsalt.txt", "r", encoding="utf-8") as f: + with open( + self.AppPath + "/data/key/PASSWORDsalt.txt", "r", encoding="utf-8" + ) as f: PASSWORDsalt = f.read().strip() - with open("data/key/verifysalt.txt", "r", encoding="utf-8") as f: + with open( + self.AppPath + "/data/key/verifysalt.txt", "r", encoding="utf-8" + ) as f: verifysalt = f.read().strip() - with open("data/key/AES_password_verify.bin", "rb") as f: + with open(self.AppPath + "/data/key/AES_password_verify.bin", "rb") as f: AES_password_verify = f.read().strip() # 将管理密钥转化为AES-256密钥并验证 AES_password = hashlib.sha256( @@ -825,6 +921,15 @@ class Main(QWidget): self.routine.setValue(self.config["Default"]["TimeLimit.routine"]) self.annihilation.setValue(self.config["Default"]["TimeLimit.annihilation"]) self.num.setValue(self.config["Default"]["TimesLimit.run"]) + + self.IfSelfStart.setChecked( + bool(self.config["Default"]["SelfSet.IfSelfStart"] == "True") + ) + + self.IfSleep.setChecked( + bool(self.config["Default"]["SelfSet.IfSleep"] == "True") + ) + for i in range(10): self.StartTime[i][0].setChecked( bool(self.config["Default"]["TimeSet.set" + str(i + 1)] == "True") @@ -962,6 +1067,17 @@ class Main(QWidget): self.config["Default"]["TimeLimit.routine"] = self.routine.value() self.config["Default"]["TimeLimit.annihilation"] = self.annihilation.value() self.config["Default"]["TimesLimit.run"] = self.num.value() + + if self.IfSleep.isChecked(): + self.config["Default"]["SelfSet.IfSleep"] = "True" + else: + self.config["Default"]["SelfSet.IfSleep"] = "False" + + if self.IfSelfStart.isChecked(): + self.config["Default"]["SelfSet.IfSelfStart"] = "True" + else: + self.config["Default"]["SelfSet.IfSelfStart"] = "False" + for i in range(10): if self.StartTime[i][0].isChecked(): self.config["Default"]["TimeSet.set" + str(i + 1)] = "True" @@ -1000,7 +1116,7 @@ class Main(QWidget): return 0 def closeEvent(self, event): - self.MaaTimer.quit() + self.MainTimer.quit() self.MaaRunner.ifRun = False self.MaaRunner.wait() self.cur.close() @@ -1011,7 +1127,7 @@ class Main(QWidget): def end(self): self.MaaRunner.ifRun = False self.MaaRunner.wait() - self.MaaTimer.isMaaRun = False + self.MainTimer.isMaaRun = False self.runnow.clicked.disconnect() self.runnow.setText("立即执行") self.runnow.clicked.connect(self.RunStarter) @@ -1040,11 +1156,12 @@ class Main(QWidget): self.data_ = self.cur.fetchall() self.MaaRunner.data = [list(row) for row in self.data_] # 启动执行线程 - self.MaaTimer.isMaaRun = True + self.MainTimer.isMaaRun = True self.MaaRunner.start() + # 同步配置文件到子线程 def GiveConfig(self): - self.MaaTimer.config = self.config + self.MainTimer.config = self.config class AUTO_MAA(QApplication): diff --git a/gui/ui/main.ui b/gui/ui/main.ui index 207146e..ec26c14 100644 --- a/gui/ui/main.ui +++ b/gui/ui/main.ui @@ -745,7 +745,7 @@ - 时间限制 + 执行限制 @@ -898,6 +898,79 @@ + + + + AUTO_MAA设置 + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + + 开机自动启动AUTO_MAA + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + + AUTO_MAA启动时禁止电脑休眠 + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + @@ -932,7 +1005,7 @@ li.checked::marker { content: "\2612"; } </style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">致用户:</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 这是AUTO_MAA_v3.1,项目基本完成可视化。</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 这是AUTO_MAA_v3.1.1,项目基本完成可视化。</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> 正式版去除了命令行窗口,但这不意味着BUG不会出现。由于用户与项目贡献者的稀缺,我们无法确保正式版足够完善,还望谅解。</p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> diff --git a/res/info.txt b/res/info.txt index f0d6abb..7cab613 100644 --- a/res/info.txt +++ b/res/info.txt @@ -4,7 +4,7 @@ VSVersionInfo( ffi=FixedFileInfo( # filevers and prodvers should be always a tuple with four items: (1, 2, 3, 4) # Set not needed items to zero 0. - filevers=(3, 1, 0, 0), + filevers=(3, 1, 1, 0), prodvers=(0, 0, 0, 0), # Contains a bitmask that specifies the valid bits 'flags'r mask=0x3f, @@ -31,13 +31,13 @@ VSVersionInfo( [StringStruct('Comments', 'https://github.com/DLmaster361/AUTO_MAA/'), StringStruct('CompanyName', 'AUTO_MAA Team'), StringStruct('FileDescription', 'AUTO_MAA Component'), - StringStruct('FileVersion', '3.1'), + StringStruct('FileVersion', '3.1.1'), StringStruct('InternalName', 'AUTO_MAA'), StringStruct('LegalCopyright', 'Copyright © 2024 DLmaster361'), - StringStruct('OriginalFilename', 'AUTO_MAA'), + StringStruct('OriginalFilename', 'AUTO_MAA.py'), StringStruct('ProductName', 'AUTO_MAA'), - StringStruct('ProductVersion', 'v3.1'), - StringStruct('Assembly Version', 'v3.1')]) + StringStruct('ProductVersion', 'v3.1.1'), + StringStruct('Assembly Version', 'v3.1.1')]) ]) ] ) \ No newline at end of file diff --git a/更新说明.txt b/更新说明.txt index ca24d3c..a6627e3 100644 --- a/更新说明.txt +++ b/更新说明.txt @@ -1,4 +1,5 @@ 项目初始阶段,不会提供专门的版本更新程序,您需要手动更新程序。 v2.1.5及以前的用户,由于新版本采用全新的架构,您需要手动输入之前的信息。 v3.0_Beta版用户,直接用AUTO_MAA.exe替代gui.exe后,重新设置每个用户的“自定义基建”选项(输入“-”以关闭该功能,输入自定义基建配置文件地址以开启该功能)。 +v3.1版用户,将原文件夹下的AUTO_MAA.exe文件和gui文件夹用新版本对应文件替换即可。 新用户请忽略本说明。 \ No newline at end of file