为最前面的应用程序生成键盘事件
问题描述:
在Mac OS/Cocoa中,我可以合成键盘条目 - 字符串 - 用于透明方式的最前面的应用程序吗?为最前面的应用程序生成键盘事件
更准确地说,我不想发送特殊字符或控制序列。我唯一需要的是发送标准字符。
刚刚获悉here,即AppleScript的可以做的伎俩是这样的:
tell application "TextEdit"
activate
tell application "System Events"
keystroke "f" using {command down}
end tell
end tell
问:我将如何做到这一点使用ObjC /可可?
更新2012-02-18 - 尼克斯建议增强
基于以下Nick的代码,这里是最终的解决方案:
// First, get the PSN of the currently front app
ProcessSerialNumber psn;
GetFrontProcess(&psn);
// make some key events
CGEventRef keyup, keydown;
keydown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, true);
keyup = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, false);
// forward them to the frontmost app
CGEventPostToPSN (&psn, keydown);
CGEventPostToPSN (&psn, keyup);
// and finally behave friendly
CFRelease(keydown);
CFRelease(keyup);
使用这种方法,在点击非激活面板的按钮将事件指向实际的前端应用程序。完全是我想要做的。
答
当然,你想用CGEventCreateKeyboardEvent创建键盘事件,然后发布它们的方式:
CGEventRef keyup, keydown;
keydown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, true);
keyup = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, false);
CGEventPost(kCGHIDEventTap, keydown);
CGEventPost(kCGHIDEventTap, keyup);
CFRelease(keydown);
CFRelease(keyup);
它比AppleScript的更复杂一些,但它的伎俩。你做必须显式发布keydown,然后键入事件。更多信息请致电Quartz Event Services Reference。
谢谢!从来没有做过这么低的事情。 – SteAp 2012-02-18 00:39:59