在 Windows 中,有一个 Win32 系统调用 SwapMouseButton 来交换鼠标的主按钮。现在,我需要这样的系统调用或在 Linux 和 MacOS 上交换鼠标按钮的方法。通过这个,我想制作一键式鼠标按钮交换应用程序。
你将如何在 C 中做到这一点?
我认为没有系统调用可以做到这一点。鼠标是由 X 系统操作的,而不是由内核操作的。
您可以运行此 shell 命令xmodmap -e "pointer = 3 2 1"
来交换左右按钮,并运行xmodmap -e "pointer = 1 2 3"
以恢复原始设置。
您也可以使用execve
从C执行上述命令。
该system
功能实际上更易于使用:
system("xmodmap -e \"pointer = 3 2 1\""); // for swapping buttons
system("xmodmap -e \"pointer = 1 2 3\""); // for restoring functionality
我不知道输出是否可靠/便携,但xmodmap -pp
会报告当前的指针按钮映射,因此根据您的用例,您可以使用它来切换状态。
例如,作为一个shell 命令,在我的系统上,以下切换(并报告)和之间的前三个按钮1 2 3
(3 2 1
嗯,这是一个假设,但它足以满足我的要求)。
(xmodmap -pp | grep -q "\b1\b *\b1\b") && xmodmap -e "pointer = 3 2 1" || xmodmap -e "pointer = 1 2 3"; xmodmap -pp | head -7