205 lines
7.0 KiB
C#
205 lines
7.0 KiB
C#
|
|
using System;
|
||
|
|
using System.Diagnostics;
|
||
|
|
using System.IO;
|
||
|
|
using System.Linq;
|
||
|
|
using System.Threading.Tasks;
|
||
|
|
using System.Windows;
|
||
|
|
using System.Windows.Controls;
|
||
|
|
using Microsoft.Win32;
|
||
|
|
using BetterEN5.Services;
|
||
|
|
|
||
|
|
namespace BetterEN5.UI
|
||
|
|
{
|
||
|
|
public partial class BetterEN5Module : UserControl
|
||
|
|
{
|
||
|
|
private readonly InkService _inkService = new();
|
||
|
|
private readonly ConversionService _conversionService = new();
|
||
|
|
private readonly ActivationService _activationService = new();
|
||
|
|
|
||
|
|
public BetterEN5Module()
|
||
|
|
{
|
||
|
|
InitializeComponent();
|
||
|
|
Loaded += OnLoaded;
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void OnLoaded(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
await RefreshStatusAsync();
|
||
|
|
}
|
||
|
|
|
||
|
|
public async Task RefreshStatusAsync()
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var touchOk = await Task.Run(() => TouchFixService.IsTouchWorkingCorrectly());
|
||
|
|
TouchStatus.Text = touchOk ? "✅ IWB 模式已启用" : "⚠️ 未启用 IWB 模式";
|
||
|
|
|
||
|
|
var activationInfo = await Task.Run(() => _activationService.GetCurrentStatus());
|
||
|
|
ActivationStatusText.Text = activationInfo.IsProfessional
|
||
|
|
? $"✅ 专业版已激活 | {activationInfo.LastActivationDate}"
|
||
|
|
: "🔓 社区版 · 点击激活";
|
||
|
|
}
|
||
|
|
catch { }
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ExportInk_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
var dialog = new SaveFileDialog
|
||
|
|
{
|
||
|
|
Title = "导出墨迹",
|
||
|
|
Filter = "墨迹文件|*.ink.json|JSON 文件|*.json|所有文件|*.*",
|
||
|
|
DefaultExt = ".ink.json"
|
||
|
|
};
|
||
|
|
if (dialog.ShowDialog() == true)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
await _inkService.ExportInkAsync(dialog.FileName);
|
||
|
|
InkStatus.Text = $"✅ 已导出: {Path.GetFileName(dialog.FileName)}";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
InkStatus.Text = $"❌ 导出失败: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ImportInk_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
var dialog = new OpenFileDialog
|
||
|
|
{
|
||
|
|
Title = "导入墨迹",
|
||
|
|
Filter = "墨迹文件|*.ink.json|JSON 文件|*.json|所有文件|*.*"
|
||
|
|
};
|
||
|
|
if (dialog.ShowDialog() == true)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
await _inkService.ImportInkAsync(dialog.FileName);
|
||
|
|
InkStatus.Text = "✅ 墨迹已导入";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
InkStatus.Text = $"❌ 导入失败: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ConvertPptx_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
var dialog = new OpenFileDialog
|
||
|
|
{
|
||
|
|
Title = "选择 PowerPoint 文件",
|
||
|
|
Filter = "PowerPoint 文件|*.pptx|所有文件|*.*"
|
||
|
|
};
|
||
|
|
if (dialog.ShowDialog() == true)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var result = await _conversionService.ConvertPptxToEnbxAsync(dialog.FileName);
|
||
|
|
ConversionStatus.Text = $"✅ 转换完成: {Path.GetFileName(result)}";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
ConversionStatus.Text = $"❌ 转换失败: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ConvertEnbx_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
var dialog = new OpenFileDialog
|
||
|
|
{
|
||
|
|
Title = "选择希沃白板课件",
|
||
|
|
Filter = "希沃课件|*.enbx|所有文件|*.*"
|
||
|
|
};
|
||
|
|
if (dialog.ShowDialog() == true)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var result = await _conversionService.ConvertEnbxToPptxAsync(dialog.FileName);
|
||
|
|
ConversionStatus.Text = $"✅ 导出完成: {Path.GetFileName(result)}";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
ConversionStatus.Text = $"❌ 导出失败: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void CheckTouch_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var touchOk = await Task.Run(() => TouchFixService.IsTouchWorkingCorrectly());
|
||
|
|
TouchStatus.Text = touchOk ? "✅ 触摸状态正常" : "⚠️ 触摸可能需要修复";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
TouchStatus.Text = $"❌ 检测失败: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ApplyTouchFix_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
await TouchFixService.ApplyFixAsync();
|
||
|
|
TouchStatus.Text = "✅ 触摸修复已应用,重启后生效";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
TouchStatus.Text = $"❌ 修复失败: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void EnableBoardSupport_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var ok = await _activationService.ApplyBoardSupportPatchAsync();
|
||
|
|
BoardStatus.Text = ok ? "✅ 大屏模式已配置" : "❌ 配置失败";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
BoardStatus.Text = $"❌ 错误: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void EnableIWB_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var ok = await _activationService.EnableIWBForNonTouchAsync();
|
||
|
|
BoardStatus.Text = ok ? "✅ IWB 模式已启用" : "❌ 启用失败";
|
||
|
|
}
|
||
|
|
catch (Exception ex)
|
||
|
|
{
|
||
|
|
BoardStatus.Text = $"❌ 错误: {ex.Message}";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void ActivatePro_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
var dialog = new ActivateDialog();
|
||
|
|
var ownerWindow = Window.GetWindow(this);
|
||
|
|
if (ownerWindow != null) dialog.Owner = ownerWindow;
|
||
|
|
if (dialog.ShowDialog() == true)
|
||
|
|
{
|
||
|
|
var ok = await _activationService.ActivateProfessionalAsync(dialog.LicenseKey);
|
||
|
|
ActivationStatusText.Text = ok ? "✅ 激活成功!专业版已启用" : "❌ 激活码无效";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private async void LaunchInstaller_Click(object sender, RoutedEventArgs e)
|
||
|
|
{
|
||
|
|
var ok = await _activationService.LaunchBen5InstallerAsync();
|
||
|
|
if (!ok)
|
||
|
|
{
|
||
|
|
MessageBox.Show("未找到注册补丁安装程序。\n请将 BEN5_Installer.exe 放置于插件目录。",
|
||
|
|
"提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|