你如何使用Python检测Windows上的鼠标按钮是否被交换?

6
2个回答

5

如果鼠标按钮已经交换,此函数将返回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。


每当你发现自己在写一个解释某个值意义的注释时,就把这个注释删掉,用一个符号常量来代替。 - IInspectable

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)

input("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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接