这课是地/类岛总是无响应然后被系统强制击败,所以让deepseek写了一个保护程序。
这段代码是一个运行在Windows平台下的后台监控程序,核心目标是保障ClassIsland.Desktop.exe进程持续运行,同时提供托盘驻留、单实例保护、DPI适配和简单窗口显示功能,整体是一个实用的进程守护工具。
下面我会分模块为你详细拆解它的功能,让你一目了然:
程序启动时会先完成两项关键初始化,为后续运行铺路:
- DPI感知设置(
SetDPIAwareness())- 优先尝试启用「每监视器DPI感知」(依赖
Shcore.dll),适配多显示器不同缩放比例的场景,避免窗口文本显示模糊、排版错乱。 - 如果系统不支持(如旧版Windows),则回退到「系统DPI感知」,保证基础显示正常。
- 优先尝试启用「每监视器DPI感知」(依赖
- 单实例保护(
CheckSingleInstance())- 通过创建全局互斥量(
Global\\ClassIslandMonitor_Mutex_1234567890)判断是否已有该程序实例在运行。 - 如果已存在实例,会找到并激活该实例的窗口,然后当前新实例直接退出,防止程序多开占用资源。
- 通过创建全局互斥量(
该程序拥有一个可视化窗口和后台托盘图标,是用户与程序交互的核心:
- 窗口注册与创建
- 注册一个自定义窗口类(
ClassIslandMonitorClass),指定窗口过程函数(WndProc)处理窗口消息。 - 创建一个宽1800、高400的窗口,启动时默认隐藏(不显示在桌面),仅保留托盘图标驻留后台。
- 注册一个自定义窗口类(
- 托盘图标功能(
CreateTrayIcon()、RemoveTrayIcon()、ShowTrayMenu())- 程序启动后会在Windows系统托盘(任务栏右侧)添加一个默认应用图标,提示文本为
ClassIsland Monitor。 - 右键点击托盘图标:弹出仅有「退出」选项的菜单,点击后触发程序正常退出。
- 双击托盘图标:恢复并显示隐藏的程序窗口,将窗口置于前台。
- 程序启动后会在Windows系统托盘(任务栏右侧)添加一个默认应用图标,提示文本为
- 窗口特殊处理
- 点击窗口的「关闭」按钮(WM_CLOSE消息):不会退出程序,仅隐藏窗口,托盘图标仍保留,监控功能继续运行(核心设计,保证后台守护不中断)。
- 只有通过托盘「退出」菜单点击,才会销毁窗口、移除托盘图标,触发程序真正退出。
这是该程序的核心使命,通过独立线程实现后台持续监控:
- 监控线程创建(
MonitorThread())- 程序启动后创建一个独立工作线程,与主窗口消息循环互不干扰,避免监控逻辑阻塞窗口交互。
- 线程首次运行会等待5秒(给系统和目标进程启动缓冲时间),之后进入循环监控。
- 进程运行状态检查(
IsProcessRunning())- 通过
CreateToolhelp32Snapshot获取系统当前所有进程的快照。 - 遍历所有进程,通过进程名称(
ClassIsland.Desktop.exe)判断目标进程是否在运行,返回布尔值告知监控线程。
- 通过
- 自动重启目标进程(
StartTargetProcess())- 当监控线程检测到目标进程未运行时,会调用该函数尝试启动目标进程。
- 拼接目标进程的完整路径(固定为
C:\\Program Files\\ClassIsland2\\app-2.0.1.1-1\\ClassIsland.Desktop.exe),设置进程启动目录(剥离可执行文件后的文件夹路径),通过CreateProcess创建进程。 - 进程启动后等待1秒,尝试找到该进程的窗口并置于前台,提升用户体验。
- 如果启动失败,会弹出错误提示框(显示错误代码),并等待3秒后再次尝试启动一次,提高重启成功率。
- 循环监控逻辑
- 监控线程每30秒检查一次目标进程状态,形成「检查→判断→需要则重启→等待30秒→再检查」的循环。
- 当程序收到退出指令时,会触发退出事件,线程检测到事件后跳出循环,正常结束线程。
当用户双击托盘显示窗口时,窗口会绘制指定文本,提供简单的可视化展示:
- 窗口收到WM_PAINT(绘制)消息时,会在窗口客户区居中绘制文本「复兴汉服,与子偕行!」。
- 使用
HarmonyOS Sans SC字体,50号字,文本颜色为黑色,背景透明,同时适配DPI缩放,保证不同屏幕缩放比例下文本显示大小正常,不会变形。
程序正常退出时,会完成完整的资源清理,避免内存泄漏和资源残留:
- 触发退出事件,等待监控线程正常结束(最长等待5秒)。
- 关闭并释放线程句柄、退出事件句柄、互斥量句柄。
- 销毁窗口、移除托盘图标,发送退出消息,结束主消息循环,程序完整退出。
这段代码的核心要点可概括为3点:
- 核心使命是后台持续守护
ClassIsland.Desktop.exe进程,进程退出则自动重启,保障其持续运行。 - 交互形式为托盘驻留+隐藏窗口,关闭窗口不终止守护,仅托盘「退出」可结束程序。
- 附带单实例保护、DPI适配、窗口文本绘制等辅助功能,提升程序稳定性和用户体验。