我正在试图弄清楚如何打开给定文件的系统首选编辑器.
比如,我们有一个用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资源管理器中的"打开方式...").你知道吗?
我需要找到Windows上给定文件的默认文件打开器,以便我可以自定义命令参数并使用默认的opener/viewer打开文件.
我的实际使用场景是使用用户的默认媒体播放器打开多个多媒体文件,以便将所有文件添加到用户的播放列表中(对于可以在同一个媒体上打开多个文件的播放器).对于Windows以外的操作系统我使用Desktop.open(File file)方法(我根本不关心为Windows以外的操作系统打开多个文件功能),我找不到任何方法可以打开多个文件而不是自定义命令参数并使用exec()方法运行它运行时类.我使用类似于此的somethig:
private void playItems2(List<File> fileList, String playerBinary) {
String args = " ";
for (File file : fileList) {
args += "\"" + file.getAbsolutePath() + "\" ";
}
try {
String command = playerBinary + args;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(command);
} catch (Exception exc) {/*handle exception*/
System.err.println("Run Player Exc:" + exc.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用用户指定的路径playerBinary,我需要的是自动检测第一项的默认播放器fileList并将其用作playerBinary.
我还查看了Rundll32.exe和cmd.exe/start解决方案,但它们对我的使用场景不起作用.
我的C++程序创建了.png文件,我需要在创建后立即打开(查看)这个文件 - 有没有办法打开它,因为它是在Windows资源管理器中打开的 - 所以文件可以用用户的首选程序打开,如果有的话没有与文件格式相关的程序 - Windows将显示对话窗口,用户可以在其中选择任何程序来打开该文件.
Crossplatform(+ Linux,+ MacOS,+ BSD)解决方案将是完美的.
谢谢.
我正在尝试使用我的代码中的默认浏览器打开一些html文件.
我使用以下代码:
ShellExecute(NULL, "open", "HELP\index.html",
NULL, NULL, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)
并包含标题"Windows.h".但ShellExecuter:找不到标识符错误,编译失败.
我使用Microsoft Visual Studio 2010.如何使ShellExecute工作,或者更重要的是,如何从我的代码中打开html文件?
好吧,所以我需要打开一个.txt文件,该文件将在与程序相同的文件中创建.
我想使用ShellExecute(); 要做到这一点,我已经做了很多研究,我似乎无法得到正确的语法,因为我不知道如何处理参数"HWND"
我在这里寻找答案并得到了所有信息,除了要放入HWND的内容
以下是我需要使用的代码:
ShellExecute(0,"open","c:\\debug.txt",NULL,NULL,1);
Run Code Online (Sandbox Code Playgroud)
如果你不确定我在说什么,谢谢你的帮助!:)
这是我用来测试函数的程序:
#include "DAL.h"
//DAL.h added to Testing file to make compiling easier
//Created to test show_debug()
int main(void)
{
int test1,test2,final;
puts("Enter 2 numbers to add (2,2)");
scanf("%d,%d",&test1,&test2);
log_debug(test1);
log_debug(test2);
view_debug();
final= test1+test2;
printf("%d\n",final);
log_debug(final);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
view_debug(); 是包含ShellExecute的函数
void view_debug(void)//WIP
//Opens the debug.txt in notepad
{
LoadLibrary( "shell32.dll" );
ShellExecute(0,"open","c:\\debug.txt",NULL,NULL,1);
}
Run Code Online (Sandbox Code Playgroud)
这是log_debug();
int log_debug(int test_variable)
//This function simply tests the programmers desired veriable & displays it for help in keeping …Run Code Online (Sandbox Code Playgroud)