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

时间:2015-12-16 18:19:13

标签: c winapi printing

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

根据对DeviceCapabilitiesDC_COLORDEVICE查询,只有传真虚拟打印机是黑白的。

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

根据对NUMCOLORS的{​​{1}}查询,只有传真是黑白的。

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

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

1 个答案:

答案 0 :(得分:2)

Bummer认为DC_COLORDEVICE没有给出正确的答案。你的其他发现并不让我感到惊讶。

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

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

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

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

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