improve:PPT翻页
This commit is contained in:
@@ -913,108 +913,128 @@ 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;
|
// 在新线程中执行翻页操作,避免等待动画完成
|
||||||
if (slideShowWindows != null)
|
new Thread(() =>
|
||||||
{
|
{
|
||||||
dynamic ssw = slideShowWindows;
|
try
|
||||||
slideShowWindow = ssw[1];
|
|
||||||
if (slideShowWindow != null)
|
|
||||||
{
|
{
|
||||||
dynamic sswObj = slideShowWindow;
|
object slideShowWindows = PPTApplication.SlideShowWindows;
|
||||||
sswObj.Activate();
|
if (slideShowWindows != null)
|
||||||
view = sswObj.View;
|
|
||||||
if (view != null)
|
|
||||||
{
|
{
|
||||||
dynamic viewObj = view;
|
dynamic ssw = slideShowWindows;
|
||||||
viewObj.Next();
|
object slideShowWindow = ssw[1];
|
||||||
return true;
|
if (slideShowWindow != null)
|
||||||
|
{
|
||||||
|
dynamic sswObj = slideShowWindow;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sswObj.Activate();
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
try
|
||||||
|
{
|
||||||
|
object view = sswObj.View;
|
||||||
|
if (view != null)
|
||||||
|
{
|
||||||
|
dynamic viewObj = view;
|
||||||
|
viewObj.Next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
SafeReleaseComObject(slideShowWindow);
|
||||||
|
}
|
||||||
|
SafeReleaseComObject(slideShowWindows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
catch (COMException comEx)
|
||||||
return false;
|
{
|
||||||
}
|
var hr = (uint)comEx.HResult;
|
||||||
catch (COMException comEx)
|
if (hr == 0x8001010E || hr == 0x80004005)
|
||||||
{
|
{
|
||||||
var hr = (uint)comEx.HResult;
|
DisconnectFromPPT();
|
||||||
if (hr == 0x8001010E || hr == 0x80004005)
|
}
|
||||||
{
|
LogHelper.WriteLogToFile($"切换到下一页失败: {comEx.Message}", LogHelper.LogType.Error);
|
||||||
DisconnectFromPPT();
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
LogHelper.WriteLogToFile($"切换到下一页失败: {comEx.Message}", LogHelper.LogType.Error);
|
{
|
||||||
return false;
|
LogHelper.WriteLogToFile($"切换到下一页失败: {ex}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
}).Start();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.WriteLogToFile($"切换到下一页失败: {ex}", LogHelper.LogType.Error);
|
LogHelper.WriteLogToFile($"启动下一页线程失败: {ex}", LogHelper.LogType.Error);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
SafeReleaseComObject(view);
|
|
||||||
SafeReleaseComObject(slideShowWindow);
|
|
||||||
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;
|
// 在新线程中执行翻页操作,避免等待动画完成
|
||||||
if (slideShowWindows != null)
|
new Thread(() =>
|
||||||
{
|
{
|
||||||
dynamic ssw = slideShowWindows;
|
try
|
||||||
slideShowWindow = ssw[1];
|
|
||||||
if (slideShowWindow != null)
|
|
||||||
{
|
{
|
||||||
dynamic sswObj = slideShowWindow;
|
object slideShowWindows = PPTApplication.SlideShowWindows;
|
||||||
sswObj.Activate();
|
if (slideShowWindows != null)
|
||||||
view = sswObj.View;
|
|
||||||
if (view != null)
|
|
||||||
{
|
{
|
||||||
dynamic viewObj = view;
|
dynamic ssw = slideShowWindows;
|
||||||
viewObj.Previous();
|
object slideShowWindow = ssw[1];
|
||||||
return true;
|
if (slideShowWindow != null)
|
||||||
|
{
|
||||||
|
dynamic sswObj = slideShowWindow;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sswObj.Activate();
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
try
|
||||||
|
{
|
||||||
|
object view = sswObj.View;
|
||||||
|
if (view != null)
|
||||||
|
{
|
||||||
|
dynamic viewObj = view;
|
||||||
|
viewObj.Previous();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
SafeReleaseComObject(slideShowWindow);
|
||||||
|
}
|
||||||
|
SafeReleaseComObject(slideShowWindows);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
catch (COMException comEx)
|
||||||
return false;
|
{
|
||||||
}
|
var hr = (uint)comEx.HResult;
|
||||||
catch (COMException comEx)
|
if (hr == 0x8001010E || hr == 0x80004005)
|
||||||
{
|
{
|
||||||
var hr = (uint)comEx.HResult;
|
DisconnectFromPPT();
|
||||||
if (hr == 0x8001010E || hr == 0x80004005)
|
}
|
||||||
{
|
LogHelper.WriteLogToFile($"切换到上一页失败: {comEx.Message}", LogHelper.LogType.Error);
|
||||||
DisconnectFromPPT();
|
}
|
||||||
}
|
catch (Exception ex)
|
||||||
LogHelper.WriteLogToFile($"切换到上一页失败: {comEx.Message}", LogHelper.LogType.Error);
|
{
|
||||||
return false;
|
LogHelper.WriteLogToFile($"切换到上一页失败: {ex}", LogHelper.LogType.Error);
|
||||||
|
}
|
||||||
|
}).Start();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LogHelper.WriteLogToFile($"切换到上一页失败: {ex}", LogHelper.LogType.Error);
|
LogHelper.WriteLogToFile($"启动上一页线程失败: {ex}", LogHelper.LogType.Error);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
SafeReleaseComObject(view);
|
|
||||||
SafeReleaseComObject(slideShowWindow);
|
|
||||||
SafeReleaseComObject(slideShowWindows);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryEndSlideShow()
|
public bool TryEndSlideShow()
|
||||||
|
|||||||
Reference in New Issue
Block a user