feat: 载入各种服务

This commit is contained in:
DLmaster361
2025-08-05 22:50:07 +08:00
parent 4ca7f9053f
commit 6898e548a5
9 changed files with 290 additions and 527 deletions

View File

@@ -18,14 +18,7 @@
# Contact: DLmaster_361@163.com
"""
AUTO_MAA
AUTO_MAA系统服务
v4.4
作者DLmaster_361
"""
from PySide6.QtWidgets import QApplication
import sys
import ctypes
import win32gui
@@ -37,7 +30,10 @@ import getpass
from datetime import datetime
from pathlib import Path
from app.core import Config
from core import Config
from utils.logger import get_logger
logger = get_logger("系统服务")
class _SystemHandler:
@@ -53,7 +49,7 @@ class _SystemHandler:
def set_Sleep(self) -> None:
"""同步系统休眠状态"""
if Config.get(Config.function_IfAllowSleep):
if Config.get("Function", "IfAllowSleep"):
# 设置系统电源状态
ctypes.windll.kernel32.SetThreadExecutionState(
self.ES_CONTINUOUS | self.ES_SYSTEM_REQUIRED
@@ -65,7 +61,9 @@ class _SystemHandler:
def set_SelfStart(self) -> None:
"""同步开机自启"""
if Config.get(Config.start_IfSelfStart) and not self.is_startup():
return None # 目前不支持开机自启
if Config.get("Function", "IfSelfStart") and not self.is_startup():
# 创建任务计划
try:
@@ -164,7 +162,7 @@ class _SystemHandler:
pass
except Exception as e:
logger.exception(f"程序自启动任务计划创建失败: {e}", module="系统服务")
logger.exception(f"程序自启动任务计划创建失败: {e}")
elif not Config.get(Config.start_IfSelfStart) and self.is_startup():
@@ -179,7 +177,7 @@ class _SystemHandler:
)
if result.returncode == 0:
logger.success("程序自启动任务计划已删除", module="系统服务")
logger.success("程序自启动任务计划已删除")
else:
logger.error(
f"程序自启动任务计划删除失败: {result.stderr}",
@@ -187,7 +185,7 @@ class _SystemHandler:
)
except Exception as e:
logger.exception(f"程序自启动任务计划删除失败: {e}", module="系统服务")
logger.exception(f"程序自启动任务计划删除失败: {e}")
def set_power(self, mode) -> None:
"""
@@ -200,69 +198,65 @@ class _SystemHandler:
if mode == "NoAction":
logger.info("不执行系统电源操作", module="系统服务")
logger.info("不执行系统电源操作")
elif mode == "Shutdown":
self.kill_emulator_processes()
logger.info("执行关机操作", module="系统服务")
logger.info("执行关机操作")
subprocess.run(["shutdown", "/s", "/t", "0"])
elif mode == "ShutdownForce":
logger.info("执行强制关机操作", module="系统服务")
logger.info("执行强制关机操作")
subprocess.run(["shutdown", "/s", "/t", "0", "/f"])
elif mode == "Hibernate":
logger.info("执行休眠操作", module="系统服务")
logger.info("执行休眠操作")
subprocess.run(["shutdown", "/h"])
elif mode == "Sleep":
logger.info("执行睡眠操作", module="系统服务")
logger.info("执行睡眠操作")
subprocess.run(
["rundll32.exe", "powrprof.dll,SetSuspendState", "0,1,0"]
)
elif mode == "KillSelf":
logger.info("执行退出主程序操作", module="系统服务")
Config.main_window.close()
QApplication.quit()
logger.info("执行退出主程序操作")
sys.exit(0)
elif sys.platform.startswith("linux"):
if mode == "NoAction":
logger.info("不执行系统电源操作", module="系统服务")
logger.info("不执行系统电源操作")
elif mode == "Shutdown":
logger.info("执行关机操作", module="系统服务")
logger.info("执行关机操作")
subprocess.run(["shutdown", "-h", "now"])
elif mode == "Hibernate":
logger.info("执行休眠操作", module="系统服务")
logger.info("执行休眠操作")
subprocess.run(["systemctl", "hibernate"])
elif mode == "Sleep":
logger.info("执行睡眠操作", module="系统服务")
logger.info("执行睡眠操作")
subprocess.run(["systemctl", "suspend"])
elif mode == "KillSelf":
logger.info("执行退出主程序操作", module="系统服务")
Config.main_window.close()
QApplication.quit()
logger.info("执行退出主程序操作")
sys.exit(0)
def kill_emulator_processes(self):
"""这里暂时仅支持 MuMu 模拟器"""
logger.info("正在清除模拟器进程", module="系统服务")
logger.info("正在清除模拟器进程")
keywords = ["Nemu", "nemu", "emulator", "MuMu"]
for proc in psutil.process_iter(["pid", "name"]):
@@ -277,7 +271,7 @@ class _SystemHandler:
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
logger.success("模拟器进程清除完成", module="系统服务")
logger.success("模拟器进程清除完成")
def is_startup(self) -> bool:
"""判断程序是否已经开机自启"""
@@ -292,7 +286,7 @@ class _SystemHandler:
)
return result.returncode == 0
except Exception as e:
logger.exception(f"检查任务计划程序失败: {e}", module="系统服务")
logger.exception(f"检查任务计划程序失败: {e}")
return False
def get_window_info(self) -> list:
@@ -316,7 +310,7 @@ class _SystemHandler:
:param path: 进程路径
"""
logger.info(f"开始中止进程: {path}", module="系统服务")
logger.info(f"开始中止进程: {path}")
for pid in self.search_pids(path):
killprocess = subprocess.Popen(
@@ -326,7 +320,7 @@ class _SystemHandler:
)
killprocess.wait()
logger.success(f"进程已中止: {path}", module="系统服务")
logger.success(f"进程已中止: {path}")
def search_pids(self, path: Path) -> list:
"""
@@ -336,7 +330,7 @@ class _SystemHandler:
:return: 匹配的进程PID列表
"""
logger.info(f"开始查找进程 PID: {path}", module="系统服务")
logger.info(f"开始查找进程 PID: {path}")
pids = []
for proc in psutil.process_iter(["pid", "exe"]):