fix:翻页控件崩溃
This commit is contained in:
+370
-125
@@ -65,7 +65,15 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
// 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
|
// 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
|
||||||
slide = pptApplication.SlideShowWindows[1].View.Slide;
|
try {
|
||||||
|
if (pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count >= 1)
|
||||||
|
{
|
||||||
|
slide = pptApplication.SlideShowWindows[1].View.Slide;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +81,8 @@ namespace Ink_Canvas {
|
|||||||
//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,7 +139,15 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
// 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
|
// 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象
|
||||||
slide = pptApplication.SlideShowWindows[1].View.Slide;
|
try {
|
||||||
|
if (pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count >= 1)
|
||||||
|
{
|
||||||
|
slide = pptApplication.SlideShowWindows[1].View.Slide;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"获取当前幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pptApplication.PresentationOpen += PptApplication_PresentationOpen;
|
pptApplication.PresentationOpen += PptApplication_PresentationOpen;
|
||||||
@@ -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)
|
||||||
PptApplication_SlideShowBegin(pptApplication.SlideShowWindows[1]);
|
{
|
||||||
|
try {
|
||||||
|
PptApplication_SlideShowBegin(pptApplication.SlideShowWindows[1]);
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"启动幻灯片放映失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch {
|
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,82 +186,143 @@ namespace Ink_Canvas {
|
|||||||
// 跳转到上次播放页
|
// 跳转到上次播放页
|
||||||
if (Settings.PowerPointSettings.IsNotifyPreviousPage)
|
if (Settings.PowerPointSettings.IsNotifyPreviousPage)
|
||||||
Application.Current.Dispatcher.BeginInvoke(new Action(() => {
|
Application.Current.Dispatcher.BeginInvoke(new Action(() => {
|
||||||
var folderPath = Settings.Automation.AutoSavedStrokesLocation +
|
|
||||||
@"\Auto Saved - Presentations\" + presentation.Name + "_" +
|
|
||||||
presentation.Slides.Count;
|
|
||||||
try {
|
try {
|
||||||
if (!File.Exists(folderPath + "/Position")) return;
|
// 添加安全检查
|
||||||
if (!int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page)) return;
|
if (presentation == null)
|
||||||
if (page <= 0) return;
|
{
|
||||||
new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () => {
|
LogHelper.WriteLogToFile("演示文稿为空,无法跳转到上次播放页", LogHelper.LogType.Warning);
|
||||||
if (pptApplication.SlideShowWindows.Count >= 1)
|
return;
|
||||||
// 如果已经播放了的话, 跳转
|
}
|
||||||
presentation.SlideShowWindow.View.GotoSlide(page);
|
|
||||||
else
|
var folderPath = Settings.Automation.AutoSavedStrokesLocation +
|
||||||
presentation.Windows[1].View.GotoSlide(page);
|
@"\Auto Saved - Presentations\" + presentation.Name + "_" +
|
||||||
}).ShowDialog();
|
presentation.Slides.Count;
|
||||||
|
try {
|
||||||
|
if (!File.Exists(folderPath + "/Position")) return;
|
||||||
|
if (!int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page)) return;
|
||||||
|
if (page <= 0) return;
|
||||||
|
new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () => {
|
||||||
|
try {
|
||||||
|
if (pptApplication != null && pptApplication.SlideShowWindows != null && pptApplication.SlideShowWindows.Count >= 1)
|
||||||
|
// 如果已经播放了的话, 跳转
|
||||||
|
presentation.SlideShowWindow.View.GotoSlide(page);
|
||||||
|
else if (presentation.Windows != null && presentation.Windows.Count >= 1)
|
||||||
|
presentation.Windows[1].View.GotoSlide(page);
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"跳转到指定页面失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
}).ShowDialog();
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"读取上次播放位置失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error);
|
LogHelper.WriteLogToFile($"处理上次播放页跳转失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
}
|
}
|
||||||
}), DispatcherPriority.Normal);
|
}), DispatcherPriority.Normal);
|
||||||
|
|
||||||
|
|
||||||
//检查是否有隐藏幻灯片
|
//检查是否有隐藏幻灯片
|
||||||
if (Settings.PowerPointSettings.IsNotifyHiddenPage) {
|
if (Settings.PowerPointSettings.IsNotifyHiddenPage) {
|
||||||
var isHaveHiddenSlide = false;
|
try {
|
||||||
foreach (Slide slide in slides)
|
var isHaveHiddenSlide = false;
|
||||||
if (slide.SlideShowTransition.Hidden == Microsoft.Office.Core.MsoTriState.msoTrue) {
|
if (slides != null)
|
||||||
isHaveHiddenSlide = true;
|
{
|
||||||
break;
|
foreach (Slide slide in slides)
|
||||||
|
if (slide.SlideShowTransition.Hidden == Microsoft.Office.Core.MsoTriState.msoTrue) {
|
||||||
|
isHaveHiddenSlide = true;
|
||||||
|
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("检测到此演示文档中包含隐藏的幻灯片,是否取消隐藏?",
|
||||||
() => {
|
() => {
|
||||||
foreach (Slide slide in slides)
|
try {
|
||||||
if (slide.SlideShowTransition.Hidden ==
|
if (slides != null)
|
||||||
Microsoft.Office.Core.MsoTriState.msoTrue)
|
{
|
||||||
slide.SlideShowTransition.Hidden =
|
foreach (Slide slide in slides)
|
||||||
Microsoft.Office.Core.MsoTriState.msoFalse;
|
if (slide.SlideShowTransition.Hidden ==
|
||||||
IsShowingRestoreHiddenSlidesWindow = false;
|
Microsoft.Office.Core.MsoTriState.msoTrue)
|
||||||
}, () => { IsShowingRestoreHiddenSlidesWindow = false; },
|
slide.SlideShowTransition.Hidden =
|
||||||
() => { IsShowingRestoreHiddenSlidesWindow = false; }).ShowDialog();
|
Microsoft.Office.Core.MsoTriState.msoFalse;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"取消隐藏幻灯片失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
IsShowingRestoreHiddenSlidesWindow = false;
|
||||||
|
}
|
||||||
|
}, () => { IsShowingRestoreHiddenSlidesWindow = false; },
|
||||||
|
() => { IsShowingRestoreHiddenSlidesWindow = false; }).ShowDialog();
|
||||||
|
}
|
||||||
|
|
||||||
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) {
|
||||||
bool hasSlideTimings = false;
|
try {
|
||||||
foreach (Slide slide in presentation.Slides) {
|
bool hasSlideTimings = false;
|
||||||
if (slide.SlideShowTransition.AdvanceOnTime == MsoTriState.msoTrue &&
|
if (presentation != null && presentation.Slides != null)
|
||||||
slide.SlideShowTransition.AdvanceTime > 0) {
|
{
|
||||||
hasSlideTimings = true;
|
foreach (Slide slide in presentation.Slides) {
|
||||||
break;
|
if (slide.SlideShowTransition.AdvanceOnTime == MsoTriState.msoTrue &&
|
||||||
|
slide.SlideShowTransition.AdvanceTime > 0) {
|
||||||
|
hasSlideTimings = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasSlideTimings) {
|
||||||
|
Application.Current.Dispatcher.BeginInvoke((Action)(() => {
|
||||||
|
if (hasSlideTimings && !IsShowingAutoplaySlidesWindow) {
|
||||||
|
IsShowingAutoplaySlidesWindow = true;
|
||||||
|
new YesOrNoNotificationWindow("检测到此演示文档中自动播放或排练计时已经启用,可能导致幻灯片自动翻页,是否取消?",
|
||||||
|
() => {
|
||||||
|
try {
|
||||||
|
if (presentation != null)
|
||||||
|
{
|
||||||
|
presentation.SlideShowSettings.AdvanceMode =
|
||||||
|
PpSlideShowAdvanceMode.ppSlideShowManualAdvance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"设置手动播放模式失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
IsShowingAutoplaySlidesWindow = false;
|
||||||
|
}
|
||||||
|
}, () => { IsShowingAutoplaySlidesWindow = false; },
|
||||||
|
() => { IsShowingAutoplaySlidesWindow = false; }).ShowDialog();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
try {
|
||||||
|
if (presentation != null)
|
||||||
|
{
|
||||||
|
presentation.SlideShowSettings.AdvanceMode = PpSlideShowAdvanceMode.ppSlideShowManualAdvance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"设置演示文稿播放模式失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
if (hasSlideTimings) {
|
LogHelper.WriteLogToFile($"检查自动播放设置失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
Application.Current.Dispatcher.BeginInvoke((Action)(() => {
|
|
||||||
if (hasSlideTimings && !IsShowingAutoplaySlidesWindow) {
|
|
||||||
IsShowingAutoplaySlidesWindow = true;
|
|
||||||
new YesOrNoNotificationWindow("检测到此演示文档中自动播放或排练计时已经启用,可能导致幻灯片自动翻页,是否取消?",
|
|
||||||
() => {
|
|
||||||
presentation.SlideShowSettings.AdvanceMode =
|
|
||||||
PpSlideShowAdvanceMode.ppSlideShowManualAdvance;
|
|
||||||
IsShowingAutoplaySlidesWindow = false;
|
|
||||||
}, () => { IsShowingAutoplaySlidesWindow = false; },
|
|
||||||
() => { IsShowingAutoplaySlidesWindow = false; }).ShowDialog();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
presentation.SlideShowSettings.AdvanceMode = PpSlideShowAdvanceMode.ppSlideShowManualAdvance;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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 (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber &&
|
// 添加安全检查
|
||||||
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
|
if (pptApplication == null)
|
||||||
SaveScreenShot(true,
|
{
|
||||||
pptApplication.SlideShowWindows[1].Presentation.Name + "/" +
|
LogHelper.WriteLogToFile("PPT应用程序为空,无法执行上一页操作", LogHelper.LogType.Warning);
|
||||||
pptApplication.SlideShowWindows[1].View.CurrentShowPosition);
|
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 &&
|
||||||
|
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
|
||||||
|
SaveScreenShot(true,
|
||||||
|
slideShowWindow.Presentation.Name + "/" +
|
||||||
|
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 {
|
catch (Exception ex) {
|
||||||
// ignored
|
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 {
|
catch (Exception ex) {
|
||||||
// ignored
|
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 (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber &&
|
|
||||||
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
|
// 添加安全检查
|
||||||
SaveScreenShot(true,
|
if (pptApplication == null)
|
||||||
pptApplication.SlideShowWindows[1].Presentation.Name + "/" +
|
{
|
||||||
pptApplication.SlideShowWindows[1].View.CurrentShowPosition);
|
LogHelper.WriteLogToFile("PPT应用程序为空,无法执行下一页操作", LogHelper.LogType.Warning);
|
||||||
try {
|
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 &&
|
||||||
|
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
|
||||||
|
SaveScreenShot(true,
|
||||||
|
slideShowWindow.Presentation.Name + "/" +
|
||||||
|
slideShowWindow.View.CurrentShowPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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 {
|
catch (Exception ex) {
|
||||||
// ignored
|
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 {
|
catch (Exception ex) {
|
||||||
// ignored
|
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,18 +1037,50 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
if (!Settings.PowerPointSettings.EnablePPTButtonPageClickable) return;
|
if (!Settings.PowerPointSettings.EnablePPTButtonPageClickable) return;
|
||||||
|
|
||||||
GridTransparencyFakeBackground.Opacity = 1;
|
// 添加安全检查
|
||||||
GridTransparencyFakeBackground.Background = new SolidColorBrush(StringToColor("#01FFFFFF"));
|
if (pptApplication == null)
|
||||||
CursorIcon_Click(null, null);
|
{
|
||||||
try {
|
LogHelper.WriteLogToFile("PPT应用程序为空,无法执行翻页操作", LogHelper.LogType.Warning);
|
||||||
pptApplication.SlideShowWindows[1].SlideNavigation.Visible = true;
|
return;
|
||||||
}
|
}
|
||||||
catch { }
|
|
||||||
|
|
||||||
// 控制居中
|
try
|
||||||
if (!isFloatingBarFolded) {
|
{
|
||||||
await Task.Delay(100);
|
// 检查SlideShowWindows是否存在且有效
|
||||||
ViewboxFloatingBarMarginAnimation(60);
|
if (pptApplication.SlideShowWindows == null || pptApplication.SlideShowWindows.Count == 0)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile("PPT放映窗口不存在,无法执行翻页操作", LogHelper.LogType.Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GridTransparencyFakeBackground.Opacity = 1;
|
||||||
|
GridTransparencyFakeBackground.Background = new SolidColorBrush(StringToColor("#01FFFFFF"));
|
||||||
|
CursorIcon_Click(null, null);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 安全访问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);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 控制居中
|
||||||
|
if (!isFloatingBarFolded) {
|
||||||
|
await Task.Delay(100);
|
||||||
|
ViewboxFloatingBarMarginAnimation(60);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile($"PPT翻页控件操作失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -887,30 +1094,68 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnPPTSlideShowEnd_Click(object sender, RoutedEventArgs e) {
|
private async void BtnPPTSlideShowEnd_Click(object sender, RoutedEventArgs e) {
|
||||||
Application.Current.Dispatcher.Invoke(() => {
|
// 添加安全检查
|
||||||
try {
|
if (pptApplication == null)
|
||||||
var ms = new MemoryStream();
|
{
|
||||||
inkCanvas.Strokes.Save(ms);
|
LogHelper.WriteLogToFile("PPT应用程序为空,无法结束放映", LogHelper.LogType.Warning);
|
||||||
ms.Position = 0;
|
return;
|
||||||
memoryStreams[pptApplication.SlideShowWindows[1].View.CurrentShowPosition] = ms;
|
}
|
||||||
timeMachine.ClearStrokeHistory();
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
// ignored
|
|
||||||
}
|
|
||||||
});
|
|
||||||
new Thread(new ThreadStart(() => {
|
|
||||||
try {
|
|
||||||
pptApplication.SlideShowWindows[1].View.Exit();
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
// ignored
|
|
||||||
}
|
|
||||||
})).Start();
|
|
||||||
|
|
||||||
HideSubPanels("cursor");
|
try
|
||||||
await Task.Delay(150);
|
{
|
||||||
ViewboxFloatingBarMarginAnimation(100, true);
|
// 检查SlideShowWindows是否存在且有效
|
||||||
|
if (pptApplication.SlideShowWindows == null || pptApplication.SlideShowWindows.Count == 0)
|
||||||
|
{
|
||||||
|
LogHelper.WriteLogToFile("PPT放映窗口不存在,无法结束放映", LogHelper.LogType.Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Application.Current.Dispatcher.Invoke(() => {
|
||||||
|
try {
|
||||||
|
// 安全访问SlideShowWindows[1]
|
||||||
|
if (pptApplication.SlideShowWindows.Count >= 1)
|
||||||
|
{
|
||||||
|
var slideShowWindow = pptApplication.SlideShowWindows[1];
|
||||||
|
if (slideShowWindow != null && slideShowWindow.View != null)
|
||||||
|
{
|
||||||
|
var ms = new MemoryStream();
|
||||||
|
inkCanvas.Strokes.Save(ms);
|
||||||
|
ms.Position = 0;
|
||||||
|
memoryStreams[slideShowWindow.View.CurrentShowPosition] = ms;
|
||||||
|
timeMachine.ClearStrokeHistory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"保存当前页面墨迹失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
new Thread(new ThreadStart(() => {
|
||||||
|
try {
|
||||||
|
// 安全访问SlideShowWindows[1]
|
||||||
|
if (pptApplication.SlideShowWindows.Count >= 1)
|
||||||
|
{
|
||||||
|
var slideShowWindow = pptApplication.SlideShowWindows[1];
|
||||||
|
if (slideShowWindow != null && slideShowWindow.View != null)
|
||||||
|
{
|
||||||
|
slideShowWindow.View.Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
LogHelper.WriteLogToFile($"退出PPT放映失败: {ex.ToString()}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
})).Start();
|
||||||
|
|
||||||
|
HideSubPanels("cursor");
|
||||||
|
await Task.Delay(150);
|
||||||
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user