获取当前在OSX应用程序中突出显示的文本?

3

有没有一种方法可以检测当前OSX应用程序中所选/突出显示的文本,并将其存储在字符串中?

例如,如果我进入Safari并从随机网站中突出显示一个段落,然后启动我的应用程序,是否有一种方法可以获取我在Safari中突出显示的文本?

我没有听说过这个,但我不是专家,所以我不确定是否可能。

谢谢!


如果用户将其复制到剪贴板中,您可以从那里获取它(参见此问题)。我怀疑是否可以获取仅仅被突出显示但未被复制的内容,但我不能确定。 - sudo make install
你需要获取每个窗口的列表,并检查它们是否包含NSText实例,然后从中获取高亮文本。 - David Skrundz
1
我可以获取所有打开窗口的列表,但是如何检查NSText实例呢?你可能能否给我提供一些相关文档的链接?谢谢。 - manwholikesspritekit
2个回答

1
通常,要从另一个应用程序获取所选的文本,您需要启用无障碍功能。也就是说,它需要被授权来控制系统。 在代码中,您可以使用AX Accessibility API或者使用带有 "系统事件"的AppleScript来实现。
对于Safari,您可以使用自定义扩展程序,但这样做会更加复杂且回报较少。

0

这个方法适用于使用 Command C 复制的任何应用程序,几乎所有应用都可以。下面的示例是在 Safari 中进行的。在运行之前,请确保用户已经在 Safari 中选择了文本,并且不要随后更改选项卡或窗口。如果用户关注其他应用程序也没问题。延迟非常重要。你可能可以缩短时间,但这取决于用户系统在运行时的状态,所以延迟越长,过程越稳定。

tell application "System Events"
    tell application "Safari" to activate -- focus on Safari's current tab
    delay 0.25 --critical
    keystroke "c" using command down -- copy clipboard contents
    delay 0.25 --critical
end tell

set highlightedText to the clipboard as Unicode text
display dialog highlightedText -- just to see the results, otherwise delete

set the clipboard to "" -- return clipboard to blank state

如果你只打算在Safari上做这个,那么以下是你最好的选择,通常不需要延迟。否则,与上述相同的注意事项。

tell application "Safari"
    set highlightedText to (do JavaScript "(''+getSelection())" in document 1) as string
end tell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接