如何从Winspool API的打印机作业中检查颜色/灰色

时间:2013-05-29 05:50:08

标签: printing

我已经编写了一个程序,通过使用winspool api监视打印机 FindFirstPrinterChangeNotification / FindNextChangeNotification 方法。 我想知道的是一份工作是灰色或彩色印刷。我读api但找不到解决方案。 如何从PRINTER_NOTIFY_INFO_DATA获得工作的颜色?或者在哪里?

1 个答案:

答案 0 :(得分: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);
    }