了解 CGPostKeyboardEvent 和 CGEventCreateKeyboardEvent 之间的区别

发布于 2024-10-19 21:14:25 字数 826 浏览 1 评论 0原文

我需要向聚焦的应用程序发送击键,我的第一次搜索引导我到 CGEventCreateKeyboardEvent

CGEventRef eventA = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)0, true);
CFRelease(eventA);

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

CGPostKeyboardEvent( (CGCharCode)'a', (CGKeyCode)0, true);

并且它起作用了。为什么?从我到目前为止读到的内容来看,他们应该完成同样的事情,但是 CGPostKeyboardEvent 已弃用。

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

I need to send a keystroke to the focused application, and my first searches led me to CGEventCreateKeyboardEvent:

CGEventRef eventA = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)0, true);
CFRelease(eventA);

This compiled but didn't do anything, but in the process of trying to figure it out I found this...

CGPostKeyboardEvent( (CGCharCode)'a', (CGKeyCode)0, true);

...and it worked. Why? From what I've read so far about this, they should be accomplishing the same thing, but CGPostKeyboardEvent is deprecated.

(Forgive me if I'm ignoring details that I should obviously include -- I'm working way out my usual depth, trying to help colleagues with an extracurricular project, and just trying to learn a few things along the way.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温柔戏命师 2024-10-26 21:14:25

您的问题是您创建活动后并未发布该活动。所以下面的代码将按下向左箭头然后释放它:

CGEventRef a = CGEventCreateKeyboardEvent(NULL, 123, true);
CGEventRef b = CGEventCreateKeyboardEvent(NULL, 123, false);
CGEventPost(kCGHIDEventTap, a);
CGEventPost(kCGHIDEventTap, b);

Your problem is that you're not posting the event once you've created it. So the following code will press the left arrow and then release it:

CGEventRef a = CGEventCreateKeyboardEvent(NULL, 123, true);
CGEventRef b = CGEventCreateKeyboardEvent(NULL, 123, false);
CGEventPost(kCGHIDEventTap, a);
CGEventPost(kCGHIDEventTap, b);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文