Java 访问 Window 的“打开方式...”列表
我想从 Java 获取 Windows XP/Vista/7 中的“打开方式...”上下文菜单列表。
从 Windows 注册表中,我设法找到一种获取启动应用程序的命令的方法。但我没有找到如何获取这些应用程序名称和图标,如资源管理器打开列表上下文菜单中所示。
此外,管理这些信息的方式似乎从一个版本的操作系统到另一个版本也发生了变化。
是否有任何库可以与 Java 一起使用来实现此目的?
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为此,您不需要注册表。您需要在 Shell32.dll 中的
OpenAs_RunDLLA
上使用 GetProcAddress。我找不到它的任何文档,但我有 Delphi 代码,将其定义为HWND、HInstance 和 CmdShow 应该相当熟悉。 Delphi 中的 PChar(ANSI 版本 - 见下文)对应于指向 null 终止(C 样式)字符串的指针,而在 Unicode 版本中对应于 null 终止的 WSTR。 Delphi中的
procedure
对应于C的void someproc();
。CmdLine
应指向完全限定的文件名,以便 Windows 知道在“打开方式”对话框中提供什么内容。我不确定您将如何在 Java 中使用
GetProcAddress
(以及前面的LoadLibrary
调用),但这可能会帮助您入门。请注意,正在加载的函数是 ANSI 版本;对于 WideChar (Unicode),您需要加载 OpenAs_RunDLLW 版本,并相应地调整 CmdLine 参数(我认为 - 我还没有尝试过宽版本上的代码)。
注意:这也可能有帮助。这是一篇关于通过 API 的 ShellExecute 函数使用 OpenAs_RunDLL 的 MSDN 文章。
You don't need the registry for this. You need to use GetProcAddress on
OpenAs_RunDLLA
in Shell32.dll. I can't find any documentation for it, but I have Delphi code that defines it asThe HWND, HInstance, and CmdShow should be fairly familiar. PChar in Delphi corresponds (ANSI version - see below) to a pointer to a null terminated (C-style) string, and in the Unicode version to a null terminated WSTR.
procedure
in Delphi corresponds to C'svoid someproc();
. TheCmdLine
should point to a fully-qualified filename, so Windows knows what to offer in the "Open With" dialog.I'm not sure how you would use
GetProcAddress
(and the preceedingLoadLibrary
call) in Java, but this may get you started.Note that the function being loaded is the ANSI version; for WideChar (Unicode), you'd want to load the
OpenAs_RunDLLW
version instead, and adjust the CmdLine parameter accordingly (I think - I haven't tried the code on the wide version).NOTE: This may help too. It's a MSDN article on using OpenAs_RunDLL via the API's ShellExecute function.
正如上面评论中提到的,在 Windows 中调用“打开方式”对话框的 Java 代码将是(省略异常处理):
This uses the Apache Commons Exec library; there are other ways of invoking a process from Java too.
As alluded to in the comment above, Java code to invoke the Open With dialog in Windows would be (exception handling omitted):
This uses the Apache Commons Exec library; there are other ways of invoking a process from Java too.