有没有办法以编程方式在我的应用程序中打开 Finder 的“获取信息”窗口以获取某些路径?
问问题
1737 次
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 提供的预览面板。
我认为您需要构建自己的所有信息都可以通过NSWorkspace和NSFileManager类获得。
于 2012-04-06T19:33:13.967 回答