本文转载自:http://blog.csdn.net/kangear/article/details/26885685
关于这个需求很早就考虑了,一直没敢下手,也不是不敢,是之前下过一次手但是没有成功。一直过了几个月腾出一些空闲来解决这个问题。另外说明一下,截止到目前对于这个需求我还没有一个完全的解决方案。这篇也只是捋下思绪。
关于打印机状态的问题我在stackoverflow上也作过提问,结果问题就被删除了,原因有二有人说这个问题是硬件上的问题,所以不在stackoverflow所讨论的范围。另一个或许是自己的英文着实烂的不行了,问题都解释不清楚。
由于一直没有死心,所以在平时无聊的时候也会掏出手机搜索一番,当时唯一的收获是参考文档[1]中提到的USBHostPrinterGetStatus(),这个神奇的函数没有写任何来源,但作者将其描述成是可以获取打印机状态的,我着实有那么一点兴奋。但是苦于没有来源,有点不知所措。不过我还是将其作为一个方向进行了深挖了的。顺便找到了[3]-是和[1]差不多的英文版本,以及[2]这个现存的这个函数。从总体来说Linux中并没有这个函数,不知道写论文的那个是不是先有论文又做的实验。这个似乎是一个裸机程序,在我找到[5]这样专业文档的时候,这个几个状态是USB通信协议中就已经规定了的。更加确定这个函数目前深究下去是一个死路,不过以后做裸机的时候可以重新了解。
以上是走过的错路,下面说下我这次走能的小路:1.从Linux中标准的USB打印机驱动着手;2.从HP Device Manager入手。前后者都小有所获,以下逐个来分析。逐个分析前先把打印机在Windows下的各种问题的状态列表记录一下,话说收集这个可不是一个简单的事,首先是锁定打印机型号然后制造这种故障,使得PC上能够显示出对于的状态对话框。(到目前为至12-14还并不是官方的文字,因为制造该故障的条件一直不具备)
NO |
中文 |
英文 |
limit |
1 |
无法与打印机通信 |
Unable to Communicate with Printer |
E |
2 |
出纸盒已关闭 |
Output Tray Closed |
E |
3 |
门己打开 |
Door Open |
E |
4< |