gpt4 book ai didi

objective-c - 在外部应用程序 Objective-C 中获取当前文件

转载 作者:行者123 更新时间:2023-12-03 16:25:46 26 4
gpt4 key购买 nike

我正在尝试找出 Mac OSX 上其他事件应用程序中当前打开的文件。我知道我可以通过以下方式找到当前打开的应用程序:

NSWorkspace *ws = [[NSWorkspace alloc] init];

NSArray *apps = [ws runningApplications];

// loop through the apps and get the localizedName

但是,“runningApplications”(NSRunningApplication)没有向我提供与该应用程序中打开的内容相关的任何信息。假设用户打开了 Sublime Text 2。我想访问该应用程序并查看他们当前在其中打开了哪些文档(以及该文档的相关路径)。

我知道 applescript 和脚本桥是“选项”,但是,我看到这两个的问题如下:

  • Scripting Bridge 要求您从要与之交互的每个应用程序生成并添加头文件。 对我来说,这个问题是我的应用程序事先不知道用户有哪些应用程序。 XCode(5) 似乎不允许我在安装时生成这些内容(即循环用户的应用程序目录并添加应用程序)或任何其他内容。

  • AppleScript 虽然不那么依赖于了解您想要使用哪些应用程序,但并不适用于所有应用程序。只有某些人支持它。

这里的最终目标是能够查看用户当前打开了哪些应用程序并获取有关这些应用程序当时打开的内容的信息。

编辑:例如 - 如果用户使用“文本编辑”打开“/some/dir/example.txt”,我希望能够获取该信息。

最佳答案

为了实现您的要求,您需要对多个 API 进行大量工作。我们实现了这个,花了几周时间才完成。这里有一些提示:

  • 使用 NSRunningApplication 获取 Unix-PID
  • 使用 AppleScript 和 AXAPI 获取窗口及其文档。
    unixPID = 12345  -- insert the number here    tell application id "com.apple.systemevents"        try            tell (application processes where unix id is unixPID)                with timeout of 5 seconds                    repeat with thiWind in every window                        set isMain to value of attribute "AXMain" of thiWind                        if isMain then                            return value of attribute "AXDocument" of thiWind                            exit repeat                        end if                    end repeat                end timeout            end tell        end try    end tell
  • 或者/另外使用CGWindow.h要遍历所有应用程序的窗口,然后为每个应用程序使用窗口 ID 和特定脚本。例如:
tell application id "com.apple.TextEdit"    try        set mydoc to document of window id 1234 -- insert window number here        return path of mydoc    end tryend tell

要查看其执行方式的示例,check out our app 。该功能确实很难维护,并且在大多数情况下都可以工作。请参阅 Developer Section 中的此页面上应如何实现其他应用程序.

查看实际效果:

  • 向 Raskin 添加包含各种文档的文件夹(例如单词、数字、文本、Photoshop 等)
  • 在他们的应用中打开这些文档
  • 大多数文档在打开时都会显示徽章
  • 然后您可以使用 cmd-alt-R 或 cmd-alt-scroll 从任何打开的文档返回到公开此文件的 Raskin Surface

Open In Badge on a Text Document

关于objective-c - 在外部应用程序 Objective-C 中获取当前文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23191675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com