Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 31 additions & 5 deletions source/MaaWin32ControlUnit/Input/InputUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,27 @@ inline void ensure_foreground_and_topmost(HWND hwnd)
}
}

// 检查鼠标左右按键是否被交换
inline bool IsMouseButtonSwapped()
{
return GetSystemMetrics(SM_SWAPBUTTON) != 0;
}

// 获取兼容鼠标左右按键交换后的鼠标按键映射
inline int GetMappedContact(int original_contact)
{
if (!IsMouseButtonSwapped()) {
return original_contact;
}
if (original_contact == 0) {
return 1;
}
if (original_contact == 1) {
return 0;
}
return original_contact;
}

// Contact 到 WM_* 消息的转换结果
struct MouseMessageInfo
{
Expand All @@ -63,7 +84,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;
Expand Down Expand Up @@ -92,7 +114,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;
Expand Down Expand Up @@ -121,7 +144,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;
Expand Down Expand Up @@ -157,7 +181,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;
Expand Down Expand Up @@ -186,7 +211,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;
Expand Down
Loading