Macos Macintosh C创建导航窗口以选择应用程序

Macos Macintosh C创建导航窗口以选择应用程序,macos,macos-carbon,Macos,Macos Carbon,我正在为mac编写一个C程序,我需要允许用户选择一个应用程序向其发送苹果事件。我可以使用NavCreateChooseFileDialog创建一个导航窗口,但无法使其启用任何.app文件。如果我使用NavDialogSetFilterTypeIdentifiers限制类型,它将只允许我选择像MS Office这样的应用程序,这些应用程序在文件夹名称中没有.app。其他一切都变灰了 有什么想法吗?请记住。应用程序捆绑包是目录,因此您可能需要启用某种允许目录,或者更可能的是启用捆绑包选项 很抱歉,我

我正在为mac编写一个C程序,我需要允许用户选择一个应用程序向其发送苹果事件。我可以使用NavCreateChooseFileDialog创建一个导航窗口,但无法使其启用任何.app文件。如果我使用NavDialogSetFilterTypeIdentifiers限制类型,它将只允许我选择像MS Office这样的应用程序,这些应用程序在文件夹名称中没有.app。其他一切都变灰了


有什么想法吗?

请记住。应用程序捆绑包是目录,因此您可能需要启用某种允许目录,或者更可能的是启用捆绑包选项


很抱歉,我不能提供更具体的帮助。我从Carbon开始,但从未接触过导航服务。

请确保在操作中设置标志kNavSupportPackages。NavCreateSchooseFileDialog的选项标志,并将“APPL”放在类型列表中可能仍然使用该参数而不是NavDialogSetFilterTypeIdentifiers,这样您就可以在10.3上运行了-您应该准备好了,我刚试过

或者,如果您不介意使用Cocoa,您可以使用-[NSOpenPanel runModalForTypes:[NSArray arrayWithObjects:@app,nil]],它还列出了非.app应用程序,然后您就只有一个FSPathMakeRefUInt8*[path fileSystemRepresentation],&fsRef,NULL;远离FSRef

请记住,在任何一种情况下,您得到的文件都可能是别名,因此您必须尝试解析别名。

这对我很有用:

NSOpenPanel * panel = [ NSOpenPanel openPanel ] ;
panel.allowedFileTypes = @[ (__bridge id)kUTTypeApplication ] ;

[ panel runModal ] ;

是的,我尝试过各种NavDialogSetFilterTypeIdentifiers settins和nav…chooseObject,但都没有用。