左撇子用户可能通过将主按钮设置为鼠标右键而不是左键来交换 Windows 上的鼠标按钮。什么 Python 代码可以让我检测到这个设置?
C++ 和 C# 也有类似的问题:
如果鼠标按钮已交换,此函数将返回
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。
这是在 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)
如果鼠标左键和右键的含义互换,则非零;否则,0。
交换或恢复鼠标左键和右键的含义。 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)