cocoa - 如何使用 Cocoa 将文本从一个应用程序粘贴到另一个应用程序?

标签 cocoa macos copy paste nspasteboard

我已在 Apple 文档中阅读了有关 NSPasteBoard 的内容,以及它如何允许应用程序写入 PasteBoard 并允许其他应用程序读取该文本并使用它。

有人可以告诉我如何将应用程序(位于状态栏中)的文本粘贴到另一个应用程序内的 NSTextField 中。

我想做的事情类似于 SnippetSnippetsApp做。

如果我完全愚蠢并且错过了 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 ServicesKeyboard Layout Services ,取决于布局。

此时,您可能会考虑使用辅助功能在“编辑”菜单中找到“粘贴”菜单项并向其发送一条 AXPress 消息,但“粘贴”和“编辑”只是这些概念的英文单词;如果您这样做,您的应用程序将无法以任何其他语言运行。您可以按顺序(第三个菜单,第六个菜单项)进行操作,但是您的应用程序将无法在没有"file"菜单、没有“重做”菜单项或有两个“撤消”菜单项 (Photoshop) 的应用程序中运行。打造 ⌘V 事件确实是一条出路。

关于cocoa - 如何使用 Cocoa 将文本从一个应用程序粘贴到另一个应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680760/

相关文章:

cocoa - 在 NSView 中添加边框和圆角矩形

iphone - 为什么我的 View 类没有出现在故事​​板中?

python - 在非 Windows 平台(Linux 或 Mac)上使用 Python 处理 Access 数据库

ios - ARC中 "copy"的作用是什么

c - 无法通过c程序复制二进制文件

cocoa - 更新 NSOutlineView 项目

cocoa - 在 Cocoa 中创建类似 iTunes 歌词 View 的 View

ios - 合并 iOS 和 MacOS 项目

objective-c - 将一个透明的 NSWindow 永久地放在另一个 NSWindow 之上

c# - 如何通过上下文菜单中的复制命令复制选定的 ListView 项