Написание драйвера принтера для Windows - PullRequest
13 голосов
/ 16 марта 2009

Я хочу написать приложение на C ++ или C #, которое будет работать как драйвер принтера после установки. Он будет доступен в раскрывающемся списке в диалоговом окне «Печать», но вместо печати он вызовет мой код.

Я думаю, что могут быть некоторые интерфейсы, которые Windows предоставляет для написания драйверов принтера.

Ответы [ 2 ]

21 голосов
/ 16 марта 2009

Windows предоставляет множество интерфейсов. Вы знаете, какой тип драйвера принтера вы хотите написать? В настоящее время Windows поддерживает три разновидности драйверов принтеров - PostScript, Unidrv и XPSDrv (последний для XP / 2003 Server с EP 1.0 и выше). В большинстве случаев достаточно написать плагин драйвера. Читайте об архитектуре INF, чтобы узнать, как все это устанавливается, особенно о мини-драйверах.

Как и предполагалось, вам понадобится WDK, чтобы иметь возможность собрать драйвер или его плагин. Обратите внимание, что драйверы не используют Visual Studio IDE или компиляторы. WDK поставляется с собственным компилятором. Вы всегда можете подключить последний с VS, но это другая история.

WDK имеет настройки для разных ОС. Вам нужно будет знать, к какой ОС (или набору ОС) вы хотите обратиться и выбрать соответствующую настройку.

Я хочу написать простой драйвер, который будет отображаться в списке принтеров.

Я не понимаю, как это будет полезно. Если вы пишете драйвер, зачем вам нужен список всех других драйверов, присутствующих в системе?

Печать на этот драйвер вызовет мой код, чтобы я мог делать такие вещи, как создание PDF-документа, вызов веб-службы и т. Д.

Интересно! Вы можете достичь всего этого в плагине пользовательского интерфейса. Плагин пользовательского интерфейса - это библиотека, которая загружается при выборе свойств драйвера Advanced.

Чтобы начать работу с плагинами пользовательского интерфейса, взгляните на образец oemui исходного кода в WDK.

0 голосов
/ 13 октября 2013

Я не уверен, что это будет отображаться в списке, но я никогда не пробовал этот код C ++:

#include <fstream>
Namespace Drivers{
Class Printer{
Const IOStream Printer("PRN");
Void Send(char a[]){
Printer<<a;}
Char GetStatus[](){
Char a[];
Printer>>a; 
return a;
 };
 }
...