You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:03:20