我已在 Apple 文档中阅读了有关 NSPasteBoard
的内容,以及它如何允许应用程序写入 PasteBoard
并允许其他应用程序读取该文本并使用它。
有人可以告诉我如何将应用程序(位于状态栏中)的文本粘贴到另一个应用程序内的 NSTextField
中。
我想做的事情类似于 Snippet和SnippetsApp做。
如果我完全愚蠢并且错过了 Apple Docs 中明显的内容,您能否指出我正确的路径:)
谢谢!
最佳答案
Could someone tell me how to paste text from am application (that sits in the status bar) into a NSTextField that is inside a different application.
粘贴是在接收应用程序中发生的事情。写入粘贴板就是复制。
此外,您不能假设用户想要粘贴到 NSTextField 中。它可能是 NSTextView、WebView 中的文本区域、Carbon EditText 或 MLTE 控件,或者其他一些文本编辑器,例如 Qt 或 wxWidgets 文本编辑器。他们甚至可能使用带有 ListView 的应用程序,让他们可以将文本直接粘贴到其中。
因此,没有任何编程方式可以直接告诉应用程序“这里有一些文本 - 请粘贴它”。您必须将其复制到通用粘贴板,然后伪造一个通常会导致最前面的应用程序粘贴的事件。 Charlie 对 ⌘V 的建议是一种方法,尽管很棘手; Dvorak 布局将 V 放在另一个键上,而“Dvorak QWERTY ⌘”布局将 V-with-⌘(而不是 V-without-⌘)放在与 QWERTY 的 V 相同的键上。
要伪造 ⌘V 事件,请查看 CGEventTap 。您需要使用the CGEventCreateKeyboardEvent
function要创建事件本身,并且由于该函数需要一个键代码,因此您需要查找 ⌘V 组合的 V 部分的正确键代码,这需要遍历 Text Input Source Services或Keyboard Layout Services ,取决于布局。
此时,您可能会考虑使用辅助功能在“编辑”菜单中找到“粘贴”菜单项并向其发送一条 AXPress 消息,但“粘贴”和“编辑”只是这些概念的英文单词;如果您这样做,您的应用程序将无法以任何其他语言运行。您可以按顺序(第三个菜单,第六个菜单项)进行操作,但是您的应用程序将无法在没有"file"菜单、没有“重做”菜单项或有两个“撤消”菜单项 (Photoshop) 的应用程序中运行。打造 ⌘V 事件确实是一条出路。
关于cocoa - 如何使用 Cocoa 将文本从一个应用程序粘贴到另一个应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680760/