1

我一直在使用 Python 的win32print模块来尝试获取有关打印机集的各种信息,例如驱动程序名称、作业计数、正在使用的端口、状态等。它大多是成功的,但是我遇到了很多麻烦使用 win32print 从 API 返回的状态码。

我一直在使用 win32print.GetPrinter 方法,它返回一个 PRINTER_INFO_ 字典,其中一个映射是 Status。但是,没有记录什么状态代码对应于什么打印机状态。似乎 0 是空闲的,1 是暂停的,但除此之外我不确定这意味着什么。

当我查找 windows 32 位 API 的常量值时,我找到了这个页面,但我得到的状态代码似乎都与它不匹配。很多时候,我得到一个状态码,比如 1052800(从 Epson 打印机得到那个),它不在 win32api 常量的列表中。

我也尝试过使用 WMI 模块来做到这一点,但成功率更低。

我想获取打印机缺纸、打印机门打开、碳粉不足、卡纸等的打印机状态代码。有没有人有任何提示可以在哪里找到这些状态代码的含义,甚至是查找打印机状态的更好解决方案完全地?

4

2 回答 2

1

返回的状态是一个位掩码,例如在此处描述。多个值可以进行或运算,因此您的值 1052800(十六进制 0x101080)表示打印机具有(所有)状态;

  • PRINTER_STATUS_USER_INTERVENTION
  • PRINTER_STATUS_NOT_AVAILABLE
  • PRINTER_STATUS_OFFLINE
于 2012-08-20T16:51:30.607 回答
0

我想分享我在 Windows 10 中检查打印机是否离线的经验。PRINTER_INFO_2from中的状态标志win32print.GetPrinter对我不起作用,因为对于所有已安装的打印机,它始终为 0。感谢这个关于 C++ 的 stackoverflow 讨论,我发现PRINTER_ATTRIBUTE_WORK_OFFLINE打印机属性中的标志可以表示打印机是否处于脱机状态。

handle = win32print.OpenPrinter(printer_name)   
attributes = win32print.GetPrinter(handle)[13]
print(f'{printer_name} is offline? :{(attributes & 0x00000400) >> 10}')

[13] 是返回元组中的属性位置。microsoft doc
0x00000400 是PRINTER_ATTRIBUTE_WORK_OFFLINE. 微软文档

于 2020-12-22T09:32:32.130 回答