
ImagePrinter是一个虚拟打印机,可以将文档“打印(虚拟打印)”成BMP、PNG、JPG、PDF等格式的文件,功能类似于文档转换器,安装后会成为系统的默认打印机。ImagePrinter的体积只有900多KB,可以让低版本的office支持将文档打印成图片。
1、驱动层(Driver)一种。好像是修改Render plug-in什么的。没做过。
2、打印假脱机(splooer)层两种。
(1)自定义打印处理器(PrintProcessor),一般是修改DDK中genprint的例子。将自定义的代码加入到PrintDocumentOnPrintProcessor中。
(2)在监视(Monitor)层。
打印假脱机(splooer)层两种的两种实现方法驱动层一般都用微软统一驱动程序(UniDrv)。
通过打印测试页可以了解安装的打印驱动的各个方面:驱动程序、端口等。也可以通过打印机的属性查看。
ImagePrinter是用的自定义端口的形式实现虚拟打印。
ImagePrinter是在Port监视器端的虚拟打印机。
(1)在系统开机时,顺序调用以下函数:DllMain--->InitializePrintMonitor--->iEnumPorts(2次,后一次参数都是NULL)--->iOpenPort;
(2)在打印文档时,顺序调用以下函数:iStartDocPort--->iWritePort(很多次)--->iEndDocPort。
以下是DDK的翻译(根据对代码的理解,有删减):
(1)初始化打印监视器
当spooler调用LoadLibrary来加载的打印监视器DLL,系统立即调用DLL的DllEntryPoint函数。可以在此时LisableThreadLibraryCalls,这样创建和删除线程时,不必非得这个通知DLL。
每一个DLL都导出一个初始化函数,可以供spooler在调用LoadLibrary后调用。Language monitor DLL和port monitor server DLL导出InitializePrintMonitor2函数。port monitor UI DLL的导出InitializePrintMonitorUI函数。(总共有3中Monitor)。
这两个初始化函数的作用是返回其他函数(EnumPorts,OpenPort,StartDocPort等所有以下用的函数)的指针,这样spooler就可以调用它们了。初始化函数也可以执行load time的初始化操作。
InitializePrintMonitor2函数返回一个监视器实例句柄。monitor应分配本地内存来存储自定义的一些信息,并以此句柄为标识来分配内存。
当spooler第一次启动时(一般是开机时,如果你开机启动了spooler服务的话),它会载入所有已安装的monitor DLL的。所有Monitor的初始化函数调用后,打印后台处理程序调用每个port monitor的EnumPorts函数,其中列举了monitor支持的端口。monitor支持一个端口,如果端口已被添加到monitor的数据库。然后打开每个支持的端口。
(2)打开和关闭端口
spooler 通过调用language monitor的OpenPortEx函数打开端口;相对应的Port monitor调用OpenPort函数,language monitor只返回从Port monitor的OpenPort获得的句柄。如果没有language monitor,就直接调Port monitor的OpenPort函数。打开一个端口后不关闭的话,不能再打开。
端口一经打开,打印后台处理程序就可以调用其他函数来打印作业了。这些函数使用OpenPort返回的句柄作为输入。什么时候端口关闭呢:系统关机,没打印任务....
(3)打印打印作业
每个打印作业以StartDocPort开始,以EndDocPort结束。当print processor 调用的spooler的StartDocPrinter EndDocPrinter的函数时,这两个函数被调用。在这两个函数调用中间,不定量的WritePort, ReadPort, and GetPrinterDataFromPort函数被调用。
这些函数都需要用到OpenPortEx(或OpenPort)返回的句柄( port handle)作为输入参数。
当spooler调用language monitor 的WritePort函数,以将数据流发送到端口时,这些函数一般只增加一些特定的语言信息到接收到的数据流上,如PJL命令然后将它传递给相关的port monitor的WritePort功能。
ReadPort函数是用于获取双向打印机硬件的状态信息。Language monitor 通过调用SetPort将信息发送到spooler,获得状态信息。spooler不能调用ReadPort的函数。
如果打印硬件是双向的,language monitor和port monitor 都应该实现GetPrinterDataFromPort函数。language monitor的GetPrinterDataFromPort函数以注册表值的名称为输入,获得该名称的值(通常由调用相关的端口监视器的WritePort和ReadPort功能),并返回值给调用者。port monitor 的GetPrinterDataFromPort函数应该接受一个I / O控制代码作为输入,调用DeviceIoControl返回控制代码给port driver,并返回结果。
70KB / 03-27
系统其他
下载
21.5M / 02-01
游戏补丁
下载
231KB / 09-26
系统优化
下载
p2psearcher3.5绿色免费版
搜索查找 / 1.5M
下载
1
Siglus RealLive引擎通用一键解锁程序绿色版
系统其他 / 42KB
下载
2
bluetooth外围设备驱动程序
硬件驱动 / 12.7M
下载
3
Vista Start Menu Free更换系统开始菜单v.3.88 绿色多语版
系统优化 / 9.4M
下载
4
UUID Factory(电脑uuid识别码生成工具)V2.2.0.3310 绿色版
系统其他 / 2.0M
下载
5
VMware过检测补丁VMware Patch Check X64
系统其他 / 52KB
下载
6
Bios密码获取器BiosPwdsv1.21绿色汉化版
系统其他 / 127KB
下载
7
Total Uninstall PE完全卸载工具v6.19.1.352中文绿色版
系统其他 / 13.4M
下载
8
协议分析工具进制转换protobuf反序列化工具v1.0 绿色免费版
系统其他 / 1.2M
下载
9
PowerGPSV2.3.2电脑版
系统其他 / 1.8M
下载
10
140.5M / 09-05
立即下载
76.4M / 03-25
立即下载
55M / 06-05
立即下载
237.9M / 04-13
立即下载
900.9M / 03-02
立即下载
96.2M / 07-06
立即下载
311.2M / 07-06
立即下载
335M / 07-06
立即下载
200M / 07-06
立即下载
413.8M / 07-06
立即下载
768.9M / 08-19
立即下载
484.7M / 09-27
立即下载
165.4M / 09-05
立即下载
131.8M / 04-13
立即下载
195.6M / 03-03
立即下载
45.6M / 09-08
立即下载
665.2M / 07-06
立即下载
2.84G / 07-06
立即下载
93M / 07-06
立即下载
338.3M / 07-06
立即下载
892.4M / 08-18
立即下载 312M / 07-30
立即下载 1.38G / 07-26
立即下载 109.8M / 06-03
立即下载 142M / 01-08
立即下载 1.2M / 11-23
立即下载 548.8M / 04-13
立即下载 1.6M / 04-13
立即下载 1.48G / 03-18
立即下载 646.6M / 03-03
立即下载 404M / 08-18
立即下载 110.5M / 09-05
立即下载 33.4M / 09-05
立即下载 60M / 04-29
立即下载 254M / 04-25
立即下载 659M / 04-23
立即下载 1M / 12-26
立即下载 253.4M / 12-08
立即下载 253M / 12-08
立即下载 1.19G / 11-16
立即下载 115.9M / 08-19
立即下载 488.3M / 06-04
立即下载 369M / 09-22
立即下载 181.5M / 09-22
立即下载 201.2M / 09-05
立即下载 248.9M / 12-08
立即下载 248.9M / 12-08
立即下载 100.6M / 03-06
立即下载 148.9M / 03-06
立即下载 1.12G / 07-06
立即下载 126.7M / 02-04
立即下载 1.76G / 09-22
立即下载 1.92G / 04-17
立即下载 201.5M / 04-13
立即下载 7.31G / 07-01
立即下载 94.3M / 07-06
立即下载 2.48G / 07-06
立即下载 7.63G / 07-06
立即下载 1M / 07-06
立即下载 778.1M / 07-06
立即下载 1.30G / 08-19
立即下载 72M / 07-06
立即下载 548.7M / 07-06
立即下载 1.00G / 07-06
立即下载 9.13G / 07-06
立即下载 126.2M / 07-06
立即下载 72M / 07-06
立即下载 105.1M / 07-06
立即下载 132M / 07-06
立即下载 132M / 07-06
立即下载