使用CGEventPost模拟按键时,keyup事件字符为何与keydown不一致?
macOS 12模拟按键时KeyUp事件字符值异常问题
在macOS 12系统中,我通过CGEventKeyboardSetUnicodeString和CGEventPost模拟按键操作。明明给keydown和keyup事件传入了完全相同的参数,但最终生成的NSEvent里,keyup事件的字符值却和keydown不一致。
按键生成代码
CGEventRef keyDown, keyUp; UniChar unicode = 'P'; keyDown = CGEventCreateKeyboardEvent(NULL, 0, true); CGEventKeyboardSetUnicodeString(keyDown, 1, &unicode); CGEventPost(kCGSessionEventTap, keyDown); CFRelease(keyDown); keyUp = CGEventCreateKeyboardEvent(NULL, 0, false); CGEventKeyboardSetUnicodeString(keyUp, 1, &unicode); CGEventPost(kCGSessionEventTap, keyUp); CFRelease(keyUp);
第一响应者事件处理代码
- (void)keyDown:(NSEvent *)event { NSLog(@"%s", [event.characters UTF8String]); } - (void)keyUp:(NSEvent *)event { NSLog(@"%s", [event.characters UTF8String]); }
日志输出
2022-09-08 12:04:55.570063-0400 test[14010:5447113] P
2022-09-08 12:04:55.570252-0400 test[14010:5447113] a
为何参数完全相同的情况下,keyup事件的字符值是"a"而不是"P"?
内容的提问来源于stack exchange,提问作者TheNextman
相关产品推荐
相关产品推荐

