6

有没有办法以编程方式在我的应用程序中打开 Finder 的“获取信息”窗口以获取某些路径?

获取信息窗口

4

4 回答 4

7

还有一个简单的解决方案,你可以在苹果的“照片搜索”项目中看到。

以下是可用于根据示例显示单个文件的“获取信息”窗口的代码。

- (void)infoButtonAction:(NSOutlineView *)sender {
    // Access the row that was clicked on and open that image
    NSInteger row = [sender clickedRow];
    SearchItem *item = [resultsOutlineView itemAtRow:row];
    // Do a "reveal" in finder
    if ([item filePathURL]) {
        NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName];
        [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
        [pboard setString:[[item filePathURL] path]  forType:NSStringPboardType];
        NSPerformService(@"Finder/Show Info", pboard);
    }
}

我根据需要显示多个文件的对话框进一步修改了代码,如下所示:

NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName];
[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];

NSMutableArray *fileList = [NSMutableArray new];

//Add as many as file's path in the fileList array
for(FileItem *item in fileItems) {
    [fileList addObject:[[item.filePath filePathURL] path]];
}

[pboard setPropertyList:fileList forType:NSFilenamesPboardType];
NSPerformService(@"Finder/Show Info", pboard);

希望这会有所帮助,仅供参考,这将适用于 Lion 及以后的沙盒应用程序。

于 2012-10-09T11:29:37.830 回答
3

我使用此代码打开一个文件“获取信息”窗口

NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName];
[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
NSString *path = [selectedDuplicateItem getFileItemPath];
[pboard setString:path forType:NSStringPboardType];
NSPerformService(@"Finder/Show Info", pboard);

但是,有一些错误。例如,如果我的文件路径包含空格,path = @"/Users/alexanderyolkin/Downloads/DETest/Folder/LICENSE 2"则 NSPerformService 会打开两个窗口“获取信息” - 用于路径和没有空格的同一文件或用于文件夹。

所以,解决方案是在使用 [pboard setPropertyList:fileList forType:NSFilenamesPboardType];

代码是

NSPasteboard *pboard = [NSPasteboard pasteboardWithUniqueName];
[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];

NSString *path = [selectedDuplicateItem getFileItemPath];
NSMutableArray *fileList = [NSMutableArray new];
[fileList insertObject:path atIndex:0];

[pboard setPropertyList:fileList forType:NSFilenamesPboardType];
NSPerformService(@"Finder/Show Info", pboard);

那是完美的工作

于 2015-10-26T09:30:20.510 回答
1

使用一些applescript,这很容易:

set macpath to POSIX file "/Users/rross/test.applescript" as alias
tell application "Finder" to open information window of macpath
于 2012-04-06T19:32:35.620 回答
1

AFAIK 没有 API 来获取应用内显示的信息面板。(我欢迎在这一点上进行更正。)想到的最接近的事情是通过 Quick Look API 提供的预览面板。

我认为您需要构建自己的所有信息都可以通过NSWorkspaceNSFileManager类获得。

于 2012-04-06T19:33:13.967 回答