improve:PPT联动

This commit is contained in:
2026-01-18 01:05:54 +08:00
parent 60c341927f
commit 6ce2aea000
2 changed files with 63 additions and 42 deletions
+56 -41
View File
@@ -30,9 +30,9 @@ namespace Ink_Canvas.Helpers
#region Properties #region Properties
public object PPTApplication { get; private set; } public object PPTApplication { get; private set; }
public Presentation CurrentPresentation { get; private set; } public dynamic CurrentPresentation { get; private set; }
public Slides CurrentSlides { get; private set; } public dynamic CurrentSlides { get; private set; }
public Slide CurrentSlide { get; private set; } public dynamic CurrentSlide { get; private set; }
public int SlidesCount { get; private set; } public int SlidesCount { get; private set; }
public bool IsConnected public bool IsConnected
{ {
@@ -593,33 +593,50 @@ namespace Ink_Canvas.Helpers
try try
{ {
Microsoft.Office.Interop.PowerPoint.Application pptAppForEvents = PPTApplication as Microsoft.Office.Interop.PowerPoint.Application; if (PPTApplication != null)
if (pptAppForEvents != null)
{ {
pptAppForEvents.SlideShowNextSlide += new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide);
pptAppForEvents.SlideShowBegin += new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin);
pptAppForEvents.SlideShowEnd += new EApplication_SlideShowEndEventHandler(OnSlideShowEnd);
try try
{ {
pptAppForEvents.PresentationBeforeClose += new EApplication_PresentationBeforeCloseEventHandler(OnPresentationBeforeClose); Type appType = typeof(Microsoft.Office.Interop.PowerPoint.Application);
if (appType.IsInstanceOfType(PPTApplication))
{
Microsoft.Office.Interop.PowerPoint.Application pptAppForEvents = (Microsoft.Office.Interop.PowerPoint.Application)PPTApplication;
pptAppForEvents.SlideShowNextSlide += new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide);
pptAppForEvents.SlideShowBegin += new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin);
pptAppForEvents.SlideShowEnd += new EApplication_SlideShowEndEventHandler(OnSlideShowEnd);
try
{
pptAppForEvents.PresentationBeforeClose += new EApplication_PresentationBeforeCloseEventHandler(OnPresentationBeforeClose);
}
catch
{
LogHelper.WriteLogToFile("无法注册PresentationBeforeClose事件", LogHelper.LogType.Warning);
}
_bindingEvents = true;
_forcePolling = false;
LogHelper.WriteLogToFile("PPT事件注册成功", LogHelper.LogType.Trace);
}
else
{
_bindingEvents = false;
_forcePolling = true;
LogHelper.WriteLogToFile("无法转换为强类型Application,使用轮询模式", LogHelper.LogType.Trace);
}
} }
catch catch (Exception ex)
{ {
LogHelper.WriteLogToFile("无法注册PresentationBeforeClose事件", LogHelper.LogType.Warning); _bindingEvents = false;
_forcePolling = true;
LogHelper.WriteLogToFile($"事件注册失败: {ex.Message},使用轮询模式", LogHelper.LogType.Trace);
} }
_bindingEvents = true;
_forcePolling = false;
LogHelper.WriteLogToFile("PPT事件注册成功", LogHelper.LogType.Trace);
} }
else else
{ {
_bindingEvents = false; _bindingEvents = false;
_forcePolling = true; _forcePolling = true;
LogHelper.WriteLogToFile("无法转换为强类型Application,使用轮询模式", LogHelper.LogType.Trace);
} }
} }
catch (Exception ex) catch (Exception ex)
@@ -670,10 +687,10 @@ namespace Ink_Canvas.Helpers
{ {
try try
{ {
Microsoft.Office.Interop.PowerPoint.Application app = PPTApplication as Microsoft.Office.Interop.PowerPoint.Application; Type appType = typeof(Microsoft.Office.Interop.PowerPoint.Application);
if (appType.IsInstanceOfType(PPTApplication))
if (app != null)
{ {
Microsoft.Office.Interop.PowerPoint.Application app = (Microsoft.Office.Interop.PowerPoint.Application)PPTApplication;
app.SlideShowNextSlide -= new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide); app.SlideShowNextSlide -= new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide);
app.SlideShowBegin -= new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin); app.SlideShowBegin -= new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin);
app.SlideShowEnd -= new EApplication_SlideShowEndEventHandler(OnSlideShowEnd); app.SlideShowEnd -= new EApplication_SlideShowEndEventHandler(OnSlideShowEnd);
@@ -835,22 +852,16 @@ namespace Ink_Canvas.Helpers
if (_pptActivePresentation != null) if (_pptActivePresentation != null)
{ {
try try
{
CurrentPresentation = _pptActivePresentation as Presentation;
if (CurrentPresentation != null)
{
CurrentSlides = CurrentPresentation.Slides;
}
else
{
dynamic pres = _pptActivePresentation;
CurrentSlides = pres.Slides as Slides;
}
}
catch
{ {
dynamic pres = _pptActivePresentation; dynamic pres = _pptActivePresentation;
CurrentSlides = pres.Slides as Slides; CurrentPresentation = pres;
CurrentSlides = pres.Slides;
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"访问演示文稿属性失败: {ex.Message}", LogHelper.LogType.Warning);
CurrentPresentation = null;
CurrentSlides = null;
} }
if (CurrentSlides != null) if (CurrentSlides != null)
@@ -886,10 +897,13 @@ namespace Ink_Canvas.Helpers
if (view != null) if (view != null)
{ {
dynamic viewObj = view; dynamic viewObj = view;
CurrentSlide = viewObj.Slide as Slide; CurrentSlide = viewObj.Slide;
} }
} }
catch { } catch (Exception ex)
{
LogHelper.WriteLogToFile($"获取SlideShowWindow的Slide失败: {ex.Message}", LogHelper.LogType.Trace);
}
} }
else else
{ {
@@ -1022,10 +1036,10 @@ namespace Ink_Canvas.Helpers
{ {
try try
{ {
Microsoft.Office.Interop.PowerPoint.Application app = PPTApplication as Microsoft.Office.Interop.PowerPoint.Application; Type appType = typeof(Microsoft.Office.Interop.PowerPoint.Application);
if (appType.IsInstanceOfType(PPTApplication))
if (app != null)
{ {
Microsoft.Office.Interop.PowerPoint.Application app = (Microsoft.Office.Interop.PowerPoint.Application)PPTApplication;
app.SlideShowNextSlide -= new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide); app.SlideShowNextSlide -= new EApplication_SlideShowNextSlideEventHandler(OnSlideShowNextSlide);
app.SlideShowBegin -= new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin); app.SlideShowBegin -= new EApplication_SlideShowBeginEventHandler(OnSlideShowBegin);
app.SlideShowEnd -= new EApplication_SlideShowEndEventHandler(OnSlideShowEnd); app.SlideShowEnd -= new EApplication_SlideShowEndEventHandler(OnSlideShowEnd);
@@ -2548,3 +2562,4 @@ namespace Ink_Canvas.Helpers
} }
} }
+7 -1
View File
@@ -69,7 +69,13 @@ namespace Ink_Canvas.Helpers
{ {
try try
{ {
Microsoft.Office.Interop.PowerPoint.Application pptApp = bestApp as Microsoft.Office.Interop.PowerPoint.Application; Type appType = typeof(Microsoft.Office.Interop.PowerPoint.Application);
Microsoft.Office.Interop.PowerPoint.Application pptApp = null;
if (appType.IsInstanceOfType(bestApp))
{
pptApp = (Microsoft.Office.Interop.PowerPoint.Application)bestApp;
}
if (pptApp != null) if (pptApp != null)
{ {