# 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 BOM(MSVC 要求) #### 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) - 授权管理