Java访问Window的 "Open with..."列表

标签 java windows registry explorer open-with

我想从 Java 获取 Windows XP/Vista/7 中“打开方式...”上下文菜单的列表。

从 Windows 注册表中,我设法找到一种获取启动应用程序的命令的方法。但我没有找到如何获取这些应用程序名称和图标,如资源管理器打开列表上下文菜单中所示。

此外,管理这些信息的方式似乎从一个版本的操作系统到另一个版本也发生了变化。

是否有任何库可以与 Java 一起使用来实现此目的?

谢谢。

最佳答案

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

SHOpenWithProc = procedure(HWND: THandle; HInstance; THandle; 
                           CmdLine: PChar; CmdShow: Integer);

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 参数(我认为 - 我还没有在 Wide 版本上尝试过代码)。

注意:这也可能有帮助。这是一篇关于使用 OpenAs_RunDLL 的 MSDN 文章通过 API 的 ShellExecute 函数。

关于Java访问Window的 "Open with..."列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197880/

相关文章:

c# - 将注册表字符串值读入列表

docker - 将 docker 更新到 1.12 后无法拉/推图像

java数据输出流发送更多字节

windows - 如何以编程方式在 Windows 10 的特定监视器上启动应用程序?

Java垃圾收集日志输出

windows - 无法访问容器内的主机 Docker 引擎

c++ - vc++ 编译错误 RC : fatal error RC1107: invalid usage; use RC/? for

c++ - 以编程方式将目录添加到 Windows PATH 环境变量

java - 给定 `T` 和 `U` 其中 `T extends U` 如何返回 `U`

java - 泛型对象创建在 Eclipse 中显示错误,但在 Maven 中编译