Controller 是一个自用的远程设备管理项目,由 Windows 客户端服务 WlanMonitorSvc、更新器和 Flask 管理端组成。管理端负责设备在线状态、命令队列、文件传输、日志、屏幕/摄像头画面、进程/内存查看和媒体控制;Windows 客户端以服务方式运行并定期向服务端上报状态、拉取命令。
- 设备总览:显示设备名、网络、版本、前台 Focus、在线状态和快捷操作。
- 远程终端:向指定设备或批量设备发送命令,并查看执行结果。
- 文件管理:浏览远端目录、上传/下载文件、创建目录、删除/重命名文件。
- 任务与内存:查看进程、任务信息、内存映射和大块内存读取结果。
- 屏幕与摄像头:按需开启屏幕流或摄像头流,并支持 FPS 调整。
- 日志与按键记录:查看客户端日志和受控端上报的键盘输入状态。
- 媒体控制:播放/暂停、上一首/下一首、音量、显示器弹跳等媒体相关操作。
- 更新管理:上传
WlanMonitorSvc.exe和更新器,服务端根据 EXE 内构建标记发布 stable/test 通道。 - 稳定性保护:服务启动失败自动重试、服务恢复策略、显示器弹跳命令去重、Focus 中文 UTF-8 传输修正。
Controller/
├── PowerOFF/ # Windows 客户端服务 WlanMonitorSvc 源码与 VS 工程
│ ├── PowerOFF.cpp
│ ├── PowerOFF.vcxproj
│ ├── PromptVersion.ps1 # 编译前版本/通道提示脚本
│ └── Decrypt.py # 本地加密日志辅助解密脚本
├── Updater/ # 客户端热更新辅助程序
│ ├── Updater.cpp
│ └── Updater.vcxproj
├── Server/ # Flask 管理端
│ ├── app.py # 入口,注册所有 Blueprint
│ ├── core.py # 共享状态、缓存清理、加解密等基础逻辑
│ ├── bp_main.py # 首页、设备上报、版本管理
│ ├── bp_file.py # 文件管理
│ ├── bp_terminal.py # 命令下发与结果读取
│ ├── bp_taskmgr.py # 任务管理
│ ├── bp_memory.py # 内存查看
│ ├── bp_screen.py # 屏幕流
│ ├── bp_camera.py # 摄像头流
│ ├── bp_log.py # 日志查看
│ ├── bp_keylog.py # 按键记录查看
│ ├── bp_entertainment.py # 媒体控制
│ └── systemd_example.service
├── PowerOFF.slnx # Visual Studio 解决方案
├── LICENSE.txt
└── README.md
- Windows 10/11 或 Windows Server。
- Visual Studio 2026/Build Tools,包含 MSVC、Windows SDK 和 MSBuild。
- 项目使用 C++20,工程默认输出名为
WlanMonitorSvc.exe。
- Python 3.9+。
- Flask。
- 推荐部署在反向代理或隧道后,并保持
/update/*、/report、/cmd_result等接口可被客户端访问。
在仓库根目录执行:
$env:WLANMONITOR_SKIP_VERSION_PROMPT='1'
& "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe" `
PowerOFF\PowerOFF.vcxproj `
/p:Configuration=Release `
/p:Platform=x64 `
/m输出文件:
PowerOFF\x64\Release\WlanMonitorSvc.exe
构建前请确认 PowerOFF/PowerOFF.cpp 顶部的版本号和通道标记:
#define MANUAL_COMPILE_VERSION "x.y.z"
#define MANUAL_BUILD_CHANNEL "stable"如需构建更新器:
& "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe" `
Updater\Updater.vcxproj `
/p:Configuration=Release `
/p:Platform=x64 `
/mcd Server
python -m pip install flask
python app.py默认监听:
http://0.0.0.0:5000
登录入口:
/login
Linux/systemd 部署时可参考:
Server/systemd_example.service
| 页面 | 用途 |
|---|---|
/ |
设备列表、版本发布、批量操作 |
/terminal/<mac> |
单设备命令终端 |
/files/<mac> |
文件管理 |
/taskmgr/<mac> |
任务管理器 |
/memory/<mac> |
内存查看器 |
/screen/<mac> |
屏幕画面 |
/camera/<mac> |
摄像头画面 |
/view_log/<mac> |
日志查看 |
/keylog/<mac> |
按键记录 |
/entertainment/<mac> |
媒体控制 |
- 修改
MANUAL_COMPILE_VERSION和MANUAL_BUILD_CHANNEL。 - 构建 Release x64 客户端。
- 打开服务端首页,在 Client Update 上传:
WlanMonitorSvc.exe- 可选:
WlanMonitorSvc.updater.exe
- 服务端读取 EXE 内的构建标记,并发布到对应 stable/test 通道。
- 客户端心跳检测到新版本后自动下载更新。
- 服务名:
WlanMonitorSvc。 - 客户端会定期向服务端
/report上报在线状态、网络、版本、前台窗口 Focus、音量和功能开关状态。 - 服务安装后会配置 Windows 服务恢复策略;服务启动失败时会自动重试,降低临时网络或系统服务异常导致的掉线概率。
- 日志默认保存在程序目录下的加密日志文件中,可使用
PowerOFF/Decrypt.py辅助读取。
- 网页端文件管理页位于
/files/<mac>。 - 服务端上传缓存和受控端下载路径分离;如果目标目录没有出现文件,先检查页面命令日志中的
F_CMD:DOWN返回值。 - 服务端允许较大的请求体,
Server/app.py中MAX_CONTENT_LENGTH当前设置为 2GB,适合上传较大的课件和表格文件。
- 内存页位于
/memory/<mac>。 - 大进程读取时优先使用分块/流式结果,避免单次请求超时。
- 如果页面长时间显示 Loading,建议先刷新进程列表,再重新加载目标 PID 的内存映射。
- 客户端采集前台窗口标题时使用 Windows 宽字符 API。
- 上报前会检测状态文本是否已经是 UTF-8,避免中文窗口标题被二次转码造成乱码。
- 如果仍看到乱码,优先确认受控端是否已经更新到包含该修复的版本。
- 媒体页位于
/entertainment/<mac>。 - 显示器弹跳功能会在服务端队列中去重;网页端关闭后会清理旧的开关命令,避免受控端继续反复开关显示器。
- 如需排查残留命令,可检查终端页
/terminal/<mac>的命令发送记录。
- 补充 README 的运维与故障排查说明。
- 明确客户端服务、文件传输、内存查看、Focus 中文显示和媒体控制的排查入口。
- 修复 Focus 上报中文窗口标题时的 UTF-8 二次转码乱码。
- 增加 Windows 重置/恢复界面检测,检测到后触发重启。
- 增强 Windows 服务恢复配置和启动失败自动重试。
- 优化媒体显示器弹跳命令队列,网页端取消后不再残留旧命令。
- 优化终端命令队列中显示器开关相关命令的优先级和去重。
- GitHub Docs: About READMEs
- Microsoft Learn: Create a README for your Git repo
- Microsoft Learn: WideCharToMultiByte function
本项目采用 MIT License。