gpt4 book ai didi

objective-c - 如何获取最近打开的文件列表?

转载 作者:太空狗 更新时间:2023-10-30 03:54:06 26 4
gpt4 key购买 nike

我目前正在构建 AppleScript 应用程序。 (请注意,这是通过使用 AppleScript 编辑器创建 AppleScript,然后将该脚本另存为应用程序而创建的普通 AppleScript“应用程序”)。对于这个应用程序,我需要知道当前用户最近打开的文件的文件路径。到目前为止,我已经尝试了许多不同的方法,但似乎都没有给我所需的信息。

我尝试了以下方法:

  • 我试过 com.apple.recentitems.plist文件,但是这个文件中包含的文件路径信息似乎是十六进制格式,当转换成ASCII时充满了很多mumbo-jumbo,并且mumbo-jumbo的格式似乎因不同的文件和不同的计算机而改变.
  • 我试过使用 unix find命令过滤过去一天打开的文件,但是在这里我只能在最近修改和最近访问之间进行选择,而不是最近打开。最近修改的文件不会包括未修改的打开文件(例如打开但未编辑的图像),并且最近访问的文件似乎以缩略图 View 显示在 Finder 中可见的所有文件,即使它们没有t 已被用户打开。
  • 我试过尝试使用 Objective-C 和 LaunchServices/LSSharedFileList.h获取文件 kLSSharedFileListRecentDocumentItems (类似于 this answer ),但是我以前从未使用过 Objective-C,所以我无法让任何东西正常工作。

  • 任何人都可以提供帮助我获取当前用户最近打开的文件列表的任何帮助将不胜感激。此外,能够将最近更改的文件列表写入文本文件的任何帮助都会很棒。

    最佳答案

    苹果脚本

    对于那个 afaik 没有 AppleScript API(相当于 LSSharedFileList) .. 要么你调用 objC 代码(见下面的 objC 代码段),要么.. 你只是读了 plist,这有点 hackish IMO :)

    objective-c

    对于非沙盒应用程序,您使用 LSSharedFileList API——这是最合适的方式。

    @implementation DDAppDelegate

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
    {
    LSSharedFileListRef list = LSSharedFileListCreate(NULL, kLSSharedFileListRecentDocumentItems, 0);
    CFArrayRef items = LSSharedFileListCopySnapshot(list, NULL);

    for(int i=0; i<CFArrayGetCount(items); i++) {
    LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(items, i);

    //get items properties... for demo I just get name
    NSString *name = (__bridge_transfer NSString*)LSSharedFileListItemCopyDisplayName(item);

    NSLog(@"%@", name);
    }
    }

    @end

    它在沙箱中不起作用 虽然 - 还有 没有真正的解决方法 (正如您所说,您可以直接阅读 plist,但是……这有点骇人听闻:D PLUS 苹果可能不会让您这样做!)

    关于objective-c - 如何获取最近打开的文件列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107489/

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