问题摘要:
1)如何在OSX下获取当前活动应用程序的路径? (即拥有当前密钥窗口的应用程序)
2)从中,我需要确定该应用程序的正常关联的.icns文件(即,当您在“Applications”文件夹中查看该应用程序时,以及在您出现的应用程序列表中,查找器显示的图像按命令(苹果)标签键)
详细问题描述:
我正在开发一个OSX实用工具栏(浮动窗口),需要显示当前应用程序的名称和图标图像(例如,拥有当前“密钥”窗口的应用程序。
1)我需要某种方式以编程方式确定当前主要和应用程序的应用程序的“.app文件夹的路径”。键。这可以通过通知回调,或者我可以在计时器上轮询并触发我自己的回调。
2)我可以看到在XXX.app/Resources文件夹中手动查找.icns文件相对容易,但问题是该文件夹中有时有超过1个.icns文件 - 我看不出简单的方法从文件名中确定哪个是通常与应用程序相关联的正确图标 - 虽然许多应用程序使用与应用程序相同的名称(带有icns扩展名),但有些应用程序却没有。
例如,为了它的价值,我正在将一个Windows实用程序移植到OSX - 如果我在Windows下执行此操作,我将使用GetWindowProcessID(GetForegroundWindow)),并使用它来确定应用程序的路径,并从中提取图标使用LoadIcon
答案 0 :(得分:4)
所有这些方法都驻留在NSWorkspace
类中。您可以获取活动应用程序及其图标图像(没有icns文件)。检查上述课程的文档,这一切都应该清楚:
NSDictionary *activeAppDict = [[NSWorkspace sharedWorkspace] activeApplication];
NSString *activeApplicationPath = [activeAppDict valueForKey:@"NSApplicationPath"];
NSImage *activeAppImage = [[NSWorkspace sharedWorkspace] iconForFile:activeApplicationPath];
答案 1 :(得分:1)
您应该能够将这些方法与这些方法串联起来:
首先通过循环运行的应用程序并选择活动的应用程序来获得最前面的应用程序*。获取NSRunningApplication的bundleURL,将其转换为路径,并将其传递给 - [NSWorkspace iconForFile:]。现在你已经为最前面的应用程序提供了一个NSImage。
*文档说活动应用程序是最重要的应用程序,但我认为它确实意味着关键,因为我不希望它为最前面但不是关键的应用程序返回YES。