如何打开文件/目录获取信息窗口?

时间:2012-04-06 19:07:41

标签: objective-c macos

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

Get Info Window

4 个答案:

答案 0 :(得分:6)

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

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

- (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及更高版本的沙盒应用程序。

答案 1 :(得分:1)

使用一些AppleScript,这很容易:

set macpath to POSIX file "/Users/rross/test.applescript" as alias
tell application "Finder" to open information window of macpath

答案 2 :(得分:1)

AFAIK没有API来获取应用内显示的信息面板。 (我欢迎纠正这一点。)最让人想到的是通过Quick Look API提供的preview panel

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

答案 3 :(得分:1)

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

    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);

那是完美的