我正在试图弄清楚如何打开给定文件的系统首选编辑器.
比如,我们有一个用Java编写的文件管理器.用户转到文件夹并查看文件列表.例如,有一个文件Icon.jpg.用户双击文件名和文件将在系统首选编辑器(即Gimp)中打开.主要问题是 - 如何做到这一点?
我们可以这样做Runtime.getRuntime().exec("something file"),但是这样你应该知道在用户环境中首选哪个程序.但是怎么样?
我们也能做到Desktop.getDesktop().edit(File file),但是这样我们就无法跟踪进程,也无法知道这个子进程是否已关闭.其他问题 - 函数在linux上不起作用(至少在Ubuntu 8.10上).还有Desktop.getDesktop().open(File file),但它强制打开文件查看器,而不是该文件类型的系统查看器.
我整个星期都在寻找解决方案,但没有任何合适的通用解决方案.你知道这个问题的其他方法吗?对于我的项目,如果它可以在Windows + Linux + Mac上运行就足够了.
感谢您的回答和建议.
编辑于2009-02-08 23:04
其他建议:我可以在Windows和Linux中强制"应用程序选择"窗口,就像Mac中的"打开文件"一样吗?例如,然后您尝试打开文件,系统会要求您从系统首选列表中选择应用程序?(类似于Windows资源管理器中的"打开方式...").你知道吗?
我想让用户为当前未注册的文件扩展名选择一个关联(打开方式).
目前我告诉API使用打开文件ShellExecute,它返回ERROR_NO_ASSOCIATION错误代码.
有没有办法告诉API它应该让用户选择一个新的关联?
我使用 Electron 创建了一个应用程序,其中一个功能是用户可以向其中添加文件(复制到应用程序的数据目录)。
当用户想要从应用程序的 UI 打开文件时,我可以使用 Electron 的shell模块打开文件:shell.openItem().
现在我想给用户一个选项来触发系统的“打开方式”对话框(如下所示的窗口),用户可以从中选择用户想要打开文件的应用程序。我搜索了 Electron 的文档并用谷歌搜索,但找不到触发此对话框的方法。任何想法如何为电子支持的所有平台做到这一点。涉及调用操作系统特定命令来触发此对话框的解决方案也同样好。
我的用户可以将文档附加到应用程序中的各种实体.当然,如果用户A附加.TIFF文件,则用户B可能没有该类型文件的查看器.
所以我希望能够提出这个对话框:
alt text http://www.angryhacker.com/toys/cannotopen.png
我的应用程序是带VS2005的C#.
目前我做Process.Start并传入文件名.如果未找到关联,则会引发异常.
在 Windows 上,如果右键单击资源管理器中的文件,您会看到一个上下文菜单。其中一项是Open With> Choose another program。单击此按钮将打开一个 GUI,以选择打开该文件的程序。是否可以从命令行打开此 GUI?
我正在编写一个程序,其中包含一个充满项目的列表框,当您右键单击该项目时,将弹出上下文菜单,并有一个选项可以选择调用“打开方式”,我的问题是如何使“选择默认程序” ” 窗口出现,如下图所示。
http://postimg.org/image/8ykfrzmjv/
我知道你需要做Process.Start()才能打开它,但我不知道exe名称。