如何检测连接的USB打印机是开启还是关闭?

7
我想在打印前检测打印机的在线/离线状态。如果它处于离线状态,则打印对话框将不可见。
Win32 API中的“OpenPrinter”等功能似乎适用于打印队列,而非打印机本身,并且只能在发送文档后报告打印机离线,这太晚了。
问题:如何在向打印机发送打印文件之前确定打印机的离线/在线状态?
编辑:
Offline - printer is turned off
OnLine  - printer is turned On

在这个问题的目的下,"在线/离线"是什么意思? "离线"是指断开连接,还是有其他条件需要以此方式捕获? - 0xC0000022L
2个回答

4

假设您知道打印机的名称或其他详细信息。

那么,只需使用EnumPrintersPRINTER_INFO_2,检查PRINTER_STATUS_OFFLINE(或任何其他您想要避免的状态)。

或者,您可以尝试使用SetupDi*函数(也称为设置API)来确定与打印机匹配的USB设备是否此时连接。


+1 探测USB匹配设备是一个很好的方向。也许这需要写一篇新的文章。 - menjaraz

0

我认为这是不可能的。

正如你已经发现,这是通过使用打印池进行抽象化处理的,而打印池状态并不总是反映打印机状态。

因此,在Windows中,这是按设计而行的。

如果你只有一种特定类型的打印机,那么你可以查询它是否连接到USB。


https://dev59.com/rVPTa4cB1Zd3GeqPm9dy - Jens Mühlenhoff
实际上,即使连接了多台打印机,您也可以查询此内容。 - 0xC0000022L
当然,我的意思是如果程序需要在不同的系统上查询多种打印机类型,那么它可能会变得更加复杂。 - Jens Mühlenhoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接