Cocoa 如何将NSString发送到另一个应用程序当前关注的UIElement?
我有一个菜单栏应用程序,没有停靠图标或全局菜单,它只是一个状态项和一个窗口 我已经把它连接到一个热键上,这个热键可以激活窗口,在关闭窗口后,我可以将焦点发送回以前激活的应用程序 如何将NSString发送到其他应用程序中的活动文本区域,就像用户直接键入一样 我想也许可以使用。如果可能的话,我希望避免使用AppleScript。从中,您需要做两件事:Cocoa 如何将NSString发送到另一个应用程序当前关注的UIElement?,cocoa,accessibility,uielement,Cocoa,Accessibility,Uielement,我有一个菜单栏应用程序,没有停靠图标或全局菜单,它只是一个状态项和一个窗口 我已经把它连接到一个热键上,这个热键可以激活窗口,在关闭窗口后,我可以将焦点发送回以前激活的应用程序 如何将NSString发送到其他应用程序中的活动文本区域,就像用户直接键入一样 我想也许可以使用。如果可能的话,我希望避免使用AppleScript。从中,您需要做两件事: 是的 是的 现在,简单的方法是只获取这两个属性,但这实际上是错误的解决方案 问题是value属性的值是一个普通字符串。如果元素是富格文本视图,您
- 是的
- 是的
然后,将元素的值设置为修改后的字符串。(我只希望将其设置为属性字符串会起作用。)我最终使用粘贴板和
CGEventCreateKeyboardEvent()
模拟粘贴的[cmd+v]
键盘快捷键
在激活我的窗口之前,我会录制上一个应用程序:
_previousApplication = [[notification userInfo] objectForKey:NSWorkspaceApplicationKey];
[_previousApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps];
关闭窗口后,我激活上一个应用程序:
_previousApplication = [[notification userInfo] objectForKey:NSWorkspaceApplicationKey];
[_previousApplication activateWithOptions:NSApplicationActivateIgnoringOtherApps];
然后粘贴NSString:
#define KEY_CODE_v ((CGKeyCode)9)
void DCPostCommandAndKey(CGKeyCode key) {
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef keyDown = CGEventCreateKeyboardEvent(source, key, TRUE);
CGEventSetFlags(keyDown, kCGEventFlagMaskCommand);
CGEventRef keyUp = CGEventCreateKeyboardEvent(source, key, FALSE);
CGEventPost(kCGAnnotatedSessionEventTap, keyDown);
CGEventPost(kCGAnnotatedSessionEventTap, keyUp);
CFRelease(keyUp);
CFRelease(keyDown);
CFRelease(source);
}
DCPostCommandAndKey(KEY_CODE_v);