在Mac OS / Cocoa中,我可以以透明的方式为最前面的应用程序合成键盘条目 - 字符串吗?
更确切地说,我不想发送特殊字符或控制序列。我唯一需要的是发送标准字符。
刚刚学会here,AppleScript可以这样做:
tell application "TextEdit"
activate
tell application "System Events"
keystroke "f" using {command down}
end tell
end tell
问:我如何使用ObjC / cocoa?
更新2012-02-18 - Nicks提案已增强
根据以下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);
使用此方法,单击非激活面板的按钮可将事件定位到实际的前端应用程序。完全是我想做的事。
答案 0 :(得分:10)
当然,您需要使用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然后发布keyup事件。有关更多信息,请访问Quartz Event Services Reference。