fix:翻页控件崩溃

This commit is contained in:
2025-07-20 16:14:26 +08:00
parent 62d35127b1
commit c73a5c3a7e
+283 -38
View File
@@ -65,15 +65,24 @@ namespace Ink_Canvas {
} }
catch { catch {
// 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象 // 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
try {
if (pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count >= 1)
{
slide = pptApplication.SlideShowWindows[1].View.Slide; slide = pptApplication.SlideShowWindows[1].View.Slide;
} }
} }
catch (Exception ex) {
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
}
if (pptApplication == null) throw new Exception(); if (pptApplication == null) throw new Exception();
//BtnCheckPPT.Visibility = Visibility.Collapsed; //BtnCheckPPT.Visibility = Visibility.Collapsed;
StackPanelPPTControls.Visibility = Visibility.Visible; StackPanelPPTControls.Visibility = Visibility.Visible;
} }
catch { catch (Exception ex) {
LogHelper.WriteLogToFile($"检查PPT应用程序失败: {ex.ToString()}", LogHelper.LogType.Error);
//BtnCheckPPT.Visibility = Visibility.Visible; //BtnCheckPPT.Visibility = Visibility.Visible;
StackPanelPPTControls.Visibility = Visibility.Collapsed; StackPanelPPTControls.Visibility = Visibility.Collapsed;
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed; LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
@@ -130,8 +139,16 @@ namespace Ink_Canvas {
} }
catch { catch {
// 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象 // 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
try {
if (pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count >= 1)
{
slide = pptApplication.SlideShowWindows[1].View.Slide; slide = pptApplication.SlideShowWindows[1].View.Slide;
} }
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
pptApplication.PresentationOpen += PptApplication_PresentationOpen; pptApplication.PresentationOpen += PptApplication_PresentationOpen;
pptApplication.PresentationClose += PptApplication_PresentationClose; pptApplication.PresentationClose += PptApplication_PresentationClose;
@@ -147,10 +164,18 @@ namespace Ink_Canvas {
PptApplication_PresentationOpen(null); PptApplication_PresentationOpen(null);
//如果检测到已经开始放映,则立即进入画板模式 //如果检测到已经开始放映,则立即进入画板模式
if (pptApplication.SlideShowWindows.Count >= 1) if (pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count >= 1)
{
try {
PptApplication_SlideShowBegin(pptApplication.SlideShowWindows[1]); PptApplication_SlideShowBegin(pptApplication.SlideShowWindows[1]);
} }
catch { catch (Exception ex) {
LogHelper.WriteLogToFile($"启动幻灯片放映失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"检查PPT状态失败: {ex.ToString()}", LogHelper.LogType.Error);
//StackPanelPPTControls.Visibility = Visibility.Collapsed; //StackPanelPPTControls.Visibility = Visibility.Collapsed;
Application.Current.Dispatcher.Invoke(() => { BtnPPTSlideShow.Visibility = Visibility.Collapsed; }); Application.Current.Dispatcher.Invoke(() => { BtnPPTSlideShow.Visibility = Visibility.Collapsed; });
timerCheckPPT.Start(); timerCheckPPT.Start();
@@ -161,6 +186,14 @@ namespace Ink_Canvas {
// 跳转到上次播放页 // 跳转到上次播放页
if (Settings.PowerPointSettings.IsNotifyPreviousPage) if (Settings.PowerPointSettings.IsNotifyPreviousPage)
Application.Current.Dispatcher.BeginInvoke(new Action(() => { Application.Current.Dispatcher.BeginInvoke(new Action(() => {
try {
// 添加安全检查
if (presentation == null)
{
LogHelper.WriteLogToFile("演示文稿为空,无法跳转到上次播放页", LogHelper.LogType.Warning);
return;
}
var folderPath = Settings.Automation.AutoSavedStrokesLocation + var folderPath = Settings.Automation.AutoSavedStrokesLocation +
@"\Auto Saved - Presentations\" + presentation.Name + "_" + @"\Auto Saved - Presentations\" + presentation.Name + "_" +
presentation.Slides.Count; presentation.Slides.Count;
@@ -169,39 +202,62 @@ namespace Ink_Canvas {
if (!int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page)) return; if (!int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page)) return;
if (page <= 0) return; if (page <= 0) return;
new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () => { new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () => {
if (pptApplication.SlideShowWindows.Count >= 1) try {
if (pptApplication != null && pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count >= 1)
// 如果已经播放了的话, 跳转 // 如果已经播放了的话, 跳转
presentation.SlideShowWindow.View.GotoSlide(page); presentation.SlideShowWindow.View.GotoSlide(page);
else else if (presentation.Windows != null && presentation.Windows.Count >= 1)
presentation.Windows[1].View.GotoSlide(page); presentation.Windows[1].View.GotoSlide(page);
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"跳转到指定页面失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}).ShowDialog(); }).ShowDialog();
} }
catch (Exception ex) { catch (Exception ex) {
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); LogHelper.WriteLogToFile($"读取上次播放位置失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"处理上次播放页跳转失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
}), DispatcherPriority.Normal); }), DispatcherPriority.Normal);
//检查是否有隐藏幻灯片 //检查是否有隐藏幻灯片
if (Settings.PowerPointSettings.IsNotifyHiddenPage) { if (Settings.PowerPointSettings.IsNotifyHiddenPage) {
try {
var isHaveHiddenSlide = false; var isHaveHiddenSlide = false;
if (slides != null)
{
foreach (Slide slide in slides) foreach (Slide slide in slides)
if (slide.SlideShowTransition.Hidden == Microsoft.Office.Core.MsoTriState.msoTrue) { if (slide.SlideShowTransition.Hidden == Microsoft.Office.Core.MsoTriState.msoTrue) {
isHaveHiddenSlide = true; isHaveHiddenSlide = true;
break; break;
} }
}
Application.Current.Dispatcher.BeginInvoke(new Action(() => { Application.Current.Dispatcher.BeginInvoke(new Action(() => {
if (isHaveHiddenSlide && !IsShowingRestoreHiddenSlidesWindow) { if (isHaveHiddenSlide && !IsShowingRestoreHiddenSlidesWindow) {
IsShowingRestoreHiddenSlidesWindow = true; IsShowingRestoreHiddenSlidesWindow = true;
new YesOrNoNotificationWindow("检测到此演示文档中包含隐藏的幻灯片,是否取消隐藏?", new YesOrNoNotificationWindow("检测到此演示文档中包含隐藏的幻灯片,是否取消隐藏?",
() => { () => {
try {
if (slides != null)
{
foreach (Slide slide in slides) foreach (Slide slide in slides)
if (slide.SlideShowTransition.Hidden == if (slide.SlideShowTransition.Hidden ==
Microsoft.Office.Core.MsoTriState.msoTrue) Microsoft.Office.Core.MsoTriState.msoTrue)
slide.SlideShowTransition.Hidden = slide.SlideShowTransition.Hidden =
Microsoft.Office.Core.MsoTriState.msoFalse; Microsoft.Office.Core.MsoTriState.msoFalse;
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"取消隐藏幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
}
finally {
IsShowingRestoreHiddenSlidesWindow = false; IsShowingRestoreHiddenSlidesWindow = false;
}
}, () => { IsShowingRestoreHiddenSlidesWindow = false; }, }, () => { IsShowingRestoreHiddenSlidesWindow = false; },
() => { IsShowingRestoreHiddenSlidesWindow = false; }).ShowDialog(); () => { IsShowingRestoreHiddenSlidesWindow = false; }).ShowDialog();
} }
@@ -209,12 +265,19 @@ namespace Ink_Canvas {
BtnPPTSlideShow.Visibility = Visibility.Visible; BtnPPTSlideShow.Visibility = Visibility.Visible;
}), DispatcherPriority.Normal); }), DispatcherPriority.Normal);
} }
catch (Exception ex) {
LogHelper.WriteLogToFile($"检查隐藏幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
//检测是否有自动播放 //检测是否有自动播放
if (Settings.PowerPointSettings.IsNotifyAutoPlayPresentation if (Settings.PowerPointSettings.IsNotifyAutoPlayPresentation
// && presentation.SlideShowSettings.AdvanceMode == PpSlideShowAdvanceMode.ppSlideShowUseSlideTimings // && presentation.SlideShowSettings.AdvanceMode == PpSlideShowAdvanceMode.ppSlideShowUseSlideTimings
&& BtnPPTSlideShowEnd.Visibility != Visibility.Visible) { && BtnPPTSlideShowEnd.Visibility != Visibility.Visible) {
try {
bool hasSlideTimings = false; bool hasSlideTimings = false;
if (presentation != null && presentation.Slides != null)
{
foreach (Slide slide in presentation.Slides) { foreach (Slide slide in presentation.Slides) {
if (slide.SlideShowTransition.AdvanceOnTime == MsoTriState.msoTrue && if (slide.SlideShowTransition.AdvanceOnTime == MsoTriState.msoTrue &&
slide.SlideShowTransition.AdvanceTime > 0) { slide.SlideShowTransition.AdvanceTime > 0) {
@@ -222,6 +285,7 @@ namespace Ink_Canvas {
break; break;
} }
} }
}
if (hasSlideTimings) { if (hasSlideTimings) {
Application.Current.Dispatcher.BeginInvoke((Action)(() => { Application.Current.Dispatcher.BeginInvoke((Action)(() => {
@@ -229,16 +293,38 @@ namespace Ink_Canvas {
IsShowingAutoplaySlidesWindow = true; IsShowingAutoplaySlidesWindow = true;
new YesOrNoNotificationWindow("检测到此演示文档中自动播放或排练计时已经启用,可能导致幻灯片自动翻页,是否取消?", new YesOrNoNotificationWindow("检测到此演示文档中自动播放或排练计时已经启用,可能导致幻灯片自动翻页,是否取消?",
() => { () => {
try {
if (presentation != null)
{
presentation.SlideShowSettings.AdvanceMode = presentation.SlideShowSettings.AdvanceMode =
PpSlideShowAdvanceMode.ppSlideShowManualAdvance; PpSlideShowAdvanceMode.ppSlideShowManualAdvance;
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"设置手动播放模式失败: {ex.ToString()}", LogHelper.LogType.Error);
}
finally {
IsShowingAutoplaySlidesWindow = false; IsShowingAutoplaySlidesWindow = false;
}
}, () => { IsShowingAutoplaySlidesWindow = false; }, }, () => { IsShowingAutoplaySlidesWindow = false; },
() => { IsShowingAutoplaySlidesWindow = false; }).ShowDialog(); () => { IsShowingAutoplaySlidesWindow = false; }).ShowDialog();
} }
})); }));
try {
if (presentation != null)
{
presentation.SlideShowSettings.AdvanceMode = PpSlideShowAdvanceMode.ppSlideShowManualAdvance; presentation.SlideShowSettings.AdvanceMode = PpSlideShowAdvanceMode.ppSlideShowManualAdvance;
} }
} }
catch (Exception ex) {
LogHelper.WriteLogToFile($"设置演示文稿播放模式失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"检查自动播放设置失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
} }
private void PptApplication_PresentationClose(Presentation Pres) { private void PptApplication_PresentationClose(Presentation Pres) {
@@ -401,7 +487,7 @@ namespace Ink_Canvas {
// 检查是否应该显示PPT按钮 // 检查是否应该显示PPT按钮
bool shouldShowButtons = Settings.PowerPointSettings.ShowPPTButton && bool shouldShowButtons = Settings.PowerPointSettings.ShowPPTButton &&
(BtnPPTSlideShowEnd.Visibility == Visibility.Visible || (BtnPPTSlideShowEnd.Visibility == Visibility.Visible ||
(pptApplication != null && pptApplication.SlideShowWindows.Count > 0)); (pptApplication != null && pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count > 0));
if (!shouldShowButtons) if (!shouldShowButtons)
{ {
@@ -429,7 +515,7 @@ namespace Ink_Canvas {
else RightSidePanelForPPTNavigation.Visibility = Visibility.Collapsed; else RightSidePanelForPPTNavigation.Visibility = Visibility.Collapsed;
} }
catch (Exception ex) { catch (Exception ex) {
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); LogHelper.WriteLogToFile($"更新PPT按钮显示状态失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
} }
@@ -671,6 +757,13 @@ namespace Ink_Canvas {
private void PptApplication_SlideShowNextSlide(SlideShowWindow Wn) { private void PptApplication_SlideShowNextSlide(SlideShowWindow Wn) {
try { try {
// 添加安全检查
if (Wn == null || Wn.View == null)
{
LogHelper.WriteLogToFile("幻灯片放映窗口或视图为空", LogHelper.LogType.Warning);
return;
}
LogHelper.WriteLogToFile($"PowerPoint Next Slide (Slide {Wn.View.CurrentShowPosition})", LogHelper.WriteLogToFile($"PowerPoint Next Slide (Slide {Wn.View.CurrentShowPosition})",
LogHelper.LogType.Event); LogHelper.LogType.Event);
if (Wn.View.CurrentShowPosition == previousSlideID) return; if (Wn.View.CurrentShowPosition == previousSlideID) return;
@@ -700,14 +793,14 @@ namespace Ink_Canvas {
PPTBtnPageTotal.Text = $"/ {Wn.Presentation.Slides.Count}"; PPTBtnPageTotal.Text = $"/ {Wn.Presentation.Slides.Count}";
} }
catch (Exception ex) { catch (Exception ex) {
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); LogHelper.WriteLogToFile($"处理幻灯片切换时出错: {ex.ToString()}", LogHelper.LogType.Error);
} }
}); });
previousSlideID = Wn.View.CurrentShowPosition; previousSlideID = Wn.View.CurrentShowPosition;
} }
catch (Exception ex) { catch (Exception ex) {
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); LogHelper.WriteLogToFile($"幻灯片切换事件处理失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
} }
@@ -724,30 +817,70 @@ namespace Ink_Canvas {
_isPptClickingBtnTurned = true; _isPptClickingBtnTurned = true;
// 添加安全检查
if (pptApplication == null)
{
LogHelper.WriteLogToFile("PPT应用程序为空,无法执行上一页操作", LogHelper.LogType.Warning);
return;
}
try
{
// 检查SlideShowWindows是否存在且有效
if (pptApplication.SlideShowWindows == null || pptApplication.SlideShowWindows.Count == 0)
{
LogHelper.WriteLogToFile("PPT放映窗口不存在,无法执行上一页操作", LogHelper.LogType.Warning);
return;
}
// 安全访问当前幻灯片信息
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null && slideShowWindow.View != null)
{
if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber &&
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint) Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
SaveScreenShot(true, SaveScreenShot(true,
pptApplication.SlideShowWindows[1].Presentation.Name + "/" + slideShowWindow.Presentation.Name + "/" +
pptApplication.SlideShowWindows[1].View.CurrentShowPosition); slideShowWindow.View.CurrentShowPosition);
}
}
try {
new Thread(new ThreadStart(() => { new Thread(new ThreadStart(() => {
try { try {
pptApplication.SlideShowWindows[1].Activate(); // 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null)
{
slideShowWindow.Activate();
} }
catch { }
// ignored }
catch (Exception ex) {
LogHelper.WriteLogToFile($"激活PPT放映窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
try { try {
pptApplication.SlideShowWindows[1].View.Previous(); // 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null && slideShowWindow.View != null)
{
slideShowWindow.View.Previous();
} }
catch { }
// ignored }
catch (Exception ex) {
LogHelper.WriteLogToFile($"PPT上一页操作失败: {ex.ToString()}", LogHelper.LogType.Error);
} // Without this catch{}, app will crash when click the pre-page button in the fir page in some special env. } // Without this catch{}, app will crash when click the pre-page button in the fir page in some special env.
})).Start(); })).Start();
} }
catch { catch (Exception ex) {
LogHelper.WriteLogToFile($"PPT上一页操作异常: {ex.ToString()}", LogHelper.LogType.Error);
StackPanelPPTControls.Visibility = Visibility.Collapsed; StackPanelPPTControls.Visibility = Visibility.Collapsed;
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed; LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed; RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
@@ -766,29 +899,71 @@ namespace Ink_Canvas {
} }
_isPptClickingBtnTurned = true; _isPptClickingBtnTurned = true;
// 添加安全检查
if (pptApplication == null)
{
LogHelper.WriteLogToFile("PPT应用程序为空,无法执行下一页操作", LogHelper.LogType.Warning);
return;
}
try
{
// 检查SlideShowWindows是否存在且有效
if (pptApplication.SlideShowWindows == null || pptApplication.SlideShowWindows.Count == 0)
{
LogHelper.WriteLogToFile("PPT放映窗口不存在,无法执行下一页操作", LogHelper.LogType.Warning);
return;
}
// 安全访问当前幻灯片信息
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null && slideShowWindow.View != null)
{
if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber &&
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint) Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
SaveScreenShot(true, SaveScreenShot(true,
pptApplication.SlideShowWindows[1].Presentation.Name + "/" + slideShowWindow.Presentation.Name + "/" +
pptApplication.SlideShowWindows[1].View.CurrentShowPosition); slideShowWindow.View.CurrentShowPosition);
try { }
}
new Thread(new ThreadStart(() => { new Thread(new ThreadStart(() => {
try { try {
pptApplication.SlideShowWindows[1].Activate(); // 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null)
{
slideShowWindow.Activate();
} }
catch { }
// ignored }
catch (Exception ex) {
LogHelper.WriteLogToFile($"激活PPT放映窗口失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
try { try {
pptApplication.SlideShowWindows[1].View.Next(); // 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null && slideShowWindow.View != null)
{
slideShowWindow.View.Next();
} }
catch { }
// ignored }
catch (Exception ex) {
LogHelper.WriteLogToFile($"PPT下一页操作失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
})).Start(); })).Start();
} }
catch { catch (Exception ex) {
LogHelper.WriteLogToFile($"PPT下一页操作异常: {ex.ToString()}", LogHelper.LogType.Error);
StackPanelPPTControls.Visibility = Visibility.Collapsed; StackPanelPPTControls.Visibility = Visibility.Collapsed;
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed; LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed; RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
@@ -862,13 +1037,40 @@ namespace Ink_Canvas {
if (!Settings.PowerPointSettings.EnablePPTButtonPageClickable) return; if (!Settings.PowerPointSettings.EnablePPTButtonPageClickable) return;
// 添加安全检查
if (pptApplication == null)
{
LogHelper.WriteLogToFile("PPT应用程序为空,无法执行翻页操作", LogHelper.LogType.Warning);
return;
}
try
{
// 检查SlideShowWindows是否存在且有效
if (pptApplication.SlideShowWindows == null || pptApplication.SlideShowWindows.Count == 0)
{
LogHelper.WriteLogToFile("PPT放映窗口不存在,无法执行翻页操作", LogHelper.LogType.Warning);
return;
}
GridTransparencyFakeBackground.Opacity = 1; GridTransparencyFakeBackground.Opacity = 1;
GridTransparencyFakeBackground.Background = new SolidColorBrush(StringToColor("#01FFFFFF")); GridTransparencyFakeBackground.Background = new SolidColorBrush(StringToColor("#01FFFFFF"));
CursorIcon_Click(null, null); CursorIcon_Click(null, null);
try { try {
pptApplication.SlideShowWindows[1].SlideNavigation.Visible = true; // 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null)
{
slideShowWindow.SlideNavigation.Visible = true;
}
}
}
catch (Exception ex) {
LogHelper.WriteLogToFile($"设置PPT导航可见性失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
catch { }
// 控制居中 // 控制居中
if (!isFloatingBarFolded) { if (!isFloatingBarFolded) {
@@ -876,6 +1078,11 @@ namespace Ink_Canvas {
ViewboxFloatingBarMarginAnimation(60); ViewboxFloatingBarMarginAnimation(60);
} }
} }
catch (Exception ex)
{
LogHelper.WriteLogToFile($"PPT翻页控件操作失败: {ex.ToString()}", LogHelper.LogType.Error);
}
}
private void BtnPPTSlideShow_Click(object sender, RoutedEventArgs e) { private void BtnPPTSlideShow_Click(object sender, RoutedEventArgs e) {
new Thread(new ThreadStart(() => { new Thread(new ThreadStart(() => {
@@ -887,24 +1094,57 @@ namespace Ink_Canvas {
} }
private async void BtnPPTSlideShowEnd_Click(object sender, RoutedEventArgs e) { private async void BtnPPTSlideShowEnd_Click(object sender, RoutedEventArgs e) {
// 添加安全检查
if (pptApplication == null)
{
LogHelper.WriteLogToFile("PPT应用程序为空,无法结束放映", LogHelper.LogType.Warning);
return;
}
try
{
// 检查SlideShowWindows是否存在且有效
if (pptApplication.SlideShowWindows == null || pptApplication.SlideShowWindows.Count == 0)
{
LogHelper.WriteLogToFile("PPT放映窗口不存在,无法结束放映", LogHelper.LogType.Warning);
return;
}
Application.Current.Dispatcher.Invoke(() => { Application.Current.Dispatcher.Invoke(() => {
try { try {
// 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null && slideShowWindow.View != null)
{
var ms = new MemoryStream(); var ms = new MemoryStream();
inkCanvas.Strokes.Save(ms); inkCanvas.Strokes.Save(ms);
ms.Position = 0; ms.Position = 0;
memoryStreams[pptApplication.SlideShowWindows[1].View.CurrentShowPosition] = ms; memoryStreams[slideShowWindow.View.CurrentShowPosition] = ms;
timeMachine.ClearStrokeHistory(); timeMachine.ClearStrokeHistory();
} }
catch { }
// ignored }
catch (Exception ex) {
LogHelper.WriteLogToFile($"保存当前页面墨迹失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
}); });
new Thread(new ThreadStart(() => { new Thread(new ThreadStart(() => {
try { try {
pptApplication.SlideShowWindows[1].View.Exit(); // 安全访问SlideShowWindows[1]
if (pptApplication.SlideShowWindows.Count >= 1)
{
var slideShowWindow = pptApplication.SlideShowWindows[1];
if (slideShowWindow != null && slideShowWindow.View != null)
{
slideShowWindow.View.Exit();
} }
catch { }
// ignored }
catch (Exception ex) {
LogHelper.WriteLogToFile($"退出PPT放映失败: {ex.ToString()}", LogHelper.LogType.Error);
} }
})).Start(); })).Start();
@@ -912,6 +1152,11 @@ namespace Ink_Canvas {
await Task.Delay(150); await Task.Delay(150);
ViewboxFloatingBarMarginAnimation(100, true); ViewboxFloatingBarMarginAnimation(100, true);
} }
catch (Exception ex)
{
LogHelper.WriteLogToFile($"结束PPT放映操作异常: {ex.ToString()}", LogHelper.LogType.Error);
}
}
private void GridPPTControlPrevious_MouseDown(object sender, MouseButtonEventArgs e) private void GridPPTControlPrevious_MouseDown(object sender, MouseButtonEventArgs e)
{ {