Ste*_*eAp 6 macos cocoa objective-c
在Mac OS/Cocoa中,我可以以透明的方式为最前面的应用程序合成键盘条目 - 字符串吗?
更确切地说,我不想发送特殊字符或控制序列.我唯一需要的是发送标准字符.
刚刚在这里学到,AppleScript可以像这样做:
tell application "TextEdit"
activate
tell application "System Events"
keystroke "f" using {command down}
end tell
end tell
Run Code Online (Sandbox Code Playgroud)
问:我如何使用ObjC/cocoa做到这一点?
更新2012-02-18 - 尼克斯提案得到加强
根据下面尼克的代码,这是最终的解决方案:
// 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);
Run Code Online (Sandbox Code Playgroud)
使用此方法,单击非激活面板的按钮可将事件定向到实际的前端应用程序.完全是我想做的.
Nic*_*ick 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);
Run Code Online (Sandbox Code Playgroud)
它比AppleScript有点复杂,但它可以解决问题.你也必须明确地发布的keydown,然后keyup事件.有关Quartz Event Services Reference的更多信息.
| 归档时间: |
|
| 查看次数: |
8811 次 |
| 最近记录: |