使用 win32print 获取打印机状态代码

Get Printer Status Code with win32print

我已经阅读了win32print的文档,其中指出GetPrinter是用于获取打印机状态的方法。但是,此方法 returns 一个完整的数据元组,我不知道哪个元素指示实际状态。有什么想法吗?

(None, 'HP Deskjet F4400', '', 'USB001', 'HP Deskjet F4400 series Class Driver', '', '', None, '', 'winprint', 'RAW', '', None, 1600, 1, 0, 0, 0, 0, 2, 0)

如果您将 Level=2 传递给 GetPrinter,它应该 return 一个字典。然后你可以检查键。所以,你可以这样做:

d = GetPrinter(yourPrinter, 2)
print(d.keys())

然后在键中查找 'status'。

> Returns a dictionary containing PRINTER_INFO_* data for level, or returns a tuple of PRINTER_INFO_2 data if no level is passed in.

我建议使用级别 2,因为这是默认设置。所以它实际上是已经 returned 的级别(就像一个元组)。

假设您使用的是 GetPrinter 的默认级别参数,它将返回定义在 https://msdn.microsoft.com/en-us/library/windows/desktop/dd162845%28v=vs.85%29.aspx

的 PRINTER_INFO_2

这是 C++ 定义,但它应该与您提供的响应中的 21 个成员匹配。

typedef struct _PRINTER_INFO_2 {
LPTSTR               pServerName;
  LPTSTR               pPrinterName;
  LPTSTR               pShareName;
  LPTSTR               pPortName;
  LPTSTR               pDriverName;
  LPTSTR               pComment;
  LPTSTR               pLocation;
  LPDEVMODE            pDevMode;
  LPTSTR               pSepFile;
  LPTSTR               pPrintProcessor;
  LPTSTR               pDatatype;
  LPTSTR               pParameters;
  PSECURITY_DESCRIPTOR pSecurityDescriptor;
  DWORD                Attributes;
  DWORD                Priority;
  DWORD                DefaultPriority;
  DWORD                StartTime;
  DWORD                UntilTime;
  DWORD                Status;
  DWORD                cJobs;
  DWORD                AveragePPM;
} PRINTER_INFO_2, *PPRINTER_INFO_2;