improve:PPT联动

This commit is contained in:
2026-01-17 22:29:31 +08:00
parent e26bf83bb0
commit 9c68a5350b
+40 -17
View File
@@ -29,7 +29,7 @@ namespace Ink_Canvas.Helpers
#endregion #endregion
#region Properties #region Properties
public Microsoft.Office.Interop.PowerPoint.Application PPTApplication { get; private set; } public object PPTApplication { get; private set; }
public Presentation CurrentPresentation { get; private set; } public Presentation CurrentPresentation { get; private set; }
public Slides CurrentSlides { get; private set; } public Slides CurrentSlides { get; private set; }
public Slide CurrentSlide { get; private set; } public Slide CurrentSlide { get; private set; }
@@ -44,7 +44,8 @@ namespace Ink_Canvas.Helpers
if (!Marshal.IsComObject(PPTApplication)) return false; if (!Marshal.IsComObject(PPTApplication)) return false;
// 尝试访问一个简单的属性来验证连接是否有效 // 尝试访问一个简单的属性来验证连接是否有效
var _ = PPTApplication.Name; dynamic app = PPTApplication;
var _ = app.Name;
return true; return true;
} }
catch (COMException comEx) catch (COMException comEx)
@@ -253,12 +254,20 @@ namespace Ink_Canvas.Helpers
{ {
if (wait) Thread.Sleep(1000); if (wait) Thread.Sleep(1000);
Microsoft.Office.Interop.PowerPoint.Application pptApp = bestApp as Microsoft.Office.Interop.PowerPoint.Application; try
if (pptApp != null)
{ {
ConnectToPPT(pptApp); Microsoft.Office.Interop.PowerPoint.Application pptApp = bestApp as Microsoft.Office.Interop.PowerPoint.Application;
if (pptApp != null)
{
ConnectToPPT(pptApp);
}
else
{
PPTApplication = bestApp;
ConnectToPPT(null);
}
} }
else catch
{ {
PPTROTConnectionHelper.SafeReleaseComObject(bestApp); PPTROTConnectionHelper.SafeReleaseComObject(bestApp);
} }
@@ -298,7 +307,8 @@ namespace Ink_Canvas.Helpers
try try
{ {
activePresentation = PPTApplication.ActivePresentation; dynamic app = PPTApplication;
activePresentation = app.ActivePresentation;
if (activePresentation != null && !PPTROTConnectionHelper.AreComObjectsEqual(_pptActivePresentation, activePresentation)) if (activePresentation != null && !PPTROTConnectionHelper.AreComObjectsEqual(_pptActivePresentation, activePresentation))
{ {
@@ -325,7 +335,8 @@ namespace Ink_Canvas.Helpers
bool isSlideShowActive = false; bool isSlideShowActive = false;
try try
{ {
activePresentation = PPTApplication.ActivePresentation; dynamic app = PPTApplication;
activePresentation = app.ActivePresentation;
if (activePresentation != null && PPTROTConnectionHelper.GetSlideShowWindowsCount(PPTApplication) > 0) if (activePresentation != null && PPTROTConnectionHelper.GetSlideShowWindowsCount(PPTApplication) > 0)
{ {
@@ -488,11 +499,15 @@ namespace Ink_Canvas.Helpers
{ {
try try
{ {
PPTApplication = pptApp; if (pptApp != null)
{
PPTApplication = pptApp;
}
try try
{ {
_pptActivePresentation = PPTApplication.ActivePresentation; dynamic pptAppDynamic = PPTApplication;
_pptActivePresentation = pptAppDynamic.ActivePresentation;
_updateTime = DateTime.Now; _updateTime = DateTime.Now;
int tempTotalPage = -1; int tempTotalPage = -1;
@@ -537,17 +552,17 @@ namespace Ink_Canvas.Helpers
try try
{ {
Microsoft.Office.Interop.PowerPoint.Application app = PPTApplication as Microsoft.Office.Interop.PowerPoint.Application; Microsoft.Office.Interop.PowerPoint.Application pptAppForEvents = PPTApplication as Microsoft.Office.Interop.PowerPoint.Application;
if (app != null) if (pptAppForEvents != null)
{ {
app.SlideShowNextSlide += new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide); pptAppForEvents.SlideShowNextSlide += new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide);
app.SlideShowBegin += new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin); pptAppForEvents.SlideShowBegin += new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin);
app.SlideShowEnd += new EApplication_SlideShowEndEventHandler(OnSlideShowEnd); pptAppForEvents.SlideShowEnd += new EApplication_SlideShowEndEventHandler(OnSlideShowEnd);
try try
{ {
app.PresentationBeforeClose += new EApplication_PresentationBeforeCloseEventHandler(OnPresentationBeforeClose); pptAppForEvents.PresentationBeforeClose += new EApplication_PresentationBeforeCloseEventHandler(OnPresentationBeforeClose);
} }
catch catch
{ {
@@ -580,7 +595,15 @@ namespace Ink_Canvas.Helpers
PPTConnectionChanged?.Invoke(true); PPTConnectionChanged?.Invoke(true);
LogHelper.WriteLogToFile($"成功绑定! {PPTApplication.Name}", LogHelper.LogType.Event); try
{
dynamic pptAppDynamic2 = PPTApplication;
LogHelper.WriteLogToFile($"成功绑定! {pptAppDynamic2.Name}", LogHelper.LogType.Event);
}
catch
{
LogHelper.WriteLogToFile("成功绑定!", LogHelper.LogType.Event);
}
} }
catch catch
{ {