如何捕获 rundll32 调用的结果?

per*_*erp 4 java windows printing rundll32

我一直被 Java 中这个老错误/缺失的功能所困扰:

https://bugs.java.com/bugdatabase/view_bug;jsessionid=b2ac8ea11f05c16d948e24d36fb5?bug_id=4673406

问题是,Java 标准打印对话框中的“属性”按钮在 Windows 上似乎始终处于禁用状态。仅当 PrintService.getServiceUIFactory() 返回不为 null 的内容时,才会启用该按钮。不幸的是 Win32PrintService 实例总是返回 null。总是。

通过谷歌搜索,我发现你可以通过调用 rundll32 来调用 Windows 自己的打印属性对话框:

rundll32 printui.dll,PrintUIEntry /e /n "name of printer here"
Run Code Online (Sandbox Code Playgroud)

我希望我可以使用它来规避 Win32PrintService 中的错误/缺失功能。但是,我不知道如何查询 PrintUIEntry 对话框以获取用户的选择。

换句话说,如何获得上述 rundll32 调用的结果?(如果我必须用 C/JNI 编写一些东西并直接使用 Windows API,那就这样吧。不过,我宁愿不这样做。)

或者有更好的方法来解决这个问题吗?

Dav*_*nan 5

rundll32 不会给您任何返回值,它的退出代码始终为零。

我想你必须找到另一种方法。