improve:PPT联动

This commit is contained in:
2026-01-17 22:38:40 +08:00
parent 9c68a5350b
commit 786d4fc719
2 changed files with 34 additions and 23 deletions
+32 -21
View File
@@ -23,7 +23,6 @@ namespace Ink_Canvas.Helpers
public event Action<SlideShowWindow> SlideShowNextSlide; public event Action<SlideShowWindow> SlideShowNextSlide;
public event Action<Presentation> SlideShowEnd; public event Action<Presentation> SlideShowEnd;
public event Action<Presentation> PresentationOpen; public event Action<Presentation> PresentationOpen;
public event Action<Presentation> PresentationClose;
public event Action<bool> PPTConnectionChanged; public event Action<bool> PPTConnectionChanged;
public event Action<bool> SlideShowStateChanged; public event Action<bool> SlideShowStateChanged;
#endregion #endregion
@@ -75,7 +74,8 @@ namespace Ink_Canvas.Helpers
{ {
if (PPTApplication == null || !Marshal.IsComObject(PPTApplication)) return false; if (PPTApplication == null || !Marshal.IsComObject(PPTApplication)) return false;
slideShowWindows = PPTApplication.SlideShowWindows; dynamic app = PPTApplication;
slideShowWindows = app.SlideShowWindows;
if (slideShowWindows == null) return false; if (slideShowWindows == null) return false;
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
@@ -149,8 +149,6 @@ namespace Ink_Canvas.Helpers
private bool _forcePolling = false; private bool _forcePolling = false;
private bool _bindingEvents = false; private bool _bindingEvents = false;
private DateTime _updateTime; private DateTime _updateTime;
private Thread _monitoringThread;
private bool _shouldStopMonitoring = false;
#endregion #endregion
#region Constructor & Initialization #region Constructor & Initialization
@@ -338,7 +336,8 @@ namespace Ink_Canvas.Helpers
dynamic app = PPTApplication; dynamic app = PPTApplication;
activePresentation = app.ActivePresentation; activePresentation = app.ActivePresentation;
if (activePresentation != null && PPTROTConnectionHelper.GetSlideShowWindowsCount(PPTApplication) > 0) Microsoft.Office.Interop.PowerPoint.Application pptAppForCount = PPTApplication as Microsoft.Office.Interop.PowerPoint.Application;
if (activePresentation != null && pptAppForCount != null && PPTROTConnectionHelper.GetSlideShowWindowsCount(pptAppForCount) > 0)
{ {
isSlideShowActive = true; isSlideShowActive = true;
@@ -829,7 +828,8 @@ namespace Ink_Canvas.Helpers
} }
else else
{ {
activeWindow = PPTApplication.ActiveWindow; dynamic app = PPTApplication;
activeWindow = app.ActiveWindow;
if (activeWindow != null) if (activeWindow != null)
{ {
dynamic aw = activeWindow; dynamic aw = activeWindow;
@@ -929,7 +929,8 @@ namespace Ink_Canvas.Helpers
{ {
try try
{ {
_pptActivePresentation = PPTApplication.ActivePresentation; dynamic app = PPTApplication;
_pptActivePresentation = app.ActivePresentation;
_updateTime = DateTime.Now; _updateTime = DateTime.Now;
} }
catch { } catch { }
@@ -1086,7 +1087,8 @@ namespace Ink_Canvas.Helpers
if (IsInSlideShow) if (IsInSlideShow)
{ {
slideShowWindows = PPTApplication.SlideShowWindows; dynamic app = PPTApplication;
slideShowWindows = app.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
@@ -1170,7 +1172,8 @@ namespace Ink_Canvas.Helpers
{ {
try try
{ {
object slideShowWindows = PPTApplication.SlideShowWindows; dynamic app = PPTApplication;
object slideShowWindows = app.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
@@ -1233,7 +1236,8 @@ namespace Ink_Canvas.Helpers
{ {
try try
{ {
object slideShowWindows = PPTApplication.SlideShowWindows; dynamic app = PPTApplication;
object slideShowWindows = app.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
@@ -1294,7 +1298,8 @@ namespace Ink_Canvas.Helpers
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; dynamic app = PPTApplication;
slideShowWindows = app.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
@@ -1382,7 +1387,8 @@ namespace Ink_Canvas.Helpers
if (IsInSlideShow) if (IsInSlideShow)
{ {
slideShowWindows = PPTApplication.SlideShowWindows; dynamic pptAppForSSW = PPTApplication;
slideShowWindows = pptAppForSSW.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
@@ -1409,7 +1415,8 @@ namespace Ink_Canvas.Helpers
} }
} }
activeWindow = PPTApplication.ActiveWindow; dynamic app = PPTApplication;
activeWindow = app.ActiveWindow;
if (activeWindow != null) if (activeWindow != null)
{ {
dynamic aw = activeWindow; dynamic aw = activeWindow;
@@ -1521,7 +1528,8 @@ namespace Ink_Canvas.Helpers
} }
} }
activeWindow = PPTApplication.ActiveWindow; dynamic app = PPTApplication;
activeWindow = app.ActiveWindow;
if (activeWindow != null) if (activeWindow != null)
{ {
dynamic aw = activeWindow; dynamic aw = activeWindow;
@@ -1643,7 +1651,8 @@ namespace Ink_Canvas.Helpers
return false; return false;
} }
slideShowWindows = PPTApplication.SlideShowWindows; dynamic app = PPTApplication;
slideShowWindows = app.SlideShowWindows;
if (slideShowWindows != null) if (slideShowWindows != null)
{ {
dynamic ssw = slideShowWindows; dynamic ssw = slideShowWindows;
@@ -1716,11 +1725,12 @@ namespace Ink_Canvas.Helpers
Process wpsProcess = null; Process wpsProcess = null;
// 方法1:通过应用程序路径检测 // 方法1:通过应用程序路径检测
if (PPTApplication.Path.Contains("Kingsoft\\WPS Office\\") || dynamic app = PPTApplication;
PPTApplication.Path.Contains("WPS Office\\")) if (app.Path.Contains("Kingsoft\\WPS Office\\") ||
app.Path.Contains("WPS Office\\"))
{ {
uint processId; uint processId;
GetWindowThreadProcessId((IntPtr)PPTApplication.HWND, out processId); GetWindowThreadProcessId((IntPtr)app.HWND, out processId);
wpsProcess = Process.GetProcessById((int)processId); wpsProcess = Process.GetProcessById((int)processId);
} }
@@ -1976,9 +1986,10 @@ namespace Ink_Canvas.Helpers
{ {
if (PPTApplication != null && Marshal.IsComObject(PPTApplication)) if (PPTApplication != null && Marshal.IsComObject(PPTApplication))
{ {
if (PPTApplication.SlideShowWindows?.Count > 0) dynamic app = PPTApplication;
if (app.SlideShowWindows?.Count > 0)
{ {
pptActWindow = PPTApplication.SlideShowWindows[1]; pptActWindow = app.SlideShowWindows[1];
} }
} }
} }
@@ -2005,7 +2016,7 @@ namespace Ink_Canvas.Helpers
} }
// 第三步:释放 pptApp 对象(PPTApplication // 第三步:释放 pptApp 对象(PPTApplication
Microsoft.Office.Interop.PowerPoint.Application pptApp = PPTApplication; Microsoft.Office.Interop.PowerPoint.Application pptApp = PPTApplication as Microsoft.Office.Interop.PowerPoint.Application;
if (pptApp != null) if (pptApp != null)
{ {
Marshal.ReleaseComObject(pptApp); Marshal.ReleaseComObject(pptApp);
+2 -2
View File
@@ -133,7 +133,6 @@ namespace Ink_Canvas
_pptManager.SlideShowNextSlide += OnPPTSlideShowNextSlide; _pptManager.SlideShowNextSlide += OnPPTSlideShowNextSlide;
_pptManager.SlideShowEnd += OnPPTSlideShowEnd; _pptManager.SlideShowEnd += OnPPTSlideShowEnd;
_pptManager.PresentationOpen += OnPPTPresentationOpen; _pptManager.PresentationOpen += OnPPTPresentationOpen;
_pptManager.PresentationClose += OnPPTPresentationClose;
_pptManager.SlideShowStateChanged += OnPPTSlideShowStateChanged; _pptManager.SlideShowStateChanged += OnPPTSlideShowStateChanged;
_singlePPTInkManager = new PPTInkManager(); _singlePPTInkManager = new PPTInkManager();
@@ -990,7 +989,8 @@ namespace Ink_Canvas
{ {
if (_pptManager?.PPTApplication != null) if (_pptManager?.PPTApplication != null)
{ {
if (_pptManager.PPTApplication.SlideShowWindows.Count >= 1) dynamic pptApp = _pptManager.PPTApplication;
if (pptApp.SlideShowWindows.Count >= 1)
{ {
pres.SlideShowWindow.View.GotoSlide(page); pres.SlideShowWindow.View.GotoSlide(page);
} }