通过终端在 OS X 上交换左键/右键单击

通过终端在 OS X 上交换左键/右键单击

我正在寻找一种方法来通过终端交换鼠标上的左/右按钮(左/右手的人)。

目前,每次我想切换时,我都需要转到“系统偏好设置”»“鼠标”»“更改辅助单击选项”。在终端中运行快速命令会容易得多。

我见过这样的事情: defaults write GlobalPreferences com.apple.mouse.scaling -1

总结:有没有办法通过终端执行鼠标二次点击这种命令(上面)?

我的操作系统是 10.7.5。

答案1

相关命令是:

defaults -currentHost write .GlobalPreferences com.apple.mouse.swapLeftRightButton -bool true

(或“false”将其恢复正常。)然而,我不知道如何在不注销并重新登录的情况下使设置生效,这通常比使用系统偏好设置进行更改更麻烦。

答案2

我最终还是选择了此解决方案

我发现的另一个技巧是这个问题方法是将脚本添加到菜单栏,方法是这样做:

  1. 打开 AppleScripts 编辑器(我只是在 Spotlight 上搜索)
  2. 如果你还没有脚本图标在菜单栏中:
    1. 点击AppleScripts 编辑器在菜单栏中
    2. 点击首选项
    3. 启用复选框在菜单栏中显示脚本菜单. 我个人更喜欢取消勾选显示计算机脚本
  3. 单击菜单栏上显示的脚本图标
  4. 点击打开脚本文件夹并选择打开用户脚本文件夹
  5. 保存或复制你的脚本文件到此文件夹中(我使用的脚本可以在这里
  6. 当你想要运行脚本时,只需单击脚本图标并选择脚本

答案3

这是一个更简单的脚本,可以切换设置并且不会激活系统偏好设置:

tell application "System Preferences"
    reveal pane "com.apple.preference.mouse"
end tell
tell application "System Events" to tell process "System Preferences"
    tell radio group 1 of window 1
        if value of radio button 1 is 1 then
            click radio button 2
        else
            click radio button 1
        end if
    end tell
end tell
quit application "System Preferences"

它不适用于 Magic Mouse 版本的偏好设置窗格。

您可以在 AppleScript 编辑器中保存脚本并使用 运行它osascript script.scpt。或者参阅这个问题了解为脚本分配快捷方式的不同方法。

答案4

可以直接通过 IOHID 进行:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>
#include <IOKit/hidsystem/event_status_driver.h>

int main(int argc, char *argv[]) {
    io_connect_t handle = NXOpenEventStatus();
    
    if (!handle) {
            printf("NXOpenEventStatus failed!\n");
            return 0;
    } 
    

    int64_t         currentButtonStatus     = 0;

    
    kern_return_t ret;
    
    IOByteCount actualSize;
    ret = IOHIDGetParameter(handle, CFSTR(kIOHIDPointerButtonMode),
        sizeof(currentButtonStatus), &currentButtonStatus, &actualSize);
    
    if (ret != KERN_SUCCESS) {
            printf("IOHIDGetParameter failed! Error %d.\n",  (int)ret);
    }
    else if (actualSize != sizeof(currentButtonStatus)) {
            printf("IOHIDGetParameter returned unexpected actualSize! (Got %d)\n", (int)actualSize);
    }
    else if (ret == KERN_SUCCESS) {
        int64_t newButtonStatus = 3 - currentButtonStatus;
        ret = IOHIDSetParameter(handle, CFSTR(kIOHIDPointerButtonMode), &newButtonStatus, sizeof(newButtonStatus));
        if (ret != KERN_SUCCESS) {
                printf("IOHIDSetParameter failed! Error %d. (Current status = %d)\n", (int)ret, currentButtonStatus);
        }
        else {
                printf("success. Was %d, now %d.\n", currentButtonStatus, newButtonStatus);
        }
    }
    
    NXCloseEventStatus(handle);
    return 0;

}

相关内容