2011-11-17 76 views
7

我想检测打印机是否在线/离线之前试图打印。 如果它处于脱机状态 - 打印对话框将不可见。如何检测连接的USB打印机是打开还是关闭?

的Win32 API中的“OpenPrinter”等,似乎在后台打印队列中,而不是 打印机本身的工作,并且使打印机脱机后一个 文档发送将只报告,whichis为时已晚。

问题: 如何判断打印机是否脱机/联机而不发送打印输出?

编辑:

Offline - printer is turned off 
OnLine - printer is turned On 
+0

在线/离线对于这个问题的意义是什么?离线是否意味着断开连接,或者是否还有其他可能需要这种方式的条件? – 0xC0000022L

回答

0

我不认为这是可能的。

正如您已经发现这是使用假脱机程序抽象出来的,并且假脱机程序状态并不总是反映打印机状态。

所以这是在Windows中的设计。

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

+0

http://stackoverflow.com/questions/4838033/getting-the-port-name-of-a-connected-usb-device –

+0

实际上,即使连接了多台打印机,您也可以进行查询。 – 0xC0000022L

+0

当然,我的意思是如果程序必须在不同系统上查询多种打印机类型,它可能会变得更加复杂。 –

4

想必您知道打印机的名称或其他相关详细信息。

好,然后只需使用EnumPrintersPRINTER_INFO_2和检查PRINTER_STATUS_OFFLINE(或您想任何其他状态避免)。

或者,您可以尝试使用SetupDi*函数(aka Setup API)来确定在此刻是否连接了与打印机匹配的USB设备。

+0

+1探测USB匹配设备是很好的方向。也许这需要一个新的职位。 – menjaraz

相关问题