Windows打印机驱动开发入门
打印机驱动的作用
在Windows中,打印机驱动的作用是编写一组接口。应用程序调用的GDI函数会变成相应的DDI函数,打印机驱动提供的这组接口负责将DDI函数转变为打印机识别的的指令。至于是通过网口、串口等接口与真实打印机相连接,这是Printer Moniter的职责,而不是Printer Driver的职责。
打印机驱动一般分为两个部分。
- Printer Interface DLL
- Printer graphics DLL
printer graphics DLL和Printer Interface DLL都已经编号,并留有plugin的接口。程序员可以编写相应的plugin。
由于Microsoft提供了Universal Printer Driver,所以编写驱动变得比较简单。
增强Universal Printer Driver可以分为三个部分:
- 增加一个叫做GPD的文件,这个文本定义了一些参数,Universal Printer Driver会读取这个文件,这个文件又被称作是Mini Driver。
- printer graphics DLL相关的plugin被称为Rendering Plug-Ins。
- Printer Interface DLL相关的plugin被称为User Interface Plug-Ins。
打印机驱动需要完成如下接口:
- DevQueryPrintEx
- DrvConvertDevMode
- 。。。
- DrvUpgradePrinter
这几个函数在Universal Printer Driver中分别在UNIDRVUI.DLL和UNIDRV.DLL分别实现。
如何做一个打印机的驱动,将发到打印机的内容输出到一个图像文件中?
就象Acrobat 的打印驱动一样,当用户调用打印时,将内容输出到一个图像文件中。
第一种实现方法:
利用rendering plug-ins hook FilterGraphics函数,可得到每一线点阵数据。
微软2000ddk有现成的例子,在src\\print\\oemdll\\oemuni下,编译好即可以使用这个动态库oemuni.dll。
至于FilterGraphics函数里面怎样编程就看自己的了,反正每一线数据送出都会hook到buffer。如果你继续向spooler送,不要忘了用DrvWriteSpoolBuf函数。
提示:安装后OEMUNI.DLL在system32\\spool\\drivers\\win32x86\\3下
另一种实现方法 :
自己做一个port monitor,可在StartDocPort,writeport,readport,EndDocPort等函数中做处理。
但是buffer里的数据是从spooler来的数据命令混合流。
你需要根据自己的格式处理数据,从中分离命令和数据,关于port monitor也有例子,自己看。
版权声明:
作者:驱动外包
链接:http://www.51qudong.net/66.html
来源:算法优化_驱动外包_直播算法优化_MAC驱动开发_Linux驱动开发_usb驱动移植外包
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论