我有两台黑白打印机,两台彩色打印机和一些虚拟打印机(传真,CutePDF Writer等)。
根据对DeviceCapabilities
的DC_COLORDEVICE
查询,只有传真虚拟打印机是黑白的。
根据对GetDeviceCaps
的PLANES
和BITSPIXEL
查询,所有打印机都有一个平面,只有Fax和CutePDF有1位/像素(黑白)
根据对NUMCOLORS
的{{1}}查询,只有传真是黑白的。
我对querying the driver directly并不感兴趣,所以我还没有尝试过。
如何使用Win32准确检测彩色打印机?
答案 0 :(得分:2)
Bummer认为DC_COLORDEVICE
没有给出正确的答案。你的其他发现并不让我感到惊讶。
您可以尝试使用CreateIC为打印机创建信息上下文,然后使用GetDeviceCaps检查COLORRES
属性。
(信息上下文就像您可以查询但无法实际绘制的设备上下文。当您想知道打印机驱动程序将要执行的操作而不实际创建可能需要的实际设备上下文时,它非常有用打印机在线。)
检查平面数是没用的,因为一切(很好的近似)使用单个平面。每个像素的位数实际上并不能告诉您这些像素是彩色还是仅灰度(或只是调色板条目)。
另一个想法是查看设备默认DEVMODE中的dmColor
字段。
我必须在很多年前(在DeviceCapabilities之前)解决同样的问题,但我不记得我是怎么做到的。