Подтвердить что ты не робот

Написание драйвера принтера Windows

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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