0

我通过使用 FindFirstPrinterChangeNotification / FindNextChangeNotification方法编写了一个程序来使用 winspool api 监视打印机。我想知道作业是灰色还是彩色打印。我阅读了 api 但没有找到解决方案。如何从 PRINTER_NOTIFY_INFO_DATA 获得工作颜色?或任何地方?

4

1 回答 1

0

您必须监视 PRINTER_NOTIFY_INFO_DATA 结构中的 JOB_NOTIFY_FIELD_DEVMODE 字段。在 FindNextPrinterChangeNotification 调用和作业创建之后,通知到达,您可以从通知数据中检索有关作业颜色的信息。

示例(不完整,但我希望它有所帮助):

    ...
    PPRINTER_NOTIFY_INFO pNotification = NULL;
    ...
    FindNextPrinterChangeNotification(hNotification, &dwChange, &options, (LPVOID *) &pNotification);
    ...  
    PRINTER_NOTIFY_INFO_DATA jobData = pNotification->aData[notification_index];
    if (data.Field == JOB_NOTIFY_FIELD_DEVMODE)
    {
       DEVMODE *pDevMode = (DEVMODE *) jobData.NotifyData.Data.pBuf;
       int color = (pDevMode->dmFields & DM_COLOR ? pDevMode->dmColor : DMCOLOR_MONOCHROME);
    }
于 2013-07-10T04:43:32.613 回答