v1.1.2: 新增 PatchService 安装/卸载补丁系统 + 品牌更新
This commit is contained in:
@@ -15,19 +15,12 @@
|
||||
<Color x:Key="Fg">#D0D0E0</Color>
|
||||
<Color x:Key="SubFg">#707090</Color>
|
||||
<SolidColorBrush x:Key="BorderBrush" Color="#25FFFFFF"/>
|
||||
<QuadraticEase x:Key="EaseOut" EasingMode="EaseOut"/>
|
||||
</Window.Resources>
|
||||
|
||||
<Window.RenderTransform>
|
||||
<ScaleTransform ScaleX="1" ScaleY="1"/>
|
||||
</Window.RenderTransform>
|
||||
|
||||
<Border CornerRadius="12" Background="#0F0F1A" BorderBrush="{StaticResource BorderBrush}"
|
||||
BorderThickness="1">
|
||||
<Border CornerRadius="12" Background="#0F0F1A" BorderBrush="{StaticResource BorderBrush}" BorderThickness="1">
|
||||
<Border.Effect>
|
||||
<DropShadowEffect BlurRadius="24" ShadowDepth="4" Opacity="0.3" Color="Black"/>
|
||||
</Border.Effect>
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="34"/>
|
||||
@@ -76,7 +69,12 @@
|
||||
<StackPanel Margin="0,8">
|
||||
<TextBlock Text="功能模块" FontSize="11" Foreground="{StaticResource SubFg}"
|
||||
Margin="16,8,16,4"/>
|
||||
<RadioButton x:Name="NavInk" GroupName="Nav" IsChecked="True"
|
||||
<RadioButton x:Name="NavInstall" GroupName="Nav" IsChecked="True"
|
||||
Content=" 安装管理" Foreground="{StaticResource Fg}"
|
||||
Background="Transparent" BorderThickness="0"
|
||||
Cursor="Hand" Height="36" Padding="16,0"
|
||||
Checked="NavChanged"/>
|
||||
<RadioButton x:Name="NavInk" GroupName="Nav"
|
||||
Content=" 墨迹管理" Foreground="{StaticResource Fg}"
|
||||
Background="Transparent" BorderThickness="0"
|
||||
Cursor="Hand" Height="36" Padding="16,0"
|
||||
@@ -91,11 +89,6 @@
|
||||
Background="Transparent" BorderThickness="0"
|
||||
Cursor="Hand" Height="36" Padding="16,0"
|
||||
Checked="NavChanged"/>
|
||||
<RadioButton x:Name="NavBoard" GroupName="Nav"
|
||||
Content=" 大屏支持" Foreground="{StaticResource Fg}"
|
||||
Background="Transparent" BorderThickness="0"
|
||||
Cursor="Hand" Height="36" Padding="16,0"
|
||||
Checked="NavChanged"/>
|
||||
<RadioButton x:Name="NavActivate" GroupName="Nav"
|
||||
Content=" 激活" Foreground="{StaticResource Fg}"
|
||||
Background="Transparent" BorderThickness="0"
|
||||
@@ -111,8 +104,35 @@
|
||||
<ScrollViewer Grid.Column="2" VerticalScrollBarVisibility="Auto"
|
||||
Background="#0D0D18" Padding="24,16">
|
||||
<StackPanel x:Name="ContentPanel">
|
||||
|
||||
<!-- Install Management -->
|
||||
<StackPanel x:Name="PanelInstall" Visibility="Visible">
|
||||
<TextBlock Text="Better-Seewo 安装管理" FontSize="20" FontWeight="SemiBold"
|
||||
Foreground="#60B0FF" Margin="0,0,0,8"/>
|
||||
<TextBlock x:Name="InstallStatusText" Text="正在检测状态..." FontSize="13"
|
||||
Foreground="{StaticResource SubFg}" Margin="0,0,0,16"/>
|
||||
<Button x:Name="InstallBtn" Content="安装补丁" Width="180" Height="34"
|
||||
Margin="0,0,0,8" Cursor="Hand" Click="InstallPatch_Click"/>
|
||||
<Button x:Name="UninstallBtn" Content="卸载补丁" Width="180" Height="34"
|
||||
Margin="0,0,0,8" Cursor="Hand" Click="UninstallPatch_Click"
|
||||
IsEnabled="False"/>
|
||||
<TextBlock x:Name="PatchDetailText" FontSize="12"
|
||||
Foreground="{StaticResource SubFg}" Margin="0,8,0,0"
|
||||
TextWrapping="Wrap"/>
|
||||
<TextBlock Text="" Margin="0,16,0,0"/>
|
||||
<TextBlock Text="说明" FontSize="16" FontWeight="SemiBold"
|
||||
Foreground="{StaticResource Fg}" Margin="0,0,0,8"/>
|
||||
<TextBlock TextWrapping="Wrap" FontSize="12"
|
||||
Foreground="{StaticResource SubFg}">
|
||||
• 安装补丁:备份希沃白板关键配置文件,然后应用增强补丁。
|
||||
• 卸载补丁:从备份文件(.bak)还原原始配置,清除注册表修改。
|
||||
• 安装后请重启希沃白板使补丁生效。
|
||||
• 补丁不修改希沃白板主程序文件,仅修改配置和注册表。
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Ink Module -->
|
||||
<StackPanel x:Name="PanelInk" Visibility="Visible">
|
||||
<StackPanel x:Name="PanelInk" Visibility="Collapsed">
|
||||
<TextBlock Text="墨迹管理" FontSize="20" FontWeight="SemiBold"
|
||||
Foreground="#60B0FF" Margin="0,0,0,16"/>
|
||||
<TextBlock Text="导出/导入希沃白板课件中的笔迹和标注" FontSize="13"
|
||||
@@ -144,17 +164,6 @@
|
||||
<TextBlock x:Name="TouchStatus" FontSize="12" Foreground="{StaticResource SubFg}" Margin="0,8,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Board Module -->
|
||||
<StackPanel x:Name="PanelBoard" Visibility="Collapsed">
|
||||
<TextBlock Text="大屏支持" FontSize="20" FontWeight="SemiBold"
|
||||
Foreground="#60B0FF" Margin="0,0,0,16"/>
|
||||
<TextBlock Text="为非触摸大屏启用完整白板模式" FontSize="13"
|
||||
Foreground="{StaticResource SubFg}" Margin="0,0,0,16"/>
|
||||
<Button Content="配置大屏模式" Width="180" Height="34" Margin="0,0,0,8" Cursor="Hand" Click="EnableBoardSupport_Click"/>
|
||||
<Button Content="启用 IWB 模式" Width="180" Height="34" Margin="0,0,0,8" Cursor="Hand" Click="EnableIWB_Click"/>
|
||||
<TextBlock x:Name="BoardStatus" FontSize="12" Foreground="{StaticResource SubFg}" Margin="0,8,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Activate Module -->
|
||||
<StackPanel x:Name="PanelActivate" Visibility="Collapsed">
|
||||
<TextBlock Text="专业版激活" FontSize="20" FontWeight="SemiBold"
|
||||
@@ -171,7 +180,7 @@
|
||||
|
||||
<!-- Footer -->
|
||||
<Border Grid.Row="2" Background="#1A1A2E" CornerRadius="0,0,12,12">
|
||||
<TextBlock Text="雾启工作室 · 雾生万象,启以为光" FontSize="11"
|
||||
<TextBlock Text="雾启工作室 × Macrohard Studio · 雾生万象,启以为光" FontSize="11"
|
||||
Foreground="#404058" HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
@@ -4,7 +4,6 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media.Animation;
|
||||
using Microsoft.Win32;
|
||||
using BetterEN5.Services;
|
||||
|
||||
@@ -13,8 +12,8 @@ namespace BetterEN5.UI
|
||||
public partial class BetterSeewoMainWindow : Window
|
||||
{
|
||||
private readonly InkService _inkService = new();
|
||||
private readonly ConversionService _conversionService = new();
|
||||
private readonly ActivationService _activationService = new();
|
||||
private readonly PatchService _patchService = new();
|
||||
|
||||
public BetterSeewoMainWindow()
|
||||
{
|
||||
@@ -22,36 +21,95 @@ namespace BetterEN5.UI
|
||||
Loaded += OnLoaded;
|
||||
}
|
||||
|
||||
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||
private async void OnLoaded(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var sb = (Storyboard)TryFindResource("ScaleInStoryboard");
|
||||
if (sb != null) BeginStoryboard(sb);
|
||||
_ = RefreshStatusAsync();
|
||||
await RefreshInstallStatusAsync();
|
||||
}
|
||||
|
||||
private void NavChanged(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender == NavInk) ShowPanel(PanelInk);
|
||||
if (sender == NavInstall) ShowPanel(PanelInstall);
|
||||
else if (sender == NavInk) ShowPanel(PanelInk);
|
||||
else if (sender == NavConvert) ShowPanel(PanelConvert);
|
||||
else if (sender == NavTouch) ShowPanel(PanelTouch);
|
||||
else if (sender == NavBoard) ShowPanel(PanelBoard);
|
||||
else if (sender == NavActivate) ShowPanel(PanelActivate);
|
||||
}
|
||||
|
||||
private void ShowPanel(StackPanel panel)
|
||||
{
|
||||
foreach (var p in new[] { PanelInk, PanelConvert, PanelTouch, PanelBoard, PanelActivate })
|
||||
foreach (var p in new[] { PanelInstall, PanelInk, PanelConvert, PanelTouch, PanelActivate })
|
||||
p.Visibility = p == panel ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private async Task RefreshStatusAsync()
|
||||
private async Task RefreshInstallStatusAsync()
|
||||
{
|
||||
var touchOk = await Task.Run(() => TouchFixService.IsTouchWorkingCorrectly());
|
||||
TouchStatus.Text = touchOk ? "✅ IWB 模式已启用" : "⚠️ 未启用 IWB 模式";
|
||||
var info = await Task.Run(() => _activationService.GetCurrentStatus());
|
||||
ActivationStatusText.Text = info.IsProfessional
|
||||
? $"✅ 专业版 · {info.LastActivationDate}"
|
||||
: "🔓 社区版";
|
||||
var installed = await Task.Run(() => _patchService.IsInstalled());
|
||||
InstallBtn.IsEnabled = !installed;
|
||||
UninstallBtn.IsEnabled = installed;
|
||||
InstallStatusText.Text = installed
|
||||
? "✅ 补丁已安装"
|
||||
: "⚠️ 补丁未安装";
|
||||
if (installed)
|
||||
{
|
||||
var m = await Task.Run(() => _patchService.GetManifest());
|
||||
PatchDetailText.Text = $"版本: {m.Version} | 安装时间: {m.InstallTime} | 备份文件: {m.Backups.Count} 个 | 注册表项: {m.RegistryKeys.Count} 个";
|
||||
}
|
||||
else
|
||||
{
|
||||
PatchDetailText.Text = "尚未安装补丁。点击「安装补丁」将备份关键配置并应用增强补丁。";
|
||||
}
|
||||
}
|
||||
|
||||
private async void InstallPatch_Click(object s, RoutedEventArgs e)
|
||||
{
|
||||
var progress = new Progress<string>(msg =>
|
||||
{
|
||||
Dispatcher.Invoke(() => PatchDetailText.Text = msg);
|
||||
});
|
||||
InstallBtn.IsEnabled = false;
|
||||
UninstallBtn.IsEnabled = false;
|
||||
InstallStatusText.Text = "⏳ 正在安装...";
|
||||
try
|
||||
{
|
||||
await _patchService.InstallAsync(progress);
|
||||
InstallStatusText.Text = "✅ 补丁已安装";
|
||||
UninstallBtn.IsEnabled = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
InstallStatusText.Text = "❌ 安装失败";
|
||||
PatchDetailText.Text = ex.Message;
|
||||
InstallBtn.IsEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private async void UninstallPatch_Click(object s, RoutedEventArgs e)
|
||||
{
|
||||
var result = MessageBox.Show(this,
|
||||
"确定要卸载 Better-Seewo 补丁吗?\n将还原备份文件并清除注册表修改。",
|
||||
"卸载确认", MessageBoxButton.YesNo, MessageBoxImage.Question);
|
||||
if (result != MessageBoxResult.Yes) return;
|
||||
|
||||
var progress = new Progress<string>(msg =>
|
||||
{
|
||||
Dispatcher.Invoke(() => PatchDetailText.Text = msg);
|
||||
});
|
||||
InstallBtn.IsEnabled = false;
|
||||
UninstallBtn.IsEnabled = false;
|
||||
InstallStatusText.Text = "⏳ 正在卸载...";
|
||||
try
|
||||
{
|
||||
await _patchService.UninstallAsync(progress);
|
||||
InstallStatusText.Text = "✅ 补丁已卸载";
|
||||
InstallBtn.IsEnabled = true;
|
||||
PatchDetailText.Text = "卸载完成。建议重启希沃白板。";
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
InstallStatusText.Text = "❌ 卸载失败";
|
||||
PatchDetailText.Text = ex.Message;
|
||||
UninstallBtn.IsEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void Minimize_Click(object s, RoutedEventArgs e) => WindowState = WindowState.Minimized;
|
||||
@@ -95,7 +153,7 @@ namespace BetterEN5.UI
|
||||
await ProgressDialog.Show(this, "转换文件", async p =>
|
||||
{
|
||||
p.UpdateStatus("正在转换 PPT → ENBX...", "调用转换器");
|
||||
var result = await _conversionService.ConvertPptxToEnbxAsync(dialog.FileName);
|
||||
var result = await new ConversionService().ConvertPptxToEnbxAsync(dialog.FileName);
|
||||
p.UpdateStatus("转换完成", Path.GetFileName(result));
|
||||
});
|
||||
}
|
||||
@@ -109,7 +167,7 @@ namespace BetterEN5.UI
|
||||
await ProgressDialog.Show(this, "转换文件", async p =>
|
||||
{
|
||||
p.UpdateStatus("正在转换 ENBX → PPT...", "调用转换器");
|
||||
var result = await _conversionService.ConvertEnbxToPptxAsync(dialog.FileName);
|
||||
var result = await new ConversionService().ConvertEnbxToPptxAsync(dialog.FileName);
|
||||
p.UpdateStatus("导出完成", Path.GetFileName(result));
|
||||
});
|
||||
}
|
||||
@@ -134,30 +192,6 @@ namespace BetterEN5.UI
|
||||
TouchStatus.Text = "修复已应用,请重启";
|
||||
}
|
||||
|
||||
private async void EnableBoardSupport_Click(object s, RoutedEventArgs e)
|
||||
{
|
||||
await ProgressDialog.Show(this, "大屏支持", async p =>
|
||||
{
|
||||
p.UpdateStatus("正在配置大屏模式...", "修补 Configs.fkv");
|
||||
await _activationService.ApplyBoardSupportPatchAsync();
|
||||
p.UpdateStatus("正在写入注册表...", "大屏相关键值");
|
||||
await Task.Delay(200);
|
||||
p.UpdateStatus("完成", "大屏模式已配置");
|
||||
});
|
||||
BoardStatus.Text = "大屏模式已配置";
|
||||
}
|
||||
|
||||
private async void EnableIWB_Click(object s, RoutedEventArgs e)
|
||||
{
|
||||
await ProgressDialog.Show(this, "IWB 模式", async p =>
|
||||
{
|
||||
p.UpdateStatus("正在启用 IWB 模式...", "注册表 + 配置文件");
|
||||
await _activationService.EnableIWBForNonTouchAsync();
|
||||
p.UpdateStatus("完成", "IWB 模式已启用,重启生效");
|
||||
});
|
||||
BoardStatus.Text = "IWB 已启用";
|
||||
}
|
||||
|
||||
private async void ActivatePro_Click(object s, RoutedEventArgs e)
|
||||
{
|
||||
var dlg = new ActivateDialog();
|
||||
|
||||
Reference in New Issue
Block a user