如何使用Win32检测彩色打印机?

我有两台黑白打印机,两台彩色打印机和一些虚拟打印机(Fax,CutePDF Writer等).

根据对DeviceCapabilities的DC_COLORDEVICE查询,只有传真虚拟打印机是黑白的.

根据PLANES和BITSPIXEL查询到GetDeviceCaps,所有打印机都有一个平面,只有Fax和CutePDF有1位/像素(黑白).

根据NUMCOLORS对GetDeviceCaps的查询,只有传真是黑白的.

我对querying the driver directly并不感兴趣,所以我还没试过.

如何使用Win32准确检测彩色打印机?

最佳答案 让DC_COLORDEVICE没有给出正确答案,真糟糕.你的其他发现并不让我感到惊讶.

您可以尝试使用CreateIC为打印机创建信息上下文,然后使用GetDeviceCaps检查COLORRES属性.

(信息上下文就像您可以查询但无法实际绘制的设备上下文.当您想要知道打印机驱动程序将要执行的操作而不实际创建真实的设备上下文时,这很有用,这可能需要打印机线上.)

检查平面的数量是没用的,因为一切(很好地近似)使用单个平面.每个像素的位数实际上并不能告诉您这些像素是彩色还是仅灰度(或仅仅是调色板条目).

另一个想法是查看设备默认DEVMODE中的dmColor字段.

很多年前(在DeviceCapabilities之前)我必须解决同样的问题,但我不记得我是怎么做到的.

点赞