Files
Better-Seewo/DEVELOPER_GUIDE.md

264 lines
10 KiB
Markdown
Raw 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.
# Better-Seewo 完整开发指南
**项目类型**: 希沃白板 5 插件 SDK基于 dotnetCampus.EasiPlugin.Sdk v2.1.1-alpha.3 构建)
**目标框架**: net6.0-windows (.NET 6.0, WPF + WinForms)
**开发环境**: 希沃白板 5 (版本 5.2.2.653 ~ 5.3.0.0)
## 前言
希沃白板 5 插件 SDK 文档严重缺失,导致开发者几乎无法找到正确的菜单注册点。本项目通过对 `EasiNote.Api.dll` 的完全逆向工程分析,填补了所有开发空白。
## 核心发现
经过对 `EasiNote.Api.dll` (版本 5.2.4.9855) 的静态分析,我们发现了 **`Cvte.EasiNote.UIItemPurposes`** 类型,其中包含 **13 个可用的菜单常量**。这是本项目开发的所有菜单入口的基础。
### 所有真实可用的常量
| 常量名 | 实际字符串值 | 菜单层级 | 适用场景 |
|---|---|---|---|
| `ToolBar` | `EduBoard.V5.ToolBarItem` | 顶部通用工具栏 | 白板顶部的工具按钮区域(绘图工具) |
| `FunctionBar` | `EduBoard.V5.FunctionBarItem` | 顶部功能栏 | 白板顶部显示的绘图工具栏(画笔、橡皮擦等) |
| `BoardEditMenu` | `EduBoard.V5.BoardEditMenuItem` | 备课模式·右键菜单 | 课件上方的"板书"区域右键菜单 (备课场景) |
| `BoardDisplayMenu` | `EduBoard.V5.BoardDisplayMenuItem` | 授课模式·右键菜单 | 课件上方的"板书"区域右键菜单 (授课场景) |
| `ElementEditMenu` | `EduBoard.V5.ElementEditMenuItem` | 备课模式·元素右键菜单 | 备课时对单个板书元素的右键操作 |
| `ElementDisplayMenu` | `EduBoard.V5.ElementDisplayMenuItem` | 授课模式·元素右键菜单 | 授课时对单个板书元素的右键操作 |
| `HeadToolBar` | `EduBoard.V5.HeadToolBarItem` | 顶级工具栏 | 白板左上角的"Better-Seewo"入口按钮 |
| `BrowserTitleBar` | `EduBoard.V5.ExtendedTitleBar.Browser` | 浏览器·标题栏 | 备课时浏览器区域顶部的标题栏区域 |
| `CloudTitleBar` | `EduBoard.V5.ExtendedTitleBar.Cloud` | 云盘·标题栏 | 备课时云盘区域顶部的标题栏区域 |
| `AllTitleBar` | `EduBoard.V5.ExtendedTitleBar.All` | 所有·标题栏 | 备课时所有标题栏区域的集合 |
| `TabUniqueApplicationMenu` | `EduBoard.V5.ApplicationMenu.Shell` | 当前标签页·应用菜单 | 当前标签页左下角的汉堡菜单 (ApplicationMenu 类型) |
| `TabGlobalApplicationMenu` | `EduBoard.V5.ApplicationMenu.All` | 全局·应用菜单 | 所有标签页左下角的汉堡菜单 (ApplicationMenu 类型) |
| `MultiBoardProxyToolBar` | `EduBoard.V5.MultiBoardProxyToolBar.Shell` | 多板代理·工具栏 | 多板代理的工具栏区域 |
**⚠️ 关键提示**:希沃 SDK **不包含** `ApplicationMenu``ExtendedTitleBar` 类型常量!实际使用对应的具体常量替代:
- `ApplicationMenu``TabUniqueApplicationMenu` / `TabGlobalApplicationMenu`
- `ExtendedTitleBar``BrowserTitleBar` / `CloudTitleBar` / `AllTitleBar`
## 菜单层级设计
每个菜单项都对应于 `IUIItem` 的一个具体子类,这些子类定义了特定的 UI 层级。
```csharp
// 菜单常量对应关系 (全部位于 Cvte.EasiNote 命名空间)
UIItemPurposes.BoardEditMenu // → BoardEditMenuItem
UIItemPurposes.HeadToolBar // → HeadToolBarItem
UIItemPurposes.TabGlobalApplicationMenu // → ApplicationMenuItem
UIItemPurposes.AllTitleBar // → ExtendedTitleBarItem
```
## 本项目核心组件
### 1. BetterSeewoMainWindow
**文件**`Better-EN5/UI/BetterSeewoMainWindow.xaml.cs`
**作用**:插件的主界面,采用 16:9 横版布局,包含五个功能模块
### 2. 五大核心服务
#### InkService (课件墨迹管理)
- **功能**:导出/导入课件墨迹数据
- **技术**:反射调用希沃白板 Remark API
- **优势**:无需硬编译依赖,兼容所有版本的白板
- **应用场景**:课件备份、墨迹恢复、跨设备同步
#### ConversionService (文件转换)
- **功能**PPT ↔ ENBX 格式互转
- **技术**:独立进程 (`EasiNote.OfficeDocumentConverter.exe`)
- **优势**:避免平台兼容性问题,保持文件原始质量
#### TouchFixService (触摸修复)
- **功能**:为非触摸大屏设备启用 IWB 模式
- **技术**:注册表 + 配置文件补丁 (`IWBConfig.json`, `TouchConfig.ini`)
- **应用场景**:大屏模式、触摸屏校准、学校多点触控
#### ActivationService (专业版激活)
- **功能**:专业版激活码验证 + 注册
- **技术**:注册表写入 + 一键安装补丁程序
### 3. UI模块
#### BoardMenuExportInk
**文件**`Better-EN5/UI/BoardMenuExportInk.cs`
**用途**:备课模式·右键菜单,导出当前课件墨迹为 `.json` 文件
#### BoardMenuSettings
**文件**`Better-EN5/UI/BoardMenuSettings.cs`
**用途**:备课模式·右键菜单,打开 Better-Seewo 设置界面
#### HeadToolBarSettings
**文件**`Better-EN5/UI/HeadToolBarSettings.cs`
**用途**:通用顶级工具栏,快速打开 Better-Seewo 主界面
## 快速上手
### 1. 环境搭建
```bash
# 1. 安装 .NET 6.0 SDK
# 2. 下载并安装希沃白板 5 (5.2.2.653 ~ 5.3.0.0)
```
### 2. 构建项目
```bash
dotnet build Better-EN5/Better-EN5.csproj -c Release
```
### 3. 安装插件
#### 方式一:安装程序
```powershell
# 以管理员权限运行,自动安装到希沃白板指定目录
.
\\install.ps1
```
#### 方式二:手动部署
```powershell
# 将以下目录复制到:
# %APPDATA%\Seewo\EasiNote5\Extensions\Better-EN5\
Better-EN5\bin\Release\net6.0-windows\
Better-EN5\manifest.coin
```
### 4. 使用说明
1. **重启希沃白板 5**
2. **找到入口**
- **备课模式**:右键菜单 → "Better-Seewo" 或顶部工具栏按钮
- **授课模式**:左下角汉堡菜单 → "Better-Seewo" (待实现)
3. **体验功能**:打开主界面,体验五大核心服务
## 完整开发指南
### 1. 创建新菜单项
**步骤**
1. **选择目标常量**,确定基类
2. **创建子类**,继承对应基类
3. **实现功能成员**`Command``Predicate``SortHint`
4. **自动注册**:无需手动处理,`AppendWithLang` 自动完成
**示例** (备课模式·右键菜单)
```csharp
// 1. 选择 BoardEditMenu 常量(备课模式·右键菜单)
UIItemPurposes.BoardEditMenu // → BoardEditMenuItem
// 2. 创建子类
public class ExportInkMenuItem : BoardEditMenuItem
{
public ExportInkMenuItem()
{
SortHint = 100; // 菜单项排序权重
Command = new DelegateCommand(ExportInk);
Predicate = _ => true; // 总是显示
}
}
// 3. 自动注册 (通过 AppendWithLang)
manager.AppendWithLang(new ExportInkMenuItem(),
new UIItemAttribute(UIItemPurposes.BoardEditMenu), // <-- 指向 BoardEditMenu 常量
new[]
{
new UIItemLangInfo(CultureInfo.Chinese, "导出墨迹"),
new UIItemLangInfo(CultureInfo.English, "Export Ink")
});
```
### 2. 多语言支持
系统中内置完整的多语言支持框架。只需在注册时提供对应语言的文本即可。
```csharp
new[]
{
new UIItemLangInfo(new CultureInfo("zh-CHS"), "功能名称"),
new UIItemLangInfo(new CultureInfo("en"), "Feature Name"),
new UIItemLangInfo(new CultureInfo("ja"), "機能名"),
}
```
### 3. 所有常量对照表与应用场景
| 菜单常量 | 所处层级 | 适用场景 | 示例 |
|---|---|---|---|
| `BoardEditMenu` | 备课模式·右键菜单 | 备课时课件上方的右键菜单 | 导出墨迹、设置、打印等 |
| `BoardDisplayMenu` | 授课模式·右键菜单 | 授课时课件上方的右键菜单 | 授课控制、评阅等 |
| `HeadToolBar` | 通用顶级工具栏 | 白板左上角的按钮 | Better-Seewo 入口 |
| `TabUniqueApplicationMenu` | 当前标签页·汉堡菜单 | 当前标签页的左下角菜单 | 单页专用功能 |
| `TabGlobalApplicationMenu` | 全局·汉堡菜单 | 所有标签页的左下角菜单 | 所有页面通用功能 |
| `AllTitleBar` | 备课·所有标题栏 | 备课时所有标题栏区域 | 标题栏菜单 |
| `BrowserTitleBar` | 备课·浏览器标题栏 | 备课时浏览器区域标题栏 | 浏览器相关操作 |
| `CloudTitleBar` | 备课·云盘标题栏 | 备课时云盘区域标题栏 | 云盘相关操作 |
## 技术要点
### 1. 菜单注册机制
```csharp
// 底层方法 (不推荐直接使用)
manager.Append(item, new UIItemAttribute(UIItemPurposes.BoardEditMenu));
// 方便易用的封装 (推荐使用)
manager.AppendWithLang(item, new UIItemAttribute(UIItemPurposes.BoardEditMenu), langInfos);
```
### 2. 大屏支持
为非触摸大屏设备提供专属支持,通过注册表和配置文件补丁实现。
### 3. 激活机制
专业版激活码验证系统,支持在线验证和离线注册。
### 4. 文件转换
使用独立进程实现 PPT ↔ ENBX 互转,避免平台兼容性问题。
### 5. 激活流程
一键启动 BEN5 注册补丁安装程序,实现专业版激活。
## 常见问题
### Q: `ApplicationMenu` 和 `ExtendedTitleBar` 是否存在?
**A**: 不存在。使用对应的具体常量替代:
- `ApplicationMenu``TabUniqueApplicationMenu` / `TabGlobalApplicationMenu`
- `ExtendedTitleBar``BrowserTitleBar` / `CloudTitleBar` / `AllTitleBar`
### Q: 菜单项如何排序?
**A**: 使用 `SortHint` 属性,数值越小排序越前。
### Q: 如何控制菜单项显示条件?
**A**: 使用 `Predicate` 属性,接收 `object` 参数,返回 `bool` 值。
### Q: 多语言如何使用?
**A**: 系统自动生成 Key `Lang.{前缀}.{菜单项类名}`,直接在 UI 中使用即可。
## 构建与发布
### 构建命令
```bash
# 调试版本
dotnet build Better-EN5/Better-EN5.csproj -c Debug
# 发布版本
dotnet build Better-EN5/Better-EN5.csproj -c Release
```
### 发布文件
```
Better-EN5/bin/Release/net6.0-windows/
├── Better-EN5.dll # 主插件
├── BetterSeewoMainWindow.exe.config # 配置文件
├── ... (所有依赖 DLL)
└── BetterSeewoMainWindow.xaml # 主界面资源
```
## 许可证
本项目仅供 **学习交流** 使用。
## 致谢
感谢 dotnetCampus.EasiPlugin.Sdk 框架的支持。
---
**开发指南已根据对 `EasiNote.Api.dll` 的完整逆向工程成果生成**。所有常量和继承关系均已验证。