【问题标题】:How to detect color printer with Win32?Win32如何检测彩色打印机?
【发布时间】:2015-12-16 18:19:13
【问题描述】:

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

根据DC_COLORDEVICEDeviceCapabilities的查询,只有Fax虚拟打印机是黑白的。

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

根据NUMCOLORSGetDeviceCaps的查询,只有传真是黑白的。

我对@9​​87654323@ 不感兴趣,所以我还没有尝试过。

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

【问题讨论】:

标签: c winapi printing


【解决方案1】:

DC_COLORDEVICE 没有给出正确答案,真是太可惜了。你的其他发现并不让我感到惊讶。

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

(信息上下文就像一个设备上下文,您可以查询但不能实际绘制。当您想知道打印机驱动程序将要做什么而不实际创建真实的设备上下文时,它很有用,这可能需要打印机在线。)

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

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

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

【讨论】:

  • DEVMODE/dmColor 可能更简单,也可以通过PRINTDLGEnumPrinters/PRINTER_INFO_2 访问 ---- pDevMode->dmColor 对于彩色打印机来说是 2。
  • 好吧,我以为我检查了DEVMODE.dmColor,但显然我没有检查。对于我所有的打印机,结果都是 100% 准确的。谢谢阿德里安。
  • 嗯,DEVMODE.dmColor 不返回默认颜色模式吗?因此,如果打印机能够彩色,但默认为黑白,那么我会认为它是黑白的,是吗?
  • 这取决于您如何阅读DEVMODE.dmColor 如果您阅读EnumPrinters,它应该始终是彩色打印机的彩色。但是,如果打印机的默认设置是灰度,并且您通过PRINTDLG,那么它会读取黑白。如果是这种情况,您可以覆盖并将其设置回颜色模式。
猜你喜欢
  • 2013-01-18
  • 2019-06-25
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2020-06-12
  • 2013-09-10
  • 1970-01-01
  • 2021-05-06
相关资源
最近更新 更多