improve:PPT联动

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