Чтение и запись DEVMODE.dmColor - PullRequest
2 голосов
/ 14 сентября 2010

У меня проблемы с полем dmColor для структуры DEVMODE.

Мой принтер по умолчанию - цветной принтер, если я по умолчанию выводил цвет свойств принтера через панель управления на черно-белый, поле DEVMODE.dmColor всегда возвращает DMCOLOR_COLOR вместо DMCOLOR_MONOCHROME.

Даже если мой принтер по умолчанию установлен на черно-белый принтер, DEVMODE.dmColor все равно всегда возвращает DMCOLOR_COLOR

Все остальные поля DEVMODE, такие как dmDeviceName, dmCopies, dmDuplex и т. Д., Работают нормально. Я также пытался запросить DC_COLORDEVICE с помощью функции DeviceCapabilities, в документации Microsoft говорится, что он должен возвращать 1, если устройство поддерживает цвет, 0, если нет, и -1, если произошла ошибка. Эта функция всегда возвращает -1, но код ошибки, возвращаемый GetLastError, переводится как «Операция успешно завершена».

Я работаю под Windows Vista, и я указал DM_COLOR в DEVMODE.dmFields, кто-нибудь знает, почему это происходит?

Ответы [ 2 ]

1 голос
/ 15 сентября 2010

Я решил проблему, похоже, что настройки цвета вместе с другими настройками хранятся в разделе данных личного диска ниже структуры DEVMODE.Размер личных данных хранится в DEVMODE.dmDriverExtra.Копирование данных закрытого драйвера, возвращенных из диалогового окна свойств принтера, на печатающее устройство устранило проблему.

0 голосов
/ 14 сентября 2010

Это может быть проблема с драйвером.

У меня есть полная противоположность на моем цветном многофункциональном устройстве HP 2840: драйверы, специфичные для XP, работают хорошо (разрешая как цветные, так и монохромные), но они не поддерживаются наVista и выше.
Начиная с Vista, вам необходимо использовать драйверы Generic HP, которые всегда возвращают монохромный.

- jeroen

...