Macos 在OSX中重新映射密钥的正确API是什么?
我在看Karabiner,一款用于Parallels开发的OSX键盘改版。根据这一点,最好通过向苹果提交一个bug来修复 创建此类功能的替代(如果有)受支持的API是什么 尽管文档和用户界面很粗略,但它还是可靠且通用的,可以原谅正在进行的工作。有许多有用的例子,例如,需要专用工具和Karabiner错误日志来生成复杂的JSON规则。任何键都可以同时是修改器和常规键、运行程序等。GitHub上的公共域。正如OP链接到的GitHub问题(自他发布后添加)所述,记录了正确的API: IOKit HID API可用于密钥重新映射。用户将 提供HID事件系统将使用的密钥重新映射字典 应用于键盘。Macos 在OSX中重新映射密钥的正确API是什么?,macos,nstouchbar,Macos,Nstouchbar,我在看Karabiner,一款用于Parallels开发的OSX键盘改版。根据这一点,最好通过向苹果提交一个bug来修复 创建此类功能的替代(如果有)受支持的API是什么 尽管文档和用户界面很粗略,但它还是可靠且通用的,可以原谅正在进行的工作。有许多有用的例子,例如,需要专用工具和Karabiner错误日志来生成复杂的JSON规则。任何键都可以同时是修改器和常规键、运行程序等。GitHub上的公共域。正如OP链接到的GitHub问题(自他发布后添加)所述,记录了正确的API: IOKit HID
清单3:使用IOKit HID重新映射键 API.//使用Xcode 8.2.1编译
#import <Foundation/Foundation.h>
#import <IOKit/hidsystem/IOHIDEventSystemClient.h>
#import <IOKit/hidsystem/IOHIDServiceClient.h>
#import <IOKit/hid/IOHIDUsageTables.h>
int main(int argc, char *argv[])
{
IOHIDEventSystemClientRef system;
CFArrayRef services;
uint64_t aKey = 0x700000004;
uint64_t bKey = 0x700000005;
NSArray *map = @[
@{@kIOHIDKeyboardModifierMappingSrcKey:@(aKey),
@kIOHIDKeyboardModifierMappingDstKey:@(bKey)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(bKey),
@kIOHIDKeyboardModifierMappingDstKey:@(aKey)},
];
system = IOHIDEventSystemClientCreateSimpleClient(kCFAllocatorDefault);
services = IOHIDEventSystemClientCopyServices(system);
for(CFIndex i = 0; i < CFArrayGetCount(services); i++) {
IOHIDServiceClientRef service = (IOHIDServiceClientRef)CFArrayGetValueAtIndex(services, i);
if(IOHIDServiceClientConformsTo(service, kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard)) {
IOHIDServiceClientSetProperty(service, CFSTR(kIOHIDUserKeyUsageMapKey), (CFArrayRef)map);
}
}
CFRelease(services);
CFRelease(system);
return 0;
}
- LeftGUI(E3)→ LeftAlt(E2)
- LeftAlt(E2)→ LeftGUI(E3)
- 右Alt(E6)→ RightGUI(E7)
- 申请书(65)→ 右Alt(E6)
NSArray *unmap = @[
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E3),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E3)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E2),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E2)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E6),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E6)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x700000065),
@kIOHIDKeyboardModifierMappingDstKey:@(0x700000065)}
];
这似乎并不能回答在macOS上应该使用什么API进行密钥重新映射的问题。也许最好的答案是不要重新发明Karabiner,因为Karabiner元素解决了导致该问题的问题。OP特别要求使用Karabiner的替代品。诚然,在中断3年后,开发可能会再次进行,因此有必要重新评估Karabiner作为一种选择,但这仍然不能回答问题。Karabiner-Elements是Karabiner的替代品。
NSArray *unmap = @[
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E3),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E3)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E2),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E2)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E6),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E6)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x700000065),
@kIOHIDKeyboardModifierMappingDstKey:@(0x700000065)}
];