Skip to content

inf2147483647/CIprotect

Repository files navigation

CIprotect

这课是地/类岛总是无响应然后被系统强制击败,所以让deepseek写了一个保护程序。

这段代码是一个运行在Windows平台下的后台监控程序,核心目标是保障ClassIsland.Desktop.exe进程持续运行,同时提供托盘驻留、单实例保护、DPI适配和简单窗口显示功能,整体是一个实用的进程守护工具。

下面我会分模块为你详细拆解它的功能,让你一目了然:

一、 程序初始化:基础准备工作

程序启动时会先完成两项关键初始化,为后续运行铺路:

  1. DPI感知设置SetDPIAwareness()
    • 优先尝试启用「每监视器DPI感知」(依赖Shcore.dll),适配多显示器不同缩放比例的场景,避免窗口文本显示模糊、排版错乱。
    • 如果系统不支持(如旧版Windows),则回退到「系统DPI感知」,保证基础显示正常。
  2. 单实例保护CheckSingleInstance()
    • 通过创建全局互斥量(Global\\ClassIslandMonitor_Mutex_1234567890)判断是否已有该程序实例在运行。
    • 如果已存在实例,会找到并激活该实例的窗口,然后当前新实例直接退出,防止程序多开占用资源。

二、 窗口与托盘管理:程序的交互入口

该程序拥有一个可视化窗口和后台托盘图标,是用户与程序交互的核心:

  1. 窗口注册与创建
    • 注册一个自定义窗口类(ClassIslandMonitorClass),指定窗口过程函数(WndProc)处理窗口消息。
    • 创建一个宽1800、高400的窗口,启动时默认隐藏(不显示在桌面),仅保留托盘图标驻留后台。
  2. 托盘图标功能CreateTrayIcon()RemoveTrayIcon()ShowTrayMenu()
    • 程序启动后会在Windows系统托盘(任务栏右侧)添加一个默认应用图标,提示文本为ClassIsland Monitor
    • 右键点击托盘图标:弹出仅有「退出」选项的菜单,点击后触发程序正常退出。
    • 双击托盘图标:恢复并显示隐藏的程序窗口,将窗口置于前台。
  3. 窗口特殊处理
    • 点击窗口的「关闭」按钮(WM_CLOSE消息):不会退出程序,仅隐藏窗口,托盘图标仍保留,监控功能继续运行(核心设计,保证后台守护不中断)。
    • 只有通过托盘「退出」菜单点击,才会销毁窗口、移除托盘图标,触发程序真正退出。

三、 核心功能:进程监控与自动重启

这是该程序的核心使命,通过独立线程实现后台持续监控:

  1. 监控线程创建MonitorThread()
    • 程序启动后创建一个独立工作线程,与主窗口消息循环互不干扰,避免监控逻辑阻塞窗口交互。
    • 线程首次运行会等待5秒(给系统和目标进程启动缓冲时间),之后进入循环监控。
  2. 进程运行状态检查IsProcessRunning()
    • 通过CreateToolhelp32Snapshot获取系统当前所有进程的快照。
    • 遍历所有进程,通过进程名称(ClassIsland.Desktop.exe)判断目标进程是否在运行,返回布尔值告知监控线程。
  3. 自动重启目标进程StartTargetProcess()
    • 当监控线程检测到目标进程未运行时,会调用该函数尝试启动目标进程。
    • 拼接目标进程的完整路径(固定为C:\\Program Files\\ClassIsland2\\app-2.0.1.1-1\\ClassIsland.Desktop.exe),设置进程启动目录(剥离可执行文件后的文件夹路径),通过CreateProcess创建进程。
    • 进程启动后等待1秒,尝试找到该进程的窗口并置于前台,提升用户体验。
    • 如果启动失败,会弹出错误提示框(显示错误代码),并等待3秒后再次尝试启动一次,提高重启成功率。
  4. 循环监控逻辑
    • 监控线程每30秒检查一次目标进程状态,形成「检查→判断→需要则重启→等待30秒→再检查」的循环。
    • 当程序收到退出指令时,会触发退出事件,线程检测到事件后跳出循环,正常结束线程。

四、 附加功能:窗口文本绘制

当用户双击托盘显示窗口时,窗口会绘制指定文本,提供简单的可视化展示:

  • 窗口收到WM_PAINT(绘制)消息时,会在窗口客户区居中绘制文本「复兴汉服,与子偕行!」。
  • 使用HarmonyOS Sans SC字体,50号字,文本颜色为黑色,背景透明,同时适配DPI缩放,保证不同屏幕缩放比例下文本显示大小正常,不会变形。

五、 程序退出与资源清理

程序正常退出时,会完成完整的资源清理,避免内存泄漏和资源残留:

  1. 触发退出事件,等待监控线程正常结束(最长等待5秒)。
  2. 关闭并释放线程句柄、退出事件句柄、互斥量句柄。
  3. 销毁窗口、移除托盘图标,发送退出消息,结束主消息循环,程序完整退出。

总结

这段代码的核心要点可概括为3点:

  1. 核心使命是后台持续守护ClassIsland.Desktop.exe进程,进程退出则自动重启,保障其持续运行。
  2. 交互形式为托盘驻留+隐藏窗口,关闭窗口不终止守护,仅托盘「退出」可结束程序。
  3. 附带单实例保护、DPI适配、窗口文本绘制等辅助功能,提升程序稳定性和用户体验。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors