面向开发者的编译、部署、项目结构说明。用户使用说明见 README。
MythwareToolkit/
├── src/ ← 源码(9个 .cpp)
├── include/ ← 头文件(4个 .h)
├── res/ ← 资源(图标/图片/manifest/嵌入式exe)
├── scripts/ ← 编译 + 打包 + 签名 + 清理 + 图标转换
├── cert/ ← 证书 + 部署(deploy.bat / mythware.cer )
├── bin/ ← 编译产物 + 打包输出
│ └── pkg/ ← 发行版文件(EXE + ZIP)
├── Makefile
├── README.md
├── CHANGELOG.md
├── RELEASE.md
└── DEV.md
两步走,全部双击运行:
scripts\build.bat → 编译 + 自动签名(自动提权)
cert\deploy.bat → 部署到 C:\Program Files\| 脚本 | 做什么 | 输出 |
|---|---|---|
scripts\build.bat |
编译 + 自动签名 + 随机命名输出到 bin/pkg/ |
bin\MythwareToolkit.exe |
scripts\build_portable.bat |
编译便携版 + 输出到 bin/pkg/ |
bin\MythwareToolkit_Portable.exe |
scripts\package.bat |
打包 ZIP(EXE + deploy.bat + mythware.cer) | bin\pkg\MythwareToolkit.zip |
cert\deploy.bat |
部署到 Program Files + 桌面快捷方式 | C:\Program Files\MythwareToolkit\ |
| UIAccess 版 | 便携版 | |
|---|---|---|
| 构建 | build.bat(编译+签名一步完成) |
build_portable.bat |
| 编译宏 | -DUIACCESS_BUILD |
无 |
| uiAccess | true(超级置顶) |
false(普通置顶) |
| 签名 | build.bat 自动签名 | 不需要 |
| 使用位置 | C:\Program Files\ |
任意位置 |
| 置顶间隔 | 3000ms | 250ms |
| 脚本 | 用途 |
|---|---|
scripts\cleanup.bat |
管理员运行 → 清除证书/程序/快捷方式/临时文件 |
scripts\sign.bat |
手动签名 bin\MythwareToolkit.exe(build.bat 已自动调用) |
convert_icon.bat |
PNG→ICO 多分辨率高清转换 → res\float.ico |
- MinGW64(x86_64-XX.X.X-release-win32-seh-ucrt)
- Windows 10 或更高版本(64 位)
- PowerShell(签名和打包)
Makefile 也支持:make / make portable。
启动时调用 ToggleProcessProtection(),通过 ACL 修改进程安全描述符:给 Everyone 添加 PROCESS_TERMINATE 的 DENY 条目。任务管理器"结束任务"返回"拒绝访问"。
实现位于 process.cpp,使用 GetSecurityInfo / SetEntriesInAclA / SetSecurityInfo。
启动时在 WM_CREATE 中安装永久 WH_CBT 钩子(不存储句柄,进程退出时自动清理)。所有 #32770(对话框)窗口激活时自动调用 SetWindowDisplayAffinity(WDA_EXCLUDEFROMCAPTURE),对教师端屏幕监控不可见。
CBTProc 位于 utils.cpp,在 HCBT_ACTIVATE 中同时处理:按钮文字定制(异常对话框、USB 设置等)和防截屏。永久钩子安装位于 main.cpp WM_CREATE。
floating.cpp WM_CREATE 中直接调用 SetWindowDisplayAffinity(hWnd, WDA_EXCLUDEFROMCAPTURE)。
TrackPopupMenuProtected() 包装函数,在菜单显示期间用定时器轮询 FindWindow("#32768") 并施加防截屏保护。详见 floating.cpp。
v2.1 已修复学生机崩溃问题。如仍遇崩溃,查看:
%TEMP%\MythwareToolkit_crash.log(寄存器 + 栈回溯)%TEMP%\MythwareToolkit_run.log(运行日志)