objective-c – 为最前面的应用程序生成键盘事件

objective-c – 为最前面的应用程序生成键盘事件,第1张

概述在Mac OS / Cocoa中,我可以以透明的方式为最前面的应用程序合成键盘条目 – 字符串吗? 更确切地说,我不想发送特殊字符或控制序列.我唯一需要的是发送标准字符. 刚刚学会了here,AppleScript可以这样做: tell application "TextEdit" activate tell application "System Events" 在Mac OS / Cocoa中,我可以以透明的方式为最前面的应用程序合成键盘条目 – 字符串吗?

更确切地说,我不想发送特殊字符或控制序列.我唯一需要的是发送标准字符.

刚刚学会了here,AppleScript可以这样做:

tell application "TextEdit"    activate    tell application "System Events"        keystroke "f" using {command down}    end tellend tell

问:我如何使用ObjC / cocoa做到这一点?

更新2012-02-18 – 尼克斯提案得到加强

根据下面的Nick代码,这是最终的解决方案:

// First,get the PSN of the currently front appProcessSerialNumber psn;GetFrontProcess( &psn );// make some key eventsCGEventRef keyup,keydown;keydown = CGEventCreateKeyboardEvent (NulL,(CGKeyCode)6,true);keyup = CGEventCreateKeyboardEvent (NulL,false);// forward them to the frontmost appCGEventPosttopSN (&psn,keydown); CGEventPosttopSN (&psn,keyup); // and finally behave frIEndlyCFRelease(keydown);CFRelease(keyup);

使用此方法,单击非激活面板的按钮可将事件定向到实际的前端应用程序.完全是我想做的.

解决方法 当然,您需要使用CGEventCreateKeyboardEvent来创建键盘事件,然后将其发布为:

CGEventRef keyup,keydown;    keydown = CGEventCreateKeyboardEvent (NulL,(CGKeyCode)56,true);    keyup = CGEventCreateKeyboardEvent (NulL,false);    CGEventPost(kCGHIDEventTap,keydown);    CGEventPost(kCGHIDEventTap,keyup);    CFRelease(keydown);    CFRelease(keyup);

它比AppleScript有点复杂,但它可以解决问题.您必须明确发布keydown然后发布keyup事件.更多信息,请访问Quartz Event Services Reference.

总结

以上是内存溢出为你收集整理的objective-c – 为最前面的应用程序生成键盘事件全部内容,希望文章能够帮你解决objective-c – 为最前面的应用程序生成键盘事件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1018229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存