这是我的代码:
#import <ApplicationServices/ApplicationServices.h>
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
printf("%u\n", (uint32_t)type);
return event;
}
int main (int argc, const char * argv[]) {
CFMachPortRef eventTap;
CFRunLoopSourceRef runLoopSource;
eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
CFRunLoopRun();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先......如果我想编辑活动怎么办?例如,我监听keyDown事件,如果它是"a",我将其转换为"b",或者实时编辑鼠标位置,或者例如简单地捕获事件并使其无效(禁用特定的事件)关键的例子..)
第二.. CGEventType是用枚举来定义的,它只列出了几种类型..例如,当我点击CMD时,我得到一个12,但是这与枚举中指定的值不匹配.我错过了什么?
我想要映射:
我已经详尽地搜索了任何可以完全自由地重新映射键盘输入的工具,但却无法找到.(Windows有AutoHotkey).
我打算编写自己的工具来解析配置文件.
但是如何实际挖掘并做到这一点?
解决这个问题需要彻底了解通过操作系统进行击键的过程,以便在适当的时候进行拦截.
我想我需要在低级别处吃掉事件,它仍然是一个虚拟密钥代码,然后提供我自己的自定义映射系统并在系统中进一步注入适当的事件.
但在哪里(以及如何)?
编辑:我在下面的答案中详述了我的研究结果(可能应该在某个时候将其迁移回问题).