读写DEVMODE.dmColor

时间:2010-09-14 04:20:49

标签: delphi windows-vista printing

我在使用DEVMODE结构的dmColor字段时遇到问题。

我的默认打印机是彩色打印机,如果我通过控制面板将打印机属性的输出颜色默认为黑白,则DEVMODE.dmColor字段始终返回DMCOLOR_COLOR而不是DMCOLOR_MONOCHROME。

即使我将打印机默认为黑白打印机,DEVMODE.dmColor仍会始终返回DMCOLOR_COLOR

所有其他DEVMODE字段(如dmDeviceName,dmCopies,dmDuplex等)都可以正常工作。我还尝试使用DeviceCapabilities函数查询DC_COLORDEVICE,微软文档说如果设备支持颜色它应该返回1,如果不支持颜色则返回0,如果发生错误则返回-1。此函数始终返回-1,但GetLastError返回的错误代码转换为“操作已成功完成”。

我在Windows Vista下运行,我在DEVMODE.dmFields中指定了DM_COLOR,有人知道为什么会这样吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题,似乎颜色设置和其他设置都存储在DEVMODE结构下面的专用驱动器数据部分中。私有数据的大小存储在DEVMODE.dmDriverExtra中。将从打印机属性对话框返回的私有驱动程序数据复制到打印设备已解决了该问题。

答案 1 :(得分:0)

这可能是驱动程序问题。

我在HP 2840彩色多功能机上完全相反:XP专用驱动程序运行良好(允许彩色和单色),但Vista和更高版本不支持它们。
从Vista开始,您需要使用Generic HP驱动程序,它始终返回单色。

- 的Jeroen