From 22da4cc40882eac565f3c3d36f34fe7cc9d84029 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Sun, 24 Aug 2025 11:08:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=97=A0=E7=84=A6=E7=82=B9=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E7=BF=BB=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/MainWindow.xaml.cs | 55 +++++++++++++++++++++++++- Ink Canvas/MainWindow_cs/MW_Hotkeys.cs | 31 ++++++++++++--- 2 files changed, 79 insertions(+), 7 deletions(-) diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index a744cc09..c4667900 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; +using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Threading; @@ -292,9 +293,15 @@ namespace Ink_Canvas if (StackPanelPPTControls.Visibility == Visibility.Visible) { if (gest.ApplicationGesture == ApplicationGesture.Left) - BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); + { + // 直接发送翻页请求到PPT放映软件 + SendKeyToPPTSlideShow(false); // 下一页 + } if (gest.ApplicationGesture == ApplicationGesture.Right) - BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); + { + // 直接发送翻页请求到PPT放映软件 + SendKeyToPPTSlideShow(true); // 上一页 + } } } catch { } @@ -1667,6 +1674,8 @@ namespace Ink_Canvas private static extern bool BringWindowToTop(IntPtr hWnd); [DllImport("user32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); + [DllImport("user32.dll")] + private static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); private const int GWL_EXSTYLE = -20; @@ -2128,5 +2137,47 @@ namespace Ink_Canvas } } #endregion + + #region PPT翻页直接传递 + /// + /// 直接发送翻页请求到PPT放映软件,让PPT软件处理翻页 + /// + /// 是否为上一页 + private void SendKeyToPPTSlideShow(bool isPrevious) + { + try + { + // 查找PPT放映窗口并发送按键 + var pptWindows = Process.GetProcessesByName("POWERPNT"); + var wpsWindows = Process.GetProcessesByName("wpp"); + + foreach (var process in pptWindows.Concat(wpsWindows)) + { + if (process.MainWindowHandle != IntPtr.Zero) + { + // 激活PPT窗口 + SetForegroundWindow(process.MainWindowHandle); + + // 发送翻页按键消息 + int keyCode = isPrevious ? 0x21 : 0x22; // VK_PRIOR : VK_NEXT + + // 发送按键按下和释放消息 + PostMessage(process.MainWindowHandle, 0x0100, (IntPtr)keyCode, IntPtr.Zero); // WM_KEYDOWN + PostMessage(process.MainWindowHandle, 0x0101, (IntPtr)keyCode, IntPtr.Zero); // WM_KEYUP + + break; + } + } + } + catch (Exception ex) + { + // 如果直接发送失败,回退到原来的方法 + if (isPrevious) + BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); + else + BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); + } + } + #endregion } } diff --git a/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs b/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs index 79ef9e5f..edcbbbb1 100644 --- a/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs +++ b/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs @@ -1,5 +1,9 @@ using System.Windows; using System.Windows.Input; +using System.Diagnostics; +using System; +using System.Linq; +using System.Runtime.InteropServices; namespace Ink_Canvas { @@ -8,19 +12,36 @@ namespace Ink_Canvas private void Window_MouseWheel(object sender, MouseWheelEventArgs e) { if (StackPanelPPTControls.Visibility != Visibility.Visible || currentMode != 0) return; + + // 直接发送翻页请求到PPT放映软件,不通过软件处理 if (e.Delta >= 120) - BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); - else if (e.Delta <= -120) BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); + { + // 上一页 - 发送PageUp键到PPT放映窗口 + SendKeyToPPTSlideShow(true); + } + else if (e.Delta <= -120) + { + // 下一页 - 发送PageDown键到PPT放映窗口 + SendKeyToPPTSlideShow(false); + } } private void Main_Grid_PreviewKeyDown(object sender, KeyEventArgs e) { if (StackPanelPPTControls.Visibility != Visibility.Visible || currentMode != 0) return; + // 直接发送翻页请求到PPT放映软件,不通过软件处理 if (e.Key == Key.Down || e.Key == Key.PageDown || e.Key == Key.Right || e.Key == Key.N || - e.Key == Key.Space) BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); - if (e.Key == Key.Up || e.Key == Key.PageUp || e.Key == Key.Left || e.Key == Key.P) - BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); + e.Key == Key.Space) + { + e.Handled = true; // 阻止事件继续传播 + SendKeyToPPTSlideShow(false); // 下一页 + } + else if (e.Key == Key.Up || e.Key == Key.PageUp || e.Key == Key.Left || e.Key == Key.P) + { + e.Handled = true; // 阻止事件继续传播 + SendKeyToPPTSlideShow(true); // 上一页 + } } private void Window_KeyDown(object sender, KeyEventArgs e)