我正在寻找一种方法来通过终端交换鼠标上的左/右按钮(左/右手的人)。
目前,每次我想切换时,我都需要转到“系统偏好设置”»“鼠标”»“更改辅助单击选项”。在终端中运行快速命令会容易得多。
我见过这样的事情:
defaults write GlobalPreferences com.apple.mouse.scaling -1
总结:有没有办法通过终端执行鼠标二次点击这种命令(上面)?
我的操作系统是 10.7.5。
答案1
相关命令是:
defaults -currentHost write .GlobalPreferences com.apple.mouse.swapLeftRightButton -bool true
(或“false”将其恢复正常。)然而,我不知道如何在不注销并重新登录的情况下使设置生效,这通常比使用系统偏好设置进行更改更麻烦。
答案2
答案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), ¤tButtonStatus, &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;
}