Files
SimpleRemoter/docs/CustomizationGuide.md
2026-04-19 22:55:21 +02:00

590 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# YAMA 定制化开发指南
> 面向技术型客户的二次开发与品牌定制
---
## 目标读者
- 有一定编程基础的客户
- 希望打造自己品牌的服务商
- 承接远程解决方案外包的开发者
---
## 第一部分:定制化概述
### 1. 可定制内容
| 类别 | 可定制项 | 难度 | 需要重编译 |
|------|---------|------|-----------|
| 品牌外观 | 程序名称、图标、版本信息 | 简单 | 是 |
| 菜单控制 | 隐藏/显示特定菜单项 | 简单 | 是 |
| 工具栏 | 隐藏/显示特定按钮 | 简单 | 是 |
| 右键菜单 | 隐藏/显示特定功能 | 简单 | 是 |
| 界面文字 | 修改翻译/添加语言 | 中等 | 否 |
| 功能定制 | 添加新功能、修改行为 | 高级 | 是 |
### 2. 定制方式
#### 2.1 配置文件定制(推荐)
修改 `UIBranding.h` 文件重新编译。
**适合场景:**
- 品牌名称修改
- 隐藏不需要的功能
- 快速生成定制版本
#### 2.2 资源替换定制
替换图标、图片等资源文件。
**适合场景:**
- 更换程序图标
- 自定义启动画面
#### 2.3 语言文件定制
修改语言文件实现界面文字定制。
**适合场景:**
- 修改界面用语
- 添加新语言支持
#### 2.4 源码级定制
修改源代码实现深度定制。
**适合场景:**
- 添加新功能
- 修改现有行为
- 深度集成
---
## 第二部分:品牌定制
### 3. UIBranding.h 配置文件
品牌定制的核心是修改 `server/2015Remote/UIBranding.h` 文件。
**文件位置:** `server/2015Remote/UIBranding.h`
**编码要求:** UTF-8 with BOMMSVC 要求)
#### 3.1 快速定制4 项核心设置)
最少只需修改以下 4 项即可完成基本品牌定制:
```cpp
// 程序名称(窗口标题)
#define BRAND_APP_NAME "YourBrand"
// 启动画面 Logo建议大写
#define BRAND_SPLASH_NAME "YOURBRAND"
// 托盘图标提示
#define BRAND_TRAY_TIP "YourBrand 远程管理"
// 版权信息
#define BRAND_COPYRIGHT "Copyright (C) 2024 YourCompany"
```
#### 3.2 完整品牌设置
| 配置项 | 说明 | 字符限制 |
|--------|------|---------|
| `BRAND_APP_NAME` | 窗口标题、关于对话框 | 可用中文 |
| `BRAND_VERSION` | 版本号(建议 X.Y.Z 格式) | 可用中文 |
| `BRAND_SPLASH_NAME` | 启动画面 Logo 文字 | 可用中文 |
| `BRAND_TRAY_TIP` | 托盘图标悬停提示 | 可用中文 |
| `BRAND_COPYRIGHT` | 版权声明 | 可用中文 |
| `BRAND_SERVICE_DISPLAY` | Windows 服务显示名 | 可用中文 |
| `BRAND_LICENSE_DESC` | 许可证文件描述 | 可用中文 |
#### 3.3 文件和系统标识
以下配置有字符限制,仅支持 ASCII
| 配置项 | 说明 | 限制 |
|--------|------|------|
| `BRAND_DUMP_PREFIX` | 崩溃转储文件前缀 | 仅 ASCII |
| `BRAND_EXE_NAME` | 默认 EXE 文件名 | 仅 ASCII |
| `BRAND_LICENSE_PREFIX` | 许可证文件前缀 | 仅 ASCII |
| `BRAND_DB_NAME` | 数据库文件名 | 仅 ASCII |
| `BRAND_DATA_FOLDER` | 数据目录名 | 仅 ASCII |
| `BRAND_SERVICE_NAME` | Windows 服务名(无空格) | 仅 ASCII |
| `BRAND_REGISTRY_KEY` | 注册表键名(无空格) | 仅 ASCII |
**示例:**
```cpp
#define BRAND_DUMP_PREFIX "MyRemote"
#define BRAND_EXE_NAME "MyRemote.exe"
#define BRAND_LICENSE_PREFIX "MyRemote"
#define BRAND_SERVICE_NAME "MyRemoteService"
#define BRAND_REGISTRY_KEY "MyRemote"
```
### 4. 隐藏菜单项
通过设置宏为 `1` 可以隐藏对应菜单项。
> **完整列表**:以下仅列出常用配置项,完整列表请查看 `UIBranding.h` 文件。
#### 4.1 主菜单项(常用)
```cpp
// 文件菜单
#define HIDE_MENU_SETTINGS 0 // 参数设置
#define HIDE_MENU_WALLET 0 // 钱包
#define HIDE_MENU_NETWORK 0 // 网络
// 工具菜单
#define HIDE_MENU_INPUT_PASSWORD 0 // 输入密码
#define HIDE_MENU_IMPORT_LICENSE 0 // 导入许可证
#define HIDE_MENU_GEN_AUTH 0 // 生成授权
#define HIDE_MENU_GEN_MASTER 0 // 生成Master
#define HIDE_MENU_LICENSE_MGR 0 // 许可证管理
// 参数菜单
#define HIDE_MENU_KBLOGGER 0 // 键盘记录
#define HIDE_MENU_LOGIN_NOTIFY 0 // 登录通知
// 扩展菜单
#define HIDE_MENU_FRPS_FOR_SUB 0 // 下级FRP
```
#### 4.2 使用示例
隐藏高级功能,创建简化版本:
```cpp
// 隐藏 ShellCode 相关功能
#define HIDE_MENU_SHELLCODE_C 1
#define HIDE_MENU_SHELLCODE_BIN 1
#define HIDE_MENU_SHELLCODE_LOAD_TEST 1
#define HIDE_MENU_SHELLCODE_OBFS 1
#define HIDE_MENU_SHELLCODE_AES_C 1
#define HIDE_MENU_SHELLCODE_AES_BIN 1
// 隐藏开发相关功能
#define HIDE_MENU_V2_PRIVATEKEY 1
#define HIDE_MENU_RCEDIT 1
```
### 5. 隐藏工具栏按钮(常用)
```cpp
#define HIDE_TOOLBAR_TERMINAL 0 // 终端管理
#define HIDE_TOOLBAR_PROCESS 0 // 进程管理
#define HIDE_TOOLBAR_DESKTOP 0 // 桌面管理
#define HIDE_TOOLBAR_FILE 0 // 文件管理
#define HIDE_TOOLBAR_AUDIO 0 // 语音管理
#define HIDE_TOOLBAR_VIDEO 0 // 视频管理
#define HIDE_TOOLBAR_SERVICE 0 // 服务管理
#define HIDE_TOOLBAR_REGISTER 0 // 注册表管理
#define HIDE_TOOLBAR_KEYBOARD 0 // 键盘记录
#define HIDE_TOOLBAR_SETTINGS 0 // 参数设置
#define HIDE_TOOLBAR_BUILD 0 // 生成服务端
```
### 6. 隐藏右键菜单项(常用)
```cpp
// 远程桌面选项
#define HIDE_CTX_VIRTUAL_DESKTOP 0 // 虚拟桌面
#define HIDE_CTX_GRAY_DESKTOP 0 // 灰度桌面
#define HIDE_CTX_REMOTE_DESKTOP 0 // 远程桌面
#define HIDE_CTX_H264_DESKTOP 0 // H264桌面
// 系统操作
#define HIDE_CTX_MACHINE_SHUTDOWN 0 // 关机
#define HIDE_CTX_MACHINE_REBOOT 0 // 重启
#define HIDE_CTX_MACHINE_LOGOUT 0 // 注销
// 执行命令
#define HIDE_CTX_EXECUTE_DOWNLOAD 0 // 下载执行
#define HIDE_CTX_EXECUTE_UPLOAD 0 // 上传执行
```
---
## 第三部分:视觉定制
### 7. 图标替换
#### 7.1 图标文件位置
图标资源位于 `server/2015Remote/res/` 目录:
| 文件 | 用途 | 尺寸要求 |
|------|------|---------|
| `2015Remote.ico` | 主程序图标 | 多尺寸 ICO |
| `tray_online.ico` | 托盘在线图标 | 16x16, 32x32 |
| `tray_offline.ico` | 托盘离线图标 | 16x16, 32x32 |
#### 7.2 图标格式要求
ICO 文件应包含多种尺寸:
- 16x16小图标、托盘
- 32x32标准图标
- 48x48大图标
- 256x256高清图标
**推荐工具:**
- IcoFX
- GIMP
- 在线 ICO 生成器
#### 7.3 替换步骤
1. 准备新图标文件
2. 备份原有图标
3. 将新图标复制到 `res/` 目录,保持文件名一致
4. 重新编译程序
### 8. 启动画面定制
启动画面的 Logo 文字由 `BRAND_SPLASH_NAME` 配置:
```cpp
#define BRAND_SPLASH_NAME "YOURBRAND"
```
**建议:**
- 使用大写字母,视觉效果更好
- 保持简短(建议 8 个字符以内)
- 可以使用中文
---
## 第四部分:界面文字定制
### 9. 语言文件机制
YAMA 使用 INI 格式的语言文件实现多语言支持。
#### 9.1 语言文件位置
**源代码位置:**
```
server/2015Remote/lang/
├── en_US.ini # 英文翻译
├── zh_TW.ini # 繁体中文翻译
└── (其他语言)
```
**运行时位置:** 程序会从程序同目录的 `lang/` 文件夹读取语言文件。
**发布时:**`lang/` 文件夹与程序放在同一目录。
#### 9.2 文件格式
```ini
; 注释行
简体中文原文=翻译文本
另一条原文=另一条翻译
```
**编码要求:** GB2312不是 UTF-8
#### 9.3 添加翻译
由于语言文件必须使用 GB2312 编码,建议使用以下方法添加翻译:
**方法 A使用支持 GB2312 编码的编辑器**
1. 使用 Notepad++、VS Code安装编码插件等编辑器
2. 打开语言文件,确认编码为 GB2312
3. 添加新的翻译条目
4. 保存时确保保持 GB2312 编码
**方法 B使用 PowerShell 命令**
```powershell
# 追加单条翻译
$gb2312 = [System.Text.Encoding]::GetEncoding('GB2312')
$content = "新功能=New Feature`r`n"
[System.IO.File]::AppendAllText('lang\en_US.ini', $content, $gb2312)
```
> **注意**:直接用记事本编辑可能导致编码错误,请使用专业编辑器。
### 10. 创建新语言包
1. 复制 `en_US.ini` 作为模板
2. 重命名为新语言代码(如 `ja_JP.ini`
3. 翻译所有条目
4. 保存为 GB2312 编码
---
## 第五部分:开发环境
### 11. 环境要求
| 组件 | 版本要求 |
|------|---------|
| Visual Studio | 2019 或 2022 |
| Windows SDK | 10.0.19041.0 或更高 |
| C++ 标准 | C++17 |
| 工具集 | v142 (MSVC v142) |
| MFC 库 | C++ MFC for v142 build tools |
### 12. 项目结构
```
SimpleRemoter/
├── server/2015Remote/ # 主控程序源码
│ ├── UIBranding.h # 品牌配置
│ ├── 2015RemoteDlg.cpp # 主对话框
│ ├── SettingDlg.cpp # 设置页面
│ ├── BuildDlg.cpp # 生成对话框
│ ├── res/ # 资源文件
│ └── lang/ # 语言文件
├── client/ # 受管端源码
├── common/ # 公共代码
├── linux/ # Linux 客户端
└── Bin/ # 编译输出
```
### 13. 关键文件说明
| 文件 | 功能 |
|------|------|
| `UIBranding.h` | 品牌和功能开关配置 |
| `2015RemoteDlg.cpp` | 主窗口、菜单、状态栏 |
| `SettingDlg.cpp` | 设置对话框 |
| `BuildDlg.cpp` | 生成受管程序对话框 |
| `CPasswordDlg.cpp` | 授权生成对话框 |
| `FrpsForSubDlg.cpp` | FRP 代理配置 |
| `ScreenSpyDlg.cpp` | 远程桌面窗口 |
| `FileManagerDlg.cpp` | 文件管理窗口 |
| `TerminalDlg.cpp` | 远程终端窗口 |
---
## 第六部分:编译与发布
### 14. 编译脚本
使用提供的编译脚本:
```powershell
# 完整编译(先编译依赖项,再编译主控)
.\build.ps1
# 仅编译主控程序(跳过依赖项,适合快速重编译)
.\build.ps1 -ServerOnly
# 发版模式(重编译所有 + UPX 压缩)
.\build.ps1 -Publish
# Debug 模式
.\build.ps1 -Config Debug
# 编译 32 位和 64 位
.\build.ps1 -Platform all
# 清理后重编译
.\build.ps1 -Clean
```
### 15. 编译输出
| 输出文件 | 位置 |
|---------|------|
| 64 位主控 | `Bin/Yama_x64.exe` |
| 32 位主控 | `Bin/Yama_x86.exe` |
### 16. 发布准备
#### 16.1 发布检查清单
- [ ] 修改 `UIBranding.h` 中的品牌信息
- [ ] 替换程序图标(如需要)
- [ ] 使用 Release 配置编译
- [ ] 使用 `-Publish` 进行 UPX 压缩
- [ ] 测试所有功能正常
- [ ] 测试授权导入功能
- [ ] 测试受管程序生成
#### 16.2 文件清单
发布时需要包含:
```
YourBrand/
├── YourBrand.exe # 主程序(重命名)
└── lang/ # 语言文件(可选)
├── en_US.ini
└── zh_TW.ini
```
---
## 第七部分:常见定制场景
### 17. 场景一:简单品牌替换
**需求:** 更换程序名称和图标
**步骤:**
1. 修改 `UIBranding.h` 中的品牌名称
2. 替换 `res/` 目录中的图标文件
3. 编译:`.\build.ps1 -Publish`
4. 重命名输出文件
### 18. 场景二:功能精简版
**需求:** 创建只保留基本功能的精简版
**步骤:**
1.`UIBranding.h` 中隐藏高级功能:
```cpp
// 隐藏开发相关
#define HIDE_MENU_SHELLCODE_C 1
#define HIDE_MENU_SHELLCODE_BIN 1
#define HIDE_MENU_V2_PRIVATEKEY 1
#define HIDE_MENU_RCEDIT 1
// 隐藏高级功能
#define HIDE_TOOLBAR_AUDIO 1
#define HIDE_TOOLBAR_VIDEO 1
#define HIDE_TOOLBAR_REGISTER 1
#define HIDE_TOOLBAR_KEYBOARD 1
```
2. 编译发布
### 19. 场景三:多品牌版本
**需求:** 为不同客户生成不同品牌的版本
**方案:**
1. 创建多个 `UIBranding.h` 副本(如 `UIBranding_ClientA.h`
2. 编译前复制对应配置文件覆盖 `UIBranding.h`
3. 编译并重命名输出
4. 或编写脚本自动化此过程
---
## 第八部分:最佳实践
### 20. 版本管理建议
#### 20.1 分支策略
```
main (或 master) # 上游原版
├── custom/base # 基础定制
├── custom/clientA # 客户 A 定制
└── custom/clientB # 客户 B 定制
```
#### 20.2 保持同步
定期从上游合并更新:
```bash
git fetch upstream
git merge upstream/main
# 解决冲突后提交
```
### 21. 定制文档
建议记录定制内容:
| 记录项 | 说明 |
|--------|------|
| 品牌配置 | 修改了哪些 `UIBranding.h` 配置 |
| 隐藏功能 | 隐藏了哪些菜单/按钮 |
| 图标变更 | 替换了哪些图标文件 |
| 源码修改 | 如有源码修改,记录位置和原因 |
### 22. 测试清单
每次定制后测试:
- [ ] 程序能正常启动
- [ ] 品牌信息显示正确
- [ ] 图标显示正确
- [ ] 授权导入功能正常
- [ ] 受管程序生成正常
- [ ] 远程桌面功能正常
- [ ] 文件管理功能正常
- [ ] 隐藏的功能确实不显示
---
## 附录
### A. 配置项速查表
| 配置项 | 文件 | 说明 |
|--------|------|------|
| 程序名称 | `UIBranding.h` | `BRAND_APP_NAME` |
| 版本号 | `UIBranding.h` | `BRAND_VERSION` |
| 启动 Logo | `UIBranding.h` | `BRAND_SPLASH_NAME` |
| 托盘提示 | `UIBranding.h` | `BRAND_TRAY_TIP` |
| 版权信息 | `UIBranding.h` | `BRAND_COPYRIGHT` |
| 隐藏菜单 | `UIBranding.h` | `HIDE_MENU_*` |
| 隐藏工具栏 | `UIBranding.h` | `HIDE_TOOLBAR_*` |
| 隐藏右键菜单 | `UIBranding.h` | `HIDE_CTX_*` |
| 界面翻译 | `lang/*.ini` | 键值对 |
### B. 资源文件清单
| 资源 | 位置 | 格式 |
|------|------|------|
| 主程序图标 | `res/2015Remote.ico` | ICO |
| 托盘图标 | `res/tray_*.ico` | ICO |
| 工具栏图标 | `res/toolbar.bmp` | BMP |
### C. 常见问题
| 问题 | 原因 | 解决方案 |
|------|------|---------|
| 编译报错 | VS 版本/工具集 | 确认使用 VS2019+ 和 v142 工具集 |
| 中文乱码 | 文件编码错误 | UIBranding.h 需 UTF-8 with BOM |
| 图标不显示 | 格式不正确 | 确认 ICO 包含多尺寸 |
| 翻译不生效 | 编码错误 | 语言文件需 GB2312 编码 |
| 菜单仍显示 | 未重编译 | 修改 UIBranding.h 后需重编译 |
### D. 注意事项
**请勿修改以下配置**(会导致功能异常):
```cpp
// 修改会导致所有已发放许可证失效
#define BRAND_LICENSE_MAGIC "YAMA"
// 修改会导致单实例检测失败
#define BRAND_EVENT_PREFIX "YAMA"
// 修改会导致超管密码配置失效
#define BRAND_ENV_VAR "YAMA_PWD"
```
---
## 技术支持
| 渠道 | 联系方式 |
|------|---------|
| QQ | 962914132 |
| Telegram | [@doge_grandfather](https://t.me/doge_grandfather) |
---
## 相关文档
- [快速部署指南](QuickStart.md) - 基础部署
- [多级网络搭建指南](NetworkSetup.md) - 网络架构
- [日常使用手册](UserManual.md) - 功能使用
- [代理商运营手册](AgentManual.md) - 授权管理