我正在寻找Karabiner,这是Parallels开发的OSX键盘重映射器。根据{{3}},最好通过向Apple提交一个错误来解决这个问题。
创建此类功能的替代方法(如果有)支持哪些API?
答案 0 :(得分:1)
由noted的pkamb在OP链接到的github问题上(自他发表以来添加),Apple technote TN2450记录了正确的API:
IOKit HID API可用于密钥重新映射。用户将 提供HID事件系统将重映射的字典 应用于键盘。
清单3:使用IOKit HID进行键重映射 蜜蜂。 //使用Xcode 8.2.1编译single.row = TRUE
示例:
如果您试图在外部USB键盘上重新映射命令/选项/控制键,请查看#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;
}
中定义的enum
。例如,可以使用以下映射重新映射Z-88键盘以匹配MacBookPro上的键布局:
IOHIDUsageTables.h
要撤消映射,请将相同的键映射回其原始值。使用上面的示例:
NSArray *remap = @[
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E3),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E2)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E2),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E3)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x7000000E6),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E7)},
@{@kIOHIDKeyboardModifierMappingSrcKey:@(0x700000065),
@kIOHIDKeyboardModifierMappingDstKey:@(0x7000000E6)}
];
答案 1 :(得分:-1)
Karabiner-Elements尽管具有粗略的文档和用户界面,但功能强大且用途广泛,可用于进行中的工作。有许多有用的示例,例如this one,这些示例需要专用工具和Karabiner错误日志来生成棘手的JSON规则。任何键都可以同时是修饰键和常规键,运行程序等。 GitHub上的公共领域。