【问题标题】:Listening to print job event invoked using File menu from Java侦听使用 Java 中的文件菜单调用的打印作业事件
【发布时间】:2009-05-10 06:15:42
【问题描述】:
我很想知道我的 Java 程序如何监听底层操作系统生成的 Print 事件。由于我的项目基于 Java,打印作业事件侦听器不应依赖于平台。
更具体地说,我的程序将在后台运行,如果用户尝试从 MS Word 打印页面(例如),则应通知打印作业。该事件不仅应通知正在启动的打印作业,还应通知其他详细信息,例如页数、文档位置等(如果可能的话)。非常感谢提供完整教程或一些 sn-ps 的链接。谢谢!
【问题讨论】:
标签:
java
event-handling
operating-system
【解决方案1】:
我们是一家 C++ 和 Java 商店。我编写的代码几乎可以满足您的要求。它是用 C++ 为 Win32 编写的(并且是正确的错误 - 这是 Win32 API 中记录最少的领域之一 - 并且不同的打印机发送不同的事件流,因此开发健壮的打印队列非常困难处理)。
如果有人创建了一个 JNI 库来做这些事情(不太可能),那么它就不可能是跨平台的。所涉及的工作量将是巨大的(不同的操作系统以完全不同的方式处理打印队列和通知)。
我的建议是复习您的 Win32 编程(使用 C/C++)。一旦你有东西在那里工作,如果你绝对必须让它们与你的 Java 应用程序交互,你可以使用 JNI 来包装它。
这是关于打印机更改通知监控的 MSDN 文章(您必须先调用 OpenPrinter - 但下一个调用是 FindFirstPrinterChangeNotification):http://msdn.microsoft.com/en-us/library/dd162722(VS.85).aspx
如果您也尝试支持 *nix 和 mac,则需要单独挖掘它们。祝你好运。
【讨论】:
-
我同意不太可能存在跨平台库,并且几乎肯定需要 JNI。新手,看看 Java Native Access (jna.dev.java.net),它可以简化本机代码的必要使用。