更确切地说,我不想发送特殊字符或控制序列.我唯一需要的是发送标准字符.
刚刚学会了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 – 为最前面的应用程序生成键盘事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)