improve:PPT翻页

This commit is contained in:
2026-01-17 20:23:33 +08:00
parent 9c611698c7
commit de9056739b
+48 -28
View File
@@ -913,33 +913,43 @@ namespace Ink_Canvas.Helpers
public bool TryNavigateNext() public bool TryNavigateNext()
{ {
object slideShowWindows = null;
object slideShowWindow = null;
object view = null;
try try
{ {
if (!IsConnected || !IsInSlideShow || PPTApplication == null) return false; if (!IsConnected || !IsInSlideShow || PPTApplication == null) return false;
if (!Marshal.IsComObject(PPTApplication)) return false; if (!Marshal.IsComObject(PPTApplication)) return false;
slideShowWindows = PPTApplication.SlideShowWindows; // 在新线程中执行翻页操作,避免等待动画完成
new Thread(() =>
{
try
{
object slideShowWindows = PPTApplication.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
slideShowWindow = ssw[1]; object slideShowWindow = ssw[1];
if (slideShowWindow != null) if (slideShowWindow != null)
{ {
dynamic sswObj = slideShowWindow; dynamic sswObj = slideShowWindow;
try
{
sswObj.Activate(); sswObj.Activate();
view = sswObj.View; }
catch { }
try
{
object view = sswObj.View;
if (view != null) if (view != null)
{ {
dynamic viewObj = view; dynamic viewObj = view;
viewObj.Next(); viewObj.Next();
return true;
} }
} }
catch { }
SafeReleaseComObject(slideShowWindow);
}
SafeReleaseComObject(slideShowWindows);
} }
return false;
} }
catch (COMException comEx) catch (COMException comEx)
{ {
@@ -949,50 +959,60 @@ namespace Ink_Canvas.Helpers
DisconnectFromPPT(); DisconnectFromPPT();
} }
LogHelper.WriteLogToFile($"切换到下一页失败: {comEx.Message}", LogHelper.LogType.Error); LogHelper.WriteLogToFile($"切换到下一页失败: {comEx.Message}", LogHelper.LogType.Error);
return false;
} }
catch (Exception ex) catch (Exception ex)
{ {
LogHelper.WriteLogToFile($"切换到下一页失败: {ex}", LogHelper.LogType.Error); LogHelper.WriteLogToFile($"切换到下一页失败: {ex}", LogHelper.LogType.Error);
return false;
} }
finally }).Start();
return true;
}
catch (Exception ex)
{ {
SafeReleaseComObject(view); LogHelper.WriteLogToFile($"启动下一页线程失败: {ex}", LogHelper.LogType.Error);
SafeReleaseComObject(slideShowWindow); return false;
SafeReleaseComObject(slideShowWindows);
} }
} }
public bool TryNavigatePrevious() public bool TryNavigatePrevious()
{ {
object slideShowWindows = null;
object slideShowWindow = null;
object view = null;
try try
{ {
if (!IsConnected || !IsInSlideShow || PPTApplication == null) return false; if (!IsConnected || !IsInSlideShow || PPTApplication == null) return false;
if (!Marshal.IsComObject(PPTApplication)) return false; if (!Marshal.IsComObject(PPTApplication)) return false;
slideShowWindows = PPTApplication.SlideShowWindows; // 在新线程中执行翻页操作,避免等待动画完成
new Thread(() =>
{
try
{
object slideShowWindows = PPTApplication.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
slideShowWindow = ssw[1]; object slideShowWindow = ssw[1];
if (slideShowWindow != null) if (slideShowWindow != null)
{ {
dynamic sswObj = slideShowWindow; dynamic sswObj = slideShowWindow;
try
{
sswObj.Activate(); sswObj.Activate();
view = sswObj.View; }
catch { }
try
{
object view = sswObj.View;
if (view != null) if (view != null)
{ {
dynamic viewObj = view; dynamic viewObj = view;
viewObj.Previous(); viewObj.Previous();
return true;
} }
} }
catch { }
SafeReleaseComObject(slideShowWindow);
}
SafeReleaseComObject(slideShowWindows);
} }
return false;
} }
catch (COMException comEx) catch (COMException comEx)
{ {
@@ -1002,18 +1022,18 @@ namespace Ink_Canvas.Helpers
DisconnectFromPPT(); DisconnectFromPPT();
} }
LogHelper.WriteLogToFile($"切换到上一页失败: {comEx.Message}", LogHelper.LogType.Error); LogHelper.WriteLogToFile($"切换到上一页失败: {comEx.Message}", LogHelper.LogType.Error);
return false;
} }
catch (Exception ex) catch (Exception ex)
{ {
LogHelper.WriteLogToFile($"切换到上一页失败: {ex}", LogHelper.LogType.Error); LogHelper.WriteLogToFile($"切换到上一页失败: {ex}", LogHelper.LogType.Error);
return false;
} }
finally }).Start();
return true;
}
catch (Exception ex)
{ {
SafeReleaseComObject(view); LogHelper.WriteLogToFile($"启动上一页线程失败: {ex}", LogHelper.LogType.Error);
SafeReleaseComObject(slideShowWindow); return false;
SafeReleaseComObject(slideShowWindows);
} }
} }