在Objective-C中获取另一个应用程序的图标

时间:2012-08-28 19:50:36

标签: objective-c macos

如何使用Objective-C从其他应用程序获取图标?

到目前为止,我已经尝试了这个,但它只返回null

NSURL *path = [NSURL URLWithString:@"/Applications/Calculator.app"];

NSLog(@"%@", path);

NSImage *image = (__bridge NSImage *)(QLThumbnailImageCreate(kCFAllocatorDefault, (__bridge CFURLRef)(path), CGSizeMake(100, 100), (__bridge CFDictionaryRef)(@{(NSString *)kQLThumbnailOptionIconModeKey: @NO})));

NSLog(@"%@", image);

3 个答案:

答案 0 :(得分:19)

您可以使用NSWorkspace,例如

NSImage *image = [[NSWorkspace sharedWorkspace] iconForFile:path];

如果您想使用应用bundleId而不是知道其路径,可以先执行此操作

path = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:bundleIdentifier];

答案 1 :(得分:3)

答案 2 :(得分:3)

应用程序的图标文件通常在CFBundleIconFile键下的Info.plist中定义。通过获取图标文件名,您可以从bundle的Resources目录中获取此图标(path-to-anApplication / Contents / Resources /)。

要获取Info.plist内容,您可以直接在NSDictionary中加载它(使用dictionaryWithContentsOfFile :)或从应用程序的bundle对象中获取它(例如:[[NSBundle bundleWithPath:path-to-anApp] infoDictionary])

图标文件将是CFBundleIconFile密钥的值(即:iconFile = [infoDictionary valueForKey:@"CFBundleIconFile"]。它的路径将是:path-to-anApplication / Contents / Resources / iconFile)。