如何从 Python 检测 Windows 上的鼠标按钮是否交换?

问题描述 投票:0回答:2

左撇子用户可能通过将主按钮设置为鼠标右键而不是左键来交换 Windows 上的鼠标按钮。什么 Python 代码可以让我检测到这个设置?

C++ 和 C# 也有类似的问题:

使用C#从Windows 8读取惯用手设置

在C++中检查鼠标按钮是否交换

python winapi mouse
2个回答
4
投票

如果鼠标按钮已交换,此函数将返回

True
;如果没有交换,则返回
False

import ctypes

def mouse_is_swapped():
    # GetSystemMetrics() with SM_SWAPBUTTON docs from MSDN: "Nonzero if the meanings of the left and right mouse buttons are swapped; otherwise, 0."
    SM_SWAPBUTTON = 23
    return ctypes.windll.user32.GetSystemMetrics(SM_SWAPBUTTON) != 0

此代码仅使用标准库,不需要任何第三方包,例如pywin32。


0
投票

这是在 Python 中获取或设置鼠标交换的简单单行方法。

获得:

win32api.GetSystemMetrics(win32con.SM_SWAPBUTTON)

设置:
win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEBUTTONSWAP,1)
(0 表示取消交换)

或者:
获取方式:

ctypes.windll.user32.GetSystemMetrics(win32con.SM_SWAPBUTTON)

设置:
ctypes.windll.user32.SystemParametersInfoA(win32con.SPI_SETMOUSEBUTTONSWAP,1,0,0)

SM_SWAPBUTTON

如果鼠标左键和右键的含义互换,则非零;否则,0。

SPI_SETMOUSEBUTTONSWAP

交换或恢复鼠标左键和右键的含义。 uiParam 参数指定 TRUE 来交换按钮的含义,或指定 FALSE 来恢复其原始含义。 要检索当前设置,请使用 SM_SWAPBUTTON 标志调用 GetSystemMetrics。

这是一个交换鼠标按钮的简单脚本:

import win32api, win32con, win32gui

swapped = win32api.GetSystemMetrics(win32con.SM_SWAPBUTTON)
win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEBUTTONSWAP,not swapped)

print("Restored" if swapped else "Swapped")

要使更改永久生效(当您重新登录时),请添加以下标志:

flags = win32con.SPIF_UPDATEINIFILE | win32con.SPIF_SENDCHANGE

win32gui.SystemParametersInfo(win32con.SPI_SETMOUSEBUTTONSWAP,1,flags)
ctypes.windll.user32.SystemParametersInfoA(win32con.SPI_SETMOUSEBUTTONSWAP,1,0,flags)
© www.soinside.com 2019 - 2024. All rights reserved.