有没有办法以编程方式在我的应用程序中打开Finder的“获取信息”窗口以获取某些路径?
答案 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。
我认为您可以通过NSWorkspace和NSFileManager类获取构建自己所需的所有信息。
答案 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);
那是完美的