126 lines
3.8 KiB
Python
126 lines
3.8 KiB
Python
# <AUTO_MAA:A MAA Multi Account Management and Automation Tool>
|
||
# Copyright © <2024> <DLmaster361>
|
||
|
||
# This file is part of AUTO_MAA.
|
||
|
||
# AUTO_MAA is free software: you can redistribute it and/or modify
|
||
# it under the terms of the GNU General Public License as published
|
||
# by the Free Software Foundation, either version 3 of the License,
|
||
# or (at your option) any later version.
|
||
|
||
# AUTO_MAA is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty
|
||
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
||
# the GNU General Public License for more details.
|
||
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with AUTO_MAA. If not, see <https://www.gnu.org/licenses/>.
|
||
|
||
# DLmaster_361@163.com
|
||
|
||
"""
|
||
AUTO_MAA
|
||
AUTO_MAA系统服务
|
||
v4.2
|
||
作者:DLmaster_361
|
||
"""
|
||
|
||
import ctypes
|
||
import win32gui
|
||
import win32process
|
||
import winreg
|
||
import psutil
|
||
|
||
from app.core import AppConfig
|
||
|
||
|
||
class SystemHandler:
|
||
|
||
ES_CONTINUOUS = 0x80000000
|
||
ES_SYSTEM_REQUIRED = 0x00000001
|
||
|
||
def __init__(self, config: AppConfig):
|
||
|
||
self.config = config
|
||
|
||
self.set_Sleep()
|
||
self.set_SelfStart()
|
||
|
||
def set_Sleep(self):
|
||
"""同步系统休眠状态"""
|
||
|
||
if self.config.global_config.get(
|
||
self.config.global_config.function_IfAllowSleep
|
||
):
|
||
# 设置系统电源状态
|
||
ctypes.windll.kernel32.SetThreadExecutionState(
|
||
self.ES_CONTINUOUS | self.ES_SYSTEM_REQUIRED
|
||
)
|
||
else:
|
||
# 恢复系统电源状态
|
||
ctypes.windll.kernel32.SetThreadExecutionState(self.ES_CONTINUOUS)
|
||
|
||
def set_SelfStart(self):
|
||
"""同步开机自启"""
|
||
|
||
if (
|
||
self.config.global_config.get(self.config.global_config.start_IfSelfStart)
|
||
and not self.is_startup()
|
||
):
|
||
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, "AUTO_MAA", 0, winreg.REG_SZ, self.config.app_path_sys
|
||
)
|
||
winreg.CloseKey(key)
|
||
elif (
|
||
not self.config.global_config.get(
|
||
self.config.global_config.start_IfSelfStart
|
||
)
|
||
and self.is_startup()
|
||
):
|
||
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, "AUTO_MAA")
|
||
winreg.CloseKey(key)
|
||
|
||
def is_startup(self):
|
||
"""判断程序是否已经开机自启"""
|
||
|
||
key = winreg.OpenKey(
|
||
winreg.HKEY_CURRENT_USER,
|
||
r"Software\Microsoft\Windows\CurrentVersion\Run",
|
||
0,
|
||
winreg.KEY_READ,
|
||
)
|
||
|
||
try:
|
||
value, _ = winreg.QueryValueEx(key, "AUTO_MAA")
|
||
winreg.CloseKey(key)
|
||
return True
|
||
except FileNotFoundError:
|
||
winreg.CloseKey(key)
|
||
return False
|
||
|
||
def get_window_info(self):
|
||
"""获取当前窗口信息"""
|
||
|
||
def callback(hwnd, window_info):
|
||
if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd):
|
||
_, pid = win32process.GetWindowThreadProcessId(hwnd)
|
||
process = psutil.Process(pid)
|
||
window_info.append((win32gui.GetWindowText(hwnd), process.exe()))
|
||
return True
|
||
|
||
window_info = []
|
||
win32gui.EnumWindows(callback, window_info)
|
||
return window_info
|