我正在为 mac 编写一个 C 程序,我需要允许用户选择一个应用程序来发送一个苹果事件。我可以创建一个导航窗口,使用NavCreateChooseFileDialog()
,但我不能让它启用任何 .app 文件。如果我使用 限制类型NavDialogSetFilterTypeIdentifiers
,它将只允许我选择文件夹名称中没有 .app 的应用程序,例如 MS Office。其他一切都是灰色的。
有任何想法吗?
我正在为 mac 编写一个 C 程序,我需要允许用户选择一个应用程序来发送一个苹果事件。我可以创建一个导航窗口,使用NavCreateChooseFileDialog()
,但我不能让它启用任何 .app 文件。如果我使用 限制类型NavDialogSetFilterTypeIdentifiers
,它将只允许我选择文件夹名称中没有 .app 的应用程序,例如 MS Office。其他一切都是灰色的。
有任何想法吗?
请记住,.app 包是目录,因此您可能需要启用某种允许目录(或更可能是启用包)选项。
很抱歉,我无法提供更具体的帮助。我从 Carbon 开始,但从未接触过导航服务。
确保在 inOptions.optionFlags 中为 NavCreateChooseFileDialog 设置标志 kNavSupportPackages,并将“APPL”放在类型列表中(最好仍然使用该参数而不是 NavDialogSetFilterTypeIdentifiers(),这样您将在 10.3- 上运行)并且您应该好好去吧,我刚试过。
或者,如果您不介意使用 Cocoa,您可以使用 -[NSOpenPanel runModalForTypes:[NSArray arrayWithObjects:@"app", nil]] (其中还列出了非 .app 应用程序),然后您只是一个 FSPathMakeRef ((UInt8*)[路径文件系统表示], &fsRef, NULL); 远离 FSRef。
请记住,在任何一种情况下,您获得的文件都可能是别名,因此您必须尝试解析别名。
这对我有用:
NSOpenPanel * panel = [ NSOpenPanel openPanel ] ;
panel.allowedFileTypes = @[ (__bridge id)kUTTypeApplication ] ;
[ panel runModal ] ;