2.0版本(去除对第三方代码的依赖,添加定时功能,主程序上线)

This commit is contained in:
DLmaster
2024-02-06 21:12:49 +08:00
parent 30bbf3823f
commit 9e93b6ef35
12 changed files with 131 additions and 173 deletions

BIN
AUTO_MAA.exe Normal file

Binary file not shown.

29
AUTO_MAA.py Normal file
View File

@@ -0,0 +1,29 @@
import sqlite3
import subprocess
import datetime
import time
import os
from termcolor import colored
DATABASE="data/data.db"
db=sqlite3.connect(DATABASE)
cur=db.cursor()
cur.execute("SELECT * FROM timeset WHERE True")
timeset=cur.fetchall()
timeset=[list(row) for row in timeset]
while True:
curtime=datetime.datetime.now().strftime("%H:%M")
print(colored("当前时间:"+curtime,'green'))
timenew=[]
timenew.append(curtime)
if timenew in timeset:
print(colored("开始执行",'yellow'))
maa=subprocess.Popen(["run.exe"])
maapid=maa.pid
while True:
if os.path.exists("OVER"):
os.system('taskkill /F /T /PID '+str(maapid))
os.remove("OVER")
print(colored("执行完毕",'yellow'))
break
time.sleep(1)

View File

@@ -1,133 +0,0 @@
#include"stdafx.h"
#include<iostream>
#include<Windows.h>
#include "boost/filesystem.hpp"
#include "boost/iostreams/stream.hpp"
#include "boost/format.hpp"
#include "boost/algorithm/algorithm.hpp"
#include "boost/algorithm/string.hpp"
using namespace std;
#define READ_ONE_NUM 1024
/*
ɱ<><C9B1>ָ<EFBFBD><D6B8>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>
*/
BOOL KillSpecifiedProcess(const std::string& p_strPath)
{
/*
C:\Users\10139>wmic process where name="notepad.exe" get executablepath,processid
ExecutablePath ProcessId
C:\WINDOWS\system32\notepad.exe 6196
C:\WINDOWS\system32\notepad.exe 6056
C:\Users\10139>taskkill /F /PID 6196 /PID 6056
<20>ɹ<EFBFBD>: <20><><EFBFBD><EFBFBD>ֹ PID Ϊ 6196 <20>Ľ<EFBFBD><C4BD>̡<EFBFBD>
<20>ɹ<EFBFBD>: <20><><EFBFBD><EFBFBD>ֹ PID Ϊ 6056 <20>Ľ<EFBFBD><C4BD>̡<EFBFBD>
*/
if(!boost::filesystem::exists(p_strPath))
{
cout << p_strPath << " not exist" << endl;
return FALSE;
}
int index = p_strPath.rfind("\\");
std::string strName = p_strPath.substr(index + 1);
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
HANDLE hStdOutRead = NULL, hStdOutWrite = NULL;
if (!CreatePipe(&hStdOutRead, &hStdOutWrite, &sa, 0))
{
cout << "create pipe error," << GetLastError() << endl;
return FALSE;
}
STARTUPINFOA startInfo;
PROCESS_INFORMATION procInfo;
BOOL bSuccess = FALSE;
ZeroMemory(&procInfo, sizeof(PROCESS_INFORMATION));
ZeroMemory(&startInfo, sizeof(STARTUPINFOA));
startInfo.cb = sizeof(STARTUPINFOA);
startInfo.hStdOutput = hStdOutWrite;
startInfo.dwFlags |= (STARTF_USESTDHANDLES |STARTF_USESHOWWINDOW) ;
startInfo.wShowWindow = SW_HIDE;
boost::format fmt("wmic process where name=\"%1%\" get executablepath,processid");
fmt % strName;
std::string strSQL = fmt.str();
bSuccess = CreateProcessA(NULL, (char*)strSQL.data(), NULL, NULL, TRUE, 0, NULL, NULL, &startInfo, &procInfo);
if (!bSuccess)
{
cout << "create process error," << GetLastError() << endl;
return FALSE;
}
WaitForSingleObject(procInfo.hProcess,INFINITE);
CloseHandle(hStdOutWrite);
DWORD byteRead = 0;
std::string strContent;
char buffer[READ_ONE_NUM] = {0};
while (true)
{
byteRead = 0;
memset(buffer, 0, READ_ONE_NUM);
BOOL bRead = ReadFile(hStdOutRead, buffer, (READ_ONE_NUM-1)* sizeof(buffer[0]) , &byteRead, NULL);
if (!bRead)
{
break;
}
strContent.append(buffer);
}
CloseHandle(hStdOutRead);
std::vector<std::string> splitVec;
boost::split(splitVec, strContent, boost::is_any_of("\r\n"), boost::token_compress_on);
if(splitVec.size() > 0)
{
if( !boost::icontains(splitVec[0], "ExecutablePath") )
{
// û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cout << strName << " is not runing" << endl;
return FALSE;
}
// <20><><EFBFBD><EFBFBD>for<6F><72><EFBFBD><EFBFBD><EBA3BA><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>PID
// <20><>1<EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
for(int i = 1; i < splitVec.size() -1; i++)
{
std::vector<std::string> splitVec2;
boost::split(splitVec2, splitVec[i], boost::is_any_of(" "), boost::token_compress_on);
int size = splitVec2.size();
if(size >= 3)
{
std::string exePath;
// ȡ<><C8A1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
for(int i = 0; i < size -1 -1; i++)
{
exePath.append(splitVec2[i]);
exePath.append(" ");
}
// <20>ж<EFBFBD>·<EFBFBD><C2B7><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȫƥ<C8AB><C6A5>
if( !boost::icontains(exePath, p_strPath) )
{
continue;
}
// <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>пո񣬵<D5B8><F1A3ACB5><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>Ϊpid
std::string pId = splitVec2[size -1 -1];
std::string cmd = "taskkill /F /PID ";
cmd.append(pId);
cout << p_strPath << "->" << cmd << endl;
WinExec(cmd.c_str(), SW_HIDE);
}
}
}
return TRUE;
}
int main(int argc, char* argv[])
{
for(int i = 1; i < argc ; i++)
{
KillSpecifiedProcess(argv[i]);
}
return 0;
}

BIN
manage.exe Normal file

Binary file not shown.

View File

@@ -42,13 +42,30 @@ def delete(id):
def search(id,book):
db=sqlite3.connect(DATABASE)
cur=db.cursor()
#处理启动时间查询
if id=="time":
cur.execute("SELECT * FROM timeset WHERE True")
timex=cur.fetchall()
timex=[list(row) for row in timex]
cur.close()
db.close()
if len(timex)==0:
return "启动时间未设置"
else:
for i in range(len(timex)):
print(timex[i][0])
return ""
#处理MAA路径查询
if id=="maa":
cur.execute("SELECT * FROM setting WHERE True")
cur.execute("SELECT * FROM pathset WHERE True")
pathx=cur.fetchall()
if len(pathx)>0:
cur.close()
db.close()
return pathx[0][0]
else:
cur.close()
db.close()
return "MAA路径未设置"
#处理用户查询与全部信息查询
if id=="all":
@@ -56,13 +73,24 @@ def search(id,book):
else:
cur.execute("SELECT * FROM adminx WHERE admin='%s'" %(id))
data=cur.fetchall()
#处理全部信息查询时的MAA路径与启动时间查询
if id=="all":
cur.execute("SELECT * FROM setting WHERE True")
cur.execute("SELECT * FROM pathset WHERE True")
pathx=cur.fetchall()
if len(pathx)>0:
print("\nMAA路径"+pathx[0][0])
else:
print("\nMAA路径未设置")
cur.execute("SELECT * FROM timeset WHERE True")
timex=cur.fetchall()
timex=[list(row) for row in timex]
if len(timex)==0:
print("\n启动时间未设置")
else:
print("启动时间:",end='')
for i in range(len(timex)):
print(timex[i][0],end=' ')
print('')
cur.close()
db.close()
data=[list(row) for row in data]
@@ -89,7 +117,7 @@ def search(id,book):
print(unit(data[i][0],15),unit(data[i][1],12),unit(data[i][2],8),unit(data[i][3],4),unit(data[i][4],10),unit(data[i][5],10),unit(data[i][6],25))
return ""
elif id=="all":
return "当前没有用户记录"
return "\n当前没有用户记录"
else:
return "未找到"+id
@@ -107,6 +135,8 @@ def renewal(readxx):
cur.execute("SELECT * FROM adminx WHERE admin='%s'" %(id))
data=cur.fetchall()
if len(data)==0:
cur.close()
db.close()
return "未找到"+id
#应用更新
cur.execute("UPDATE adminx SET day=%d WHERE admin='%s'" %(data[0][2]+dayp,id))
@@ -123,10 +153,11 @@ def turn(id,t):
cur.execute("SELECT * FROM adminx WHERE admin='%s'" %(id))
data=cur.fetchall()
if len(data)==0:
cur.close()
db.close()
return "未找到"+id
#应用更新
if t=='y' or t=='n':
cur.execute("UPDATE adminx SET status='%s' WHERE admin='%s'" %(t,id))
cur.execute("UPDATE adminx SET status='%s' WHERE admin='%s'" %(t,id))
db.commit()
cur.close()
db.close()
@@ -149,6 +180,8 @@ def gameid(readxx):
cur.execute("SELECT * FROM adminx WHERE admin='%s'" %(id))
data=cur.fetchall()
if len(data)==0:
cur.close()
db.close()
return "未找到"+id
#导入与应用特殊关卡规则
games={}
@@ -174,17 +207,52 @@ def gameid(readxx):
def setpath(pathx):
db=sqlite3.connect(DATABASE)
cur=db.cursor()
cur.execute("SELECT * FROM setting WHERE True")
cur.execute("SELECT * FROM pathset WHERE True")
pathold=cur.fetchall()
if len(pathold)>0:
cur.execute("UPDATE setting SET path='%s' WHERE True" %(pathx))
cur.execute("UPDATE pathset SET path='%s' WHERE True" %(pathx))
else:
cur.execute("INSERT INTO setting(path) VALUES('%s')" %(pathx))
cur.execute("INSERT INTO pathset(path) VALUES('%s')" %(pathx))
db.commit()
cur.close()
db.close()
return "MAA路径已设置为"+pathx
#设置启动时间
def settime(book,timex):
db=sqlite3.connect(DATABASE)
cur=db.cursor()
#检查待操作对象存在情况
cur.execute("SELECT * FROM timeset WHERE True")
timeold=cur.fetchall()
timeold=[list(row) for row in timeold]
timenew=[]
timenew.append(timex)
#添加时间设置
if book=='+':
if timenew in timeold:
cur.close()
db.close()
return "已存在"+timex
else:
cur.execute("INSERT INTO timeset(time) VALUES('%s')" %(timex))
db.commit()
cur.close()
db.close()
return "已添加"+timex
#删除时间设置
elif book=='-':
if timenew in timeold:
cur.execute("DELETE FROM timeset WHERE time='%s'" %(timex))
db.commit()
cur.close()
db.close()
return "已删除"+timex
else:
cur.close()
db.close()
return "未找到"+timex
#统一制表单元
def unit(x,m):
#字母与连接符占1位中文占2位
@@ -201,9 +269,10 @@ if not os.path.exists(DATABASE):
db=sqlite3.connect(DATABASE)
cur=db.cursor()
db.execute("CREATE TABLE adminx(admin text,number text,day int,status text,last date,game text,password text)")
db.execute("CREATE TABLE setting(path text)")
db.execute("CREATE TABLE pathset(path text)")
db.execute("CREATE TABLE timeset(time text)")
readx=input("首次启动请设置MAA路径")
cur.execute("INSERT INTO setting(path) VALUES('%s')" %(readx))
cur.execute("INSERT INTO pathset(path) VALUES('%s')" %(readx))
db.commit()
cur.close()
db.close()
@@ -223,6 +292,8 @@ while True:
exit()
elif read[0]=='/':
print(setpath(read[1:]))
elif read[0]==':' and (read[1]=='+' or read[1]=='-'):
print(settime(read[1],read[2:]))
else:
if read[-1]=='?':
print(search(read[:-2],1))

Binary file not shown.

BIN
res/AUTO_MAA.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
res/AUTO_MAA.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
run.exe Normal file

Binary file not shown.

37
run.py
View File

@@ -1,10 +1,12 @@
import os
import subprocess
import sqlite3
import datetime
import time
import json
from termcolor import colored
#判断MAA程序运行状态
def ifoff():
while True:
time.sleep(10)
@@ -17,16 +19,9 @@ def ifoff():
elif ("请检查连接设置或尝试重启模拟器与 ADB 或重启电脑" in log) or ("已停止" in log):
return False
def killpath(maapath):
kpath='.\\mytaskkill.exe '
for i in maapath:
if i=='/':
kpath=kpath+'\\'
else:
kpath=kpath+i
return kpath
def runmaa(tel,game):
#执行MAA任务
def runmaa(tel,game,num=2):
#配置MAA运行参数
with open(setpath,"r",encoding="utf-8") as f:
data = json.load(f)
data["Configurations"]["Default"]["Start.AccountName"]=tel[:3]+"****"+tel[7:]
@@ -37,22 +32,18 @@ def runmaa(tel,game):
data["Configurations"]["Default"]["MainFunction.Stage1"]=game
with open(setpath,"w",encoding="utf-8") as f:
json.dump(data,f)
os.system('start '+maapath)
time.sleep(60)
if ifoff():
return True
else:
command=killpath(maapath)
os.system(command)
os.system('start '+maapath)
#开始运行
for i in range(num):
maa=subprocess.Popen([maapath])
maapid=maa.pid
time.sleep(60)
if ifoff():
return True
else:
command=killpath(maapath)
os.system(command)
return False
os.system('taskkill /F /T /PID '+str(maapid))
return False
#更新已完成用户的数据
def updata(id):
db=sqlite3.connect(DATABASE)
cur=db.cursor()
@@ -71,7 +62,7 @@ def updata(id):
DATABASE="data/data.db"
db=sqlite3.connect(DATABASE)
cur=db.cursor()
cur.execute("SELECT * FROM setting WHERE True")
cur.execute("SELECT * FROM pathset WHERE True")
path=cur.fetchall()
path=str(path[0][0])
setpath=path+"/config/gui.json"
@@ -110,3 +101,5 @@ with open("log.txt","w", encoding="utf-8") as f:
print("代理未完成的用户:",file=f)
for i in range(len(idfail)):
print(idfail[i],file=f)
with open("OVER","w", encoding="utf-8") as f:
print("OVER",file=f)

5
toexe.py Normal file
View File

@@ -0,0 +1,5 @@
import os
os.system("pyinstaller -F -i res/AUTO_MAA.ico manage.py")
os.system("pyinstaller -F -i res/AUTO_MAA.ico run.py")
os.system("pyinstaller -F -i res/AUTO_MAA.ico AUTO_MAA.py")

View File

@@ -1,7 +0,0 @@
声明:
KillSpecifiedProcess.cpp与mytaskkill.exe来自CSDN博主的文章遵循CC 4.0 BY-SA 版权协议附加以下信息:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接https://blog.csdn.net/qq_29542611/article/details/122003681