【问题标题】:How to determine whether a printer supports bidirectional communication, or not如何确定打印机是否支持双向通信
【发布时间】:2014-05-10 17:24:37
【问题描述】:

我正在使用Print Spooler API 来自动化一些打印机管理任务;目前我正在处理需要双向通信的某些功能,这不是问题(发送 BIDI 请求和读取输出数据按预期工作)但在尝试执行请求之前,我想确保 BIDI 通信由 acual 设备支持(以避免任何 COM 异常)。

关于Print Spooler Components 的文档解释说,应用程序和驱动程序都必须实现bidirectional communication interfaces;当然,我是为我的应用程序这样做的(否则无法发送任何请求),但驱动程序通常由第三方提供。此外,打印提供程序 DLL 必须实现 SendRecvBidiData 函数...

由于Enable bidirectional communication 选项可用于任何打印机(通过打印机属性对话框),我认为必须可以轻松地从系统查询此信息(如果不支持该功能,则禁用该复选框,因为实例)。

我已经检查了各种 DRIVER_INFO_XPRINTER_INFO_X 结构,但它们都没有包含 BIDI 标志之类的......我还认为这些信息可能是从驱动程序本身推断出来的。

有没有办法确定驱动程序是否实现了所需的接口,或者任何其他允许推断驱动程序是否支持双向通信的解决方案?

【问题讨论】:

  • win32_printer WMI 类中有一个enableBIDI 属性...
  • 我想避免使用WMI。我更喜欢 Windows API 函数。

标签: windows visual-c++ printing com driver


【解决方案1】:

检查 PRINTER_INFO_2 上的 Attributes 成员,有一个未记录的条目:

PRINTER_ATTRIBUTE_ENABLE_BIDI 0x00000800

【讨论】:

  • 可能适用于某些情况...我可以暗​​示驱动程序支持双向通信,如果设置了标志,但如果没有呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多