Identifying a Printer's Color Capability
To distinguish between color and noncolor (monochrome or grayscale) devices, Windows 2000 and later NT-based operating system versions call the DrvDeviceCapabilities function, passing the DC_COLORDEVICE constant in the call. This function returns 1 if the device supports color, and 0 if the device produces monochrome or grayscale output. It is recommended that all printer drivers support calls to DrvDeviceCapabilities for the DC_COLORDEVICE constant.
It is very important for drivers to implement the DrvDeviceCapabilities function. Otherwise it is more difficult for the operating system to distinguish between color and noncolor devices, for the following reasons:
A call to the GetDeviceCaps function (described in the Windows SDK documentation), in which the NUMCOLORS constant is passed, usually results in a return value less than or equal to 2 for most noncolor devices, and greater than 2 for color devices. The operating system is unable to distinguish between monochrome and grayscale devices.
The value of the dmColor member of the DEVMODEW structure is not a reliable indicator of whether the device is a color or noncolor device. Certain printer drivers set this member to DMCOLOR_COLOR even for devices that are not capable of producing color.