From 3d704b3676f18d583c5da4464eb24ddfaad5360e Mon Sep 17 00:00:00 2001 From: laoyijiehe <2837434375@qq.com> Date: Tue, 12 May 2026 19:08:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E6=94=AF=E6=8C=81=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=BC=A0=E6=A0=87=E5=B7=A6=E5=8F=B3=E9=94=AE=E4=BA=92=E6=8D=A2?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/MaaWin32ControlUnit/Input/InputUtils.h | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/source/MaaWin32ControlUnit/Input/InputUtils.h b/source/MaaWin32ControlUnit/Input/InputUtils.h index 4e74b58a67..9b25ae7ca8 100644 --- a/source/MaaWin32ControlUnit/Input/InputUtils.h +++ b/source/MaaWin32ControlUnit/Input/InputUtils.h @@ -53,6 +53,23 @@ inline void ensure_foreground_and_topmost(HWND hwnd) } } +// 检查鼠标左右按键是否被交换 +inline bool IsMouseButtonSwapped() +{ + int is_swapped = GetSystemMetrics(SM_SWAPBUTTON); + return is_swapped != 0; +} + +// 获取兼容鼠标左右按键交换后的鼠标按键映射 +inline int GetMappedContact(int original_contact) +{ + if (IsMouseButtonSwapped()) { + // 左右键交换后,左键为1,右键为0,异或取反即可 + return original_contact ^ 1; + } + return original_contact; +} + // Contact 到 WM_* 消息的转换结果 struct MouseMessageInfo { @@ -63,7 +80,8 @@ struct MouseMessageInfo // 将 contact ID 转换为鼠标按下消息 inline bool contact_to_mouse_down_message(int contact, MouseMessageInfo& info) { - switch (contact) { + int mapped_contact = GetMappedContact(contact); + switch (mapped_contact) { case 0: info.message = WM_LBUTTONDOWN; info.w_param = MK_LBUTTON; @@ -92,7 +110,8 @@ inline bool contact_to_mouse_down_message(int contact, MouseMessageInfo& info) // 将 contact ID 转换为鼠标移动消息 inline bool contact_to_mouse_move_message(int contact, MouseMessageInfo& info) { - switch (contact) { + int mapped_contact = GetMappedContact(contact); + switch (mapped_contact) { case 0: info.message = WM_MOUSEMOVE; info.w_param = MK_LBUTTON; @@ -121,7 +140,8 @@ inline bool contact_to_mouse_move_message(int contact, MouseMessageInfo& info) // 将 contact ID 转换为鼠标抬起消息 inline bool contact_to_mouse_up_message(int contact, MouseMessageInfo& info) { - switch (contact) { + int mapped_contact = GetMappedContact(contact); + switch (mapped_contact) { case 0: info.message = WM_LBUTTONUP; info.w_param = 0; @@ -157,7 +177,8 @@ struct MouseEventFlags // 将 contact ID 转换为 MOUSEEVENTF 按下标志(用于 SendInput/mouse_event) inline bool contact_to_mouse_down_flags(int contact, MouseEventFlags& flags_info) { - switch (contact) { + int mapped_contact = GetMappedContact(contact); + switch (mapped_contact) { case 0: flags_info.flags = MOUSEEVENTF_LEFTDOWN; flags_info.button_data = 0; @@ -186,7 +207,8 @@ inline bool contact_to_mouse_down_flags(int contact, MouseEventFlags& flags_info // 将 contact ID 转换为 MOUSEEVENTF 抬起标志(用于 SendInput/mouse_event) inline bool contact_to_mouse_up_flags(int contact, MouseEventFlags& flags_info) { - switch (contact) { + int mapped_contact = GetMappedContact(contact); + switch (mapped_contact) { case 0: flags_info.flags = MOUSEEVENTF_LEFTUP; flags_info.button_data = 0; From 2b7e3579944f56a26dd75a55fc285f3b66f1a3ec Mon Sep 17 00:00:00 2001 From: laoyijiehe <2837434375@qq.com> Date: Tue, 12 May 2026 19:13:45 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E6=94=AF=E6=8C=81=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=BC=A0=E6=A0=87=E5=B7=A6=E5=8F=B3=E9=94=AE=E4=BA=92=E6=8D=A2?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=20Fixes=20#1323?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/MaaWin32ControlUnit/Input/InputUtils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/MaaWin32ControlUnit/Input/InputUtils.h b/source/MaaWin32ControlUnit/Input/InputUtils.h index 9b25ae7ca8..915f55fd8a 100644 --- a/source/MaaWin32ControlUnit/Input/InputUtils.h +++ b/source/MaaWin32ControlUnit/Input/InputUtils.h @@ -64,7 +64,7 @@ inline bool IsMouseButtonSwapped() inline int GetMappedContact(int original_contact) { if (IsMouseButtonSwapped()) { - // 左右键交换后,左键为1,右键为0,异或取反即可 + // 左右键交换后,左键为1,右键为0,异或取反输出即可 return original_contact ^ 1; } return original_contact; From 2ead700b88f51e1973bf8e2b0a1621651f4d67b7 Mon Sep 17 00:00:00 2001 From: laoyijiehe <2837434375@qq.com> Date: Tue, 12 May 2026 20:28:10 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix(Win32Input):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=BC=A0=E6=A0=87=E5=B7=A6=E5=8F=B3=E9=94=AE?= =?UTF-8?q?=E4=BA=92=E6=8D=A2=E8=AE=BE=E7=BD=AE=20Fixes=20#1323?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/MaaWin32ControlUnit/Input/InputUtils.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/source/MaaWin32ControlUnit/Input/InputUtils.h b/source/MaaWin32ControlUnit/Input/InputUtils.h index 915f55fd8a..d2e67b101e 100644 --- a/source/MaaWin32ControlUnit/Input/InputUtils.h +++ b/source/MaaWin32ControlUnit/Input/InputUtils.h @@ -56,16 +56,20 @@ inline void ensure_foreground_and_topmost(HWND hwnd) // 检查鼠标左右按键是否被交换 inline bool IsMouseButtonSwapped() { - int is_swapped = GetSystemMetrics(SM_SWAPBUTTON); - return is_swapped != 0; + return GetSystemMetrics(SM_SWAPBUTTON) != 0; } // 获取兼容鼠标左右按键交换后的鼠标按键映射 inline int GetMappedContact(int original_contact) { - if (IsMouseButtonSwapped()) { - // 左右键交换后,左键为1,右键为0,异或取反输出即可 - return original_contact ^ 1; + if (!IsMouseButtonSwapped()) { + return original_contact; + } + if (original_contact == 0) { + return 1; + } + if (original_contact == 1) { + return 0; } return original_contact; }