【问题标题】:How to capture result from a rundll32 invocation?如何从 rundll32 调用中捕获结果?
【发布时间】:2011-07-01 23:08:54
【问题描述】:

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

http://bugs.sun.com/view_bug.do;jsessionid=b2ac8ea11f05c16d948e24d36fb5?bug_id=4673406

问题是 Java 标准打印对话框中的“属性”按钮在 Windows 上似乎总是被禁用。该按钮仅在 PrintService.getServiceUIFactory() 返回非空值时启用。不幸的是 Win32PrintService 实例总是返回 null。总是。

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

rundll32 printui.dll,PrintUIEntry /e /n "name of printer here"

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

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

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

【问题讨论】:

  • @prep:与错误报告一起,rundll32 有一个代码 sn-p。你试过吗?

标签: java windows printing rundll32


【解决方案1】:

rundll32 不给你任何返回值,它的退出码总是零。

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

【讨论】:

  • 我没想到会这样。但是肯定有某种机制可以知道对话中做了什么?如,确定或取消,如果确定,设置了哪些属性,它们的值是什么?仅仅能够显示对话框而不访问结果,是完全没用的......
  • @perp 系统不记得设置了吗?换句话说,您让用户在对话框中设置它们,然后当您从应用程序开始打印时,这些设置就会生效。
  • 这是个好问题!我没想到它会那样工作,但也许确实如此?我试试看。
  • 确实如此。我的开发风格非常倾向于不在对话框中真正做任何工作,而是从它们返回结果并在其他地方做实际工作。所以我只是假设这个对话框会返回一些东西,而不是自己改变 Windows 的设置。在这种情况下,我很高兴它确实如此,但是,它使整个事情变得非常轻松。我的解决方案是一个黑客,但它似乎工作......手指交叉。 :-)
  • @perp 打印机驱动程序,打印机设置,在 Windows 中,这是一个奇怪的世界。变异系统状态,呸!!不管怎样,很高兴你在做生意。
猜你喜欢
  • 2020-10-03
  • 2010-10-17
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
相关资源
最近更新 更多