我想要“开场白...”的名单Windows XP/Vista/7中来自Java的上下文菜单。
从Windows注册表中,我设法找到了一种获取启动应用程序的命令的方法。但我不知道如何获取这些应用程序的名称和图标,如Explorer Open with list上下文菜单中所示。
此外,管理这些信息的方式似乎因操作系统版本的不同而有所不同。
有没有什么库可以让我在Java中使用呢?
谢谢。
发布于 2011-03-05 03:17:54
为此,您不需要注册表。您需要在Shell32.dll中的OpenAs_RunDLLA上使用GetProcAddress。我找不到任何关于它的文档,但是我有Delphi代码将它定义为
SHOpenWithProc = procedure(HWND: THandle; HInstance; THandle;
CmdLine: PChar; CmdShow: Integer);对HWND、HInstance和CmdShow应该相当熟悉。在Delphi中,PChar对应于一个指向空终止(C样式)字符串的指针(ANSI版本-见下文),而在Unicode版本中对应于一个空终止WSTR。Delphi中的procedure对应于C的void someproc();。CmdLine应该指向一个完全限定的文件名,这样Windows才知道在“打开方式”对话框中提供什么。
我不确定您将如何在Java语言中使用GetProcAddress (以及前面的LoadLibrary调用),但这可能会帮助您入门。
注意,正在加载的函数是ANSI版本;对于WideChar (Unicode),您可能希望加载OpenAs_RunDLLW版本,并相应地调整CmdLine参数(我想-我还没有在宽版本上尝试过代码)。
注意:这也可能会有帮助。这是一篇关于通过API的ShellExecute函数使用OpenAs_RunDLL的MSDN文章。
发布于 2014-01-24 19:59:52
正如上面的注释所暗示的,在Windows中调用Open With对话框的Java代码将是(省略异常处理):
CommandLine cmd = new CommandLine("rundll32.exe");
cmd.addArgument("shell32.dll,OpenAs_RunDLL");
cmd.addArgument(fullPathToMyFile.toString());
Process process = CommandLauncherFactory.createVMLauncher().exec(cmd, null);它使用Apache Commons Exec库;还可以通过其他方式从Java调用进程。
https://stackoverflow.com/questions/5197880
复制相似问题