理解 CGPostKeyboardEvent 和 CGEventCreateKeyboardEvent 的区别

Rww*_*wwL 4 macos xcode

我需要向聚焦的应用程序发送一个按键,我的第一次搜索使我找到了CGEventCreateKeyboardEvent

CGEventRef eventA = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)0, true);
CFRelease(eventA);
Run Code Online (Sandbox Code Playgroud)

这编译但没有做任何事情,但在试图弄清楚的过程中我发现了这个......

CGPostKeyboardEvent( (CGCharCode)'a', (CGKeyCode)0, true);
Run Code Online (Sandbox Code Playgroud)

...它奏效了。为什么?从我到目前为止所读到的内容来看,他们应该完成同样的事情,但不推荐使用CGPostKeyboardEvent

(如果我忽略了我显然应该包括的细节,请原谅我 - 我正在努力超越我通常的深度,试图帮助同事进行课外项目,并且只是想在此过程中学习一些东西。)

Nat*_* S. 5

您的问题是一旦您创建了活动,您就不会发布它。所以下面的代码将按下左箭头然后释放它:

CGEventRef a = CGEventCreateKeyboardEvent(NULL, 123, true);
CGEventRef b = CGEventCreateKeyboardEvent(NULL, 123, false);
CGEventPost(kCGHIDEventTap, a);
CGEventPost(kCGHIDEventTap, b);
Run Code Online (Sandbox Code Playgroud)