Windows打印机驱动开发

本文地址:http://www.tongxinmao.com/Article/Detail/id/317

开发打印机驱动程序通常有两种途径:一是开发一个完整的驱动程序,二是利用微软提供的通用打印机驱动程序( Unidrv )  
开发小型驱动程序( Minidriver )  
。开发一个完整的驱动程序工作量大且过程复杂,因此我们采用通用打印机驱动程序小型驱动程序来开发打印机驱动程序。

 

 

 

在Windows中,打印机驱动的作用是编写一组接口。应用程序调用的GDI函数会变成相应的DDI函数,打印机驱动提供的这组接口负责将DDI函数转变为打印机识别的的指令。至于是通过网口、串口等接口与真实打印机相连接,这是Printer Moniter的职责,而不是Printer Driver的职责。

打印机驱动一般分为两个部分。
1.printer graphics DLL  
2.Printer Interface DLL 
printer graphics DLL和Printer Interface DLL都已经编号,并留有plugin的接口。程序员可以编写相应的plugin。

由于Microsoft提供了Universal Printer Driver,所以编写驱动变得比较简单。
增强Universal Printer Driver可以分为三个部分:
1.增加一个叫做GPD的文件,这个文本定义了一些参数,Universal Printer Driver会读取这个文件,这个文件又被称作是Mini Driver。
2.printer graphics DLL相关的plugin被称为Rendering Plug-Ins。
3.Printer Interface DLL相关的plugin被称为User Interface Plug-Ins。

打印机驱动需要完成如下接口:
DevQueryPrintEx 
DrvConvertDevMode 
。。。
DrvUpgradePrinter
这几个函数在Universal Printer Driver中分别在UNIDRVUI.DLL和UNIDRV.DLL分别实现。

 

这部分介绍如何编写Rendering Plug-Ins。

这个plug-in是一个COM组件,需要向系统提供一个IPrintOemUni2接口的COM组件。

其中比较重要的函数是:
1.EnableDriver 
2.DisableDriver 
在EnableDriver中需要注册一组函数指针数组,这些函数用来hook中相应的DDI解释部分。这样就可以改变默认Universal Printer Driver的行为。

3. 
EnablePDEV创建打印机厂商自定义的数据结构,然后初始化这个数据结构。
4. 
DisablePDEV负责回收这个数据结构的所占用的内存。

重要数据结构
typedef struct _DEVOBJ { 
  DWORD dwSize;//这个数据结构的大小
  PDEVOEM pdevOEM; 
//自定义OEM数据结构的指针
  HANDLE hEngine;//物理设备的handle 
  HANDLE hPrinter;//打印机句柄
  HANDLE hOEM; 
  PDEVMODE pPublicDM ; 
  PVOID pOEMDM; 
  PDRVPROCS pDrvProcs; 
} DEVOBJ; 


5. 
GetInfo函数是负责得到一些打印机的一些信息。

6.PublishDriverInterface 
这个函数可以在其中得到IPrintOemDriverUni接口指针,这个指针非常有用,可以调用Universal Printer Driver提供的一些功能。
如向打印机输出命令,DrvWriteSpoolBuf。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET开发打印机驱动是通过使用.NET框架的相关类和方法来实现与打印机的通信和交互。在.NET开发中,我们可以使用System.Drawing.Printing命名空间提供的类来处理与打印机相关的功能。 首先,我们可以使用PrintDocument类来创建打印文档。我们可以设置打印文档的属性,如页面大小、页边距和打印方向等。然后,我们可以使用PrintPage事件来处理打印文档的每一页的绘制。 在PrintPage事件中,我们可以使用Graphics类提供的方法来绘制文本、图像和其他要打印的内容。我们可以使用PrintDocument类的Print方法将打印文档发送给打印机进行打印。 另外,在.NET开发中,我们还可以使用WMI(Windows管理信息)来获取与打印机相关的信息。通过查询WMI对象,我们可以获取打印机的状态、可用的打印机列表和打印机设置等信息。 此外,如果我们需要更底层的访问和控制打印机,我们可以使用PrinterSettings类。通过该类,我们可以设置和获取打印机的设置,如打印机名称、纸张类型、打印质量和颜色配置等。 总之,通过使用.NET框架提供的相关类和方法,我们可以方便地进行打印机驱动开发。我们可以实现打印文档的创建、打印内容的绘制,并可以通过WMI和PrinterSettings类来获取打印机状态和设置。这样,我们可以更好地控制和管理打印机的功能和参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值