improve:PPT及自动更新

This commit is contained in:
2025-09-06 21:26:46 +08:00
parent 38902c8f88
commit 27d683a7cc
6 changed files with 145 additions and 0 deletions
+26
View File
@@ -1610,12 +1610,24 @@ namespace Ink_Canvas.Helpers
Directory.CreateDirectory(destinationDir); Directory.CreateDirectory(destinationDir);
} }
// 定义需要覆盖的文件列表(仅覆盖主程序和配置文件)
string[] filesToOverwrite = { "InkCanvasForClass.exe", "InkCanvasForClass.exe.config" };
// 复制文件 // 复制文件
foreach (FileInfo file in dir.GetFiles()) foreach (FileInfo file in dir.GetFiles())
{ {
// 只覆盖指定的文件,跳过其他文件
if (!filesToOverwrite.Contains(file.Name))
{
LogHelper.WriteLogToFile($"AutoUpdate | 跳过文件(不在覆盖列表中): {file.Name}");
continue;
}
string targetFilePath = Path.Combine(destinationDir, file.Name); string targetFilePath = Path.Combine(destinationDir, file.Name);
bool fileCopied = false; bool fileCopied = false;
LogHelper.WriteLogToFile($"AutoUpdate | 开始覆盖文件: {file.Name}");
// 重试机制,最多重试3次 // 重试机制,最多重试3次
for (int retry = 0; retry < 3; retry++) for (int retry = 0; retry < 3; retry++)
{ {
@@ -1641,6 +1653,7 @@ namespace Ink_Canvas.Helpers
await Task.Run(() => file.CopyTo(targetFilePath)); await Task.Run(() => file.CopyTo(targetFilePath));
fileCopied = true; fileCopied = true;
LogHelper.WriteLogToFile($"AutoUpdate | 文件覆盖成功: {file.Name}");
break; break;
} }
catch (Exception ex) catch (Exception ex)
@@ -1687,12 +1700,24 @@ namespace Ink_Canvas.Helpers
Directory.CreateDirectory(destinationDir); Directory.CreateDirectory(destinationDir);
} }
// 定义需要覆盖的文件列表(仅覆盖主程序和配置文件)
string[] filesToOverwrite = { "InkCanvasForClass.exe", "InkCanvasForClass.exe.config" };
// 复制文件 // 复制文件
foreach (FileInfo file in dir.GetFiles()) foreach (FileInfo file in dir.GetFiles())
{ {
// 只覆盖指定的文件,跳过其他文件
if (!filesToOverwrite.Contains(file.Name))
{
LogHelper.WriteLogToFile($"AutoUpdate | 跳过文件(不在覆盖列表中): {file.Name}");
continue;
}
string targetFilePath = Path.Combine(destinationDir, file.Name); string targetFilePath = Path.Combine(destinationDir, file.Name);
try try
{ {
LogHelper.WriteLogToFile($"AutoUpdate | 开始覆盖文件: {file.Name}");
// 如果目标文件存在且正在使用,先删除 // 如果目标文件存在且正在使用,先删除
if (File.Exists(targetFilePath)) if (File.Exists(targetFilePath))
{ {
@@ -1700,6 +1725,7 @@ namespace Ink_Canvas.Helpers
} }
await Task.Run(() => file.CopyTo(targetFilePath)); await Task.Run(() => file.CopyTo(targetFilePath));
LogHelper.WriteLogToFile($"AutoUpdate | 文件覆盖成功: {file.Name}");
} }
catch (Exception ex) catch (Exception ex)
{ {
+21
View File
@@ -531,6 +531,27 @@
</ui:SimpleStackPanel> </ui:SimpleStackPanel>
</ui:SimpleStackPanel> </ui:SimpleStackPanel>
</Border> </Border>
<GroupBox Name="GroupBoxModeSettings">
<GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="模式设置" FontWeight="Bold" Foreground="#fafafa"
FontSize="26" />
</GroupBox.Header>
<ui:SimpleStackPanel Spacing="6" Margin="0,10,0,0">
<TextBlock TextWrapping="Wrap" Margin="0,0,0,10" Foreground="#fafafa">
选择软件运行模式。仅PPT模式下,软件将完全隐藏,仅在PPT放映时出现。
</TextBlock>
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,10,0,0">
<TextBlock Text="正常模式" VerticalAlignment="Center" Foreground="#fafafa"
FontSize="14" Margin="0,0,8,0"/>
<ui:ToggleSwitch x:Name="ToggleSwitchMode"
OnContent="仅PPT模式" OffContent="仅PPT模式"
IsOn="False"
FontFamily="Microsoft YaHei UI" FontWeight="Bold"
Toggled="ToggleSwitchMode_Toggled"/>
</ui:SimpleStackPanel>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Name="GroupBoxNewSettings"> <GroupBox Name="GroupBoxNewSettings">
<GroupBox.Header> <GroupBox.Header>
<TextBlock Margin="0,12,0,0" Text="新设置窗口" FontWeight="Bold" Foreground="#fafafa" <TextBlock Margin="0,12,0,0" Text="新设置窗口" FontWeight="Bold" Foreground="#fafafa"
+76
View File
@@ -542,6 +542,9 @@ namespace Ink_Canvas
// 初始化文件关联状态显示 // 初始化文件关联状态显示
InitializeFileAssociationStatus(); InitializeFileAssociationStatus();
// 检查模式设置并应用
CheckMainWindowVisibility();
} }
private void SystemEventsOnDisplaySettingsChanged(object sender, EventArgs e) private void SystemEventsOnDisplaySettingsChanged(object sender, EventArgs e)
@@ -2606,5 +2609,78 @@ namespace Ink_Canvas
} }
#endregion #endregion
#region
/// <summary>
/// 模式切换开关事件处理
/// </summary>
private void ToggleSwitchMode_Toggled(object sender, RoutedEventArgs e)
{
try
{
var toggle = sender as iNKORE.UI.WPF.Modern.Controls.ToggleSwitch;
if (toggle != null)
{
Settings.ModeSettings.IsPPTOnlyMode = toggle.IsOn;
// 如果切换到仅PPT模式,立即隐藏主窗口
if (Settings.ModeSettings.IsPPTOnlyMode)
{
Hide();
LogHelper.WriteLogToFile("已切换到仅PPT模式,主窗口已隐藏", LogHelper.LogType.Event);
}
else
{
// 如果切换到正常模式,显示主窗口
Show();
LogHelper.WriteLogToFile("已切换到正常模式,主窗口已显示", LogHelper.LogType.Event);
}
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"切换模式时出错: {ex.Message}", LogHelper.LogType.Error);
}
}
/// <summary>
/// 检查是否应该显示主窗口(基于PPT模式和PPT放映状态)
/// </summary>
private void CheckMainWindowVisibility()
{
try
{
if (Settings.ModeSettings.IsPPTOnlyMode)
{
// 仅PPT模式下,只有在PPT放映时才显示
bool isInSlideShow = BtnPPTSlideShowEnd.Visibility == Visibility.Visible;
if (isInSlideShow && !IsVisible)
{
Show();
LogHelper.WriteLogToFile("PPT放映开始,显示主窗口(仅PPT模式)", LogHelper.LogType.Trace);
}
else if (!isInSlideShow && IsVisible)
{
Hide();
LogHelper.WriteLogToFile("PPT放映结束,隐藏主窗口(仅PPT模式)", LogHelper.LogType.Trace);
}
}
else
{
// 正常模式下,确保主窗口可见
if (!IsVisible)
{
Show();
}
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"检查主窗口可见性时出错: {ex.Message}", LogHelper.LogType.Error);
}
}
#endregion
} }
} }
+3
View File
@@ -585,6 +585,9 @@ namespace Ink_Canvas
{ {
LogHelper.WriteLogToFile("PPT放映状态变化:退出放映模式", LogHelper.LogType.Trace); LogHelper.WriteLogToFile("PPT放映状态变化:退出放映模式", LogHelper.LogType.Trace);
} }
// 检查主窗口可见性(用于仅PPT模式)
CheckMainWindowVisibility();
}); });
} }
catch (Exception ex) catch (Exception ex)
@@ -786,6 +786,17 @@ namespace Ink_Canvas
ToggleSwitchDirectCallCiRand.IsOn = Settings.RandSettings.DirectCallCiRand; ToggleSwitchDirectCallCiRand.IsOn = Settings.RandSettings.DirectCallCiRand;
} }
// ModeSettings
if (Settings.ModeSettings != null)
{
ToggleSwitchMode.IsOn = Settings.ModeSettings.IsPPTOnlyMode;
}
else
{
Settings.ModeSettings = new ModeSettings();
ToggleSwitchMode.IsOn = false;
}
// Automation // Automation
if (Settings.Automation != null) if (Settings.Automation != null)
{ {
+8
View File
@@ -25,6 +25,8 @@ namespace Ink_Canvas
public Startup Startup { get; set; } = new Startup(); public Startup Startup { get; set; } = new Startup();
[JsonProperty("randSettings")] [JsonProperty("randSettings")]
public RandSettings RandSettings { get; set; } = new RandSettings(); public RandSettings RandSettings { get; set; } = new RandSettings();
[JsonProperty("modeSettings")]
public ModeSettings ModeSettings { get; set; } = new ModeSettings();
} }
public class Canvas public class Canvas
@@ -584,4 +586,10 @@ namespace Ink_Canvas
// 用于JSON序列化 // 用于JSON序列化
public CustomFloatingBarIcon() { } public CustomFloatingBarIcon() { }
} }
public class ModeSettings
{
[JsonProperty("isPPTOnlyMode")]
public bool IsPPTOnlyMode { get; set; } = false; // 是否为仅PPT模式,默认为false(正常模式)
}
} }