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)