【发布时间】:2013-07-10 12:43:32
【问题描述】:
我已经编写了一个程序来通过使用winspool api来监控打印机 FindFirstPrinterChangeNotification / FindNextChangeNotification 方法。 我想知道作业是灰色还是彩色打印。我阅读了 api 但没有找到解决方案。 如何从 PRINTER_NOTIFY_INFO_DATA 获取作业颜色?或任何地方?
【问题讨论】:
标签: printing
我已经编写了一个程序来通过使用winspool api来监控打印机 FindFirstPrinterChangeNotification / FindNextChangeNotification 方法。 我想知道作业是灰色还是彩色打印。我阅读了 api 但没有找到解决方案。 如何从 PRINTER_NOTIFY_INFO_DATA 获取作业颜色?或任何地方?
【问题讨论】:
标签: printing
您必须监控 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);
}
【讨论】: