首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java访问窗口的“打开方式...”列表

Java访问窗口的“打开方式...”列表
EN

Stack Overflow用户
提问于 2011-03-05 02:38:52
回答 2查看 828关注 0票数 2

我想要“开场白...”的名单Windows XP/Vista/7中来自Java的上下文菜单。

从Windows注册表中,我设法找到了一种获取启动应用程序的命令的方法。但我不知道如何获取这些应用程序的名称和图标,如Explorer Open with list上下文菜单中所示。

此外,管理这些信息的方式似乎因操作系统版本的不同而有所不同。

有没有什么库可以让我在Java中使用呢?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-03-05 03:17:54

为此,您不需要注册表。您需要在Shell32.dll中的OpenAs_RunDLLA上使用GetProcAddress。我找不到任何关于它的文档,但是我有Delphi代码将它定义为

代码语言:javascript
复制
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文章。

票数 2
EN

Stack Overflow用户

发布于 2014-01-24 19:59:52

正如上面的注释所暗示的,在Windows中调用Open With对话框的Java代码将是(省略异常处理):

代码语言:javascript
复制
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调用进程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5197880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档