feat(power): 添加强制关机功能并优化关机流程
This commit is contained in:
@@ -146,6 +146,7 @@ class _MainTimer(QObject):
|
|||||||
"Sleep": "睡眠",
|
"Sleep": "睡眠",
|
||||||
"Hibernate": "休眠",
|
"Hibernate": "休眠",
|
||||||
"Shutdown": "关机",
|
"Shutdown": "关机",
|
||||||
|
"ShutdownForce": "关机(强制)"
|
||||||
}
|
}
|
||||||
|
|
||||||
choice = ProgressRingMessageBox(
|
choice = ProgressRingMessageBox(
|
||||||
|
|||||||
@@ -193,7 +193,7 @@ class _SystemHandler:
|
|||||||
"""
|
"""
|
||||||
执行系统电源操作
|
执行系统电源操作
|
||||||
|
|
||||||
:param mode: 电源操作模式,支持 "NoAction", "Shutdown", "Hibernate", "Sleep", "KillSelf"
|
:param mode: 电源操作模式,支持 "NoAction", "Shutdown", "Hibernate", "Sleep", "KillSelf", "ShutdownForce"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
@@ -205,8 +205,15 @@ class _SystemHandler:
|
|||||||
elif mode == "Shutdown":
|
elif mode == "Shutdown":
|
||||||
|
|
||||||
logger.info("执行关机操作", module="系统服务")
|
logger.info("执行关机操作", module="系统服务")
|
||||||
|
logger.info("正在清除模拟器进程",module="系统服务")
|
||||||
|
self.kill_emulator_processes()
|
||||||
|
logger.info("清除模拟器进程完成,正在关机",module="系统服务")
|
||||||
subprocess.run(["shutdown", "/s", "/t", "0"])
|
subprocess.run(["shutdown", "/s", "/t", "0"])
|
||||||
|
|
||||||
|
elif mode == "ShutdownForce":
|
||||||
|
logger.info("执行强制关机操作", module="系统服务")
|
||||||
|
subprocess.run(["shutdown", "/s", "/t", "0", "/f"])
|
||||||
|
|
||||||
elif mode == "Hibernate":
|
elif mode == "Hibernate":
|
||||||
|
|
||||||
logger.info("执行休眠操作", module="系统服务")
|
logger.info("执行休眠操作", module="系统服务")
|
||||||
@@ -254,6 +261,17 @@ class _SystemHandler:
|
|||||||
QApplication.quit()
|
QApplication.quit()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
def kill_emulator_processes(self):
|
||||||
|
# 这里暂时仅支持 MuMu 模拟器
|
||||||
|
keywords = ["Nemu", "nemu", "emulator","MuMu"]
|
||||||
|
for proc in psutil.process_iter(["pid", "name"]):
|
||||||
|
try:
|
||||||
|
pname = proc.info["name"].lower()
|
||||||
|
if any(keyword.lower() in pname for keyword in keywords):
|
||||||
|
proc.kill()
|
||||||
|
logger.info(f"已关闭 MuMu 模拟器进程: {proc.info['name']}", module="系统服务")
|
||||||
|
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
||||||
|
continue
|
||||||
def is_startup(self) -> bool:
|
def is_startup(self) -> bool:
|
||||||
"""判断程序是否已经开机自启"""
|
"""判断程序是否已经开机自启"""
|
||||||
|
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ class DispatchCenter(QWidget):
|
|||||||
self.power_combox.addItem("睡眠", userData="Sleep")
|
self.power_combox.addItem("睡眠", userData="Sleep")
|
||||||
self.power_combox.addItem("休眠", userData="Hibernate")
|
self.power_combox.addItem("休眠", userData="Hibernate")
|
||||||
self.power_combox.addItem("关机", userData="Shutdown")
|
self.power_combox.addItem("关机", userData="Shutdown")
|
||||||
|
self.power_combox.addItem("关机(强制)", userData="ShutdownForce")
|
||||||
self.power_combox.setCurrentText("无动作")
|
self.power_combox.setCurrentText("无动作")
|
||||||
self.power_combox.currentIndexChanged.connect(self.set_power_sign)
|
self.power_combox.currentIndexChanged.connect(self.set_power_sign)
|
||||||
|
|
||||||
@@ -277,6 +278,7 @@ class DispatchCenter(QWidget):
|
|||||||
"Sleep": "睡眠",
|
"Sleep": "睡眠",
|
||||||
"Hibernate": "休眠",
|
"Hibernate": "休眠",
|
||||||
"Shutdown": "关机",
|
"Shutdown": "关机",
|
||||||
|
"ShutdownForce": "关机(强制)"
|
||||||
}
|
}
|
||||||
self.power_combox.currentIndexChanged.disconnect()
|
self.power_combox.currentIndexChanged.disconnect()
|
||||||
self.power_combox.setCurrentText(mode_book[Config.power_sign])
|
self.power_combox.setCurrentText(mode_book[Config.power_sign])
|
||||||
|
|||||||
Reference in New Issue
Block a user