掌桥专利:专业的专利平台
掌桥专利
首页

一种监控物理打印机打印内容的方法

文献发布时间:2023-06-19 09:35:27



技术领域

本发明涉及一种监控物理打印机打印内容的方法。

背景技术

使用windows提供的打印监控api接口,可以监控到打印发起电脑、打印机名称、打印时间、打印名称、打印份数等。但是无法监控到具体打印了哪些内容。而有些时候,为了安全审计、备份等方面的原因,我们需要知道具体打印的内容。

发明内容

本发明的目的是提供一种监控物理打印机打印内容的方法,弥补现有打印监控功能的不足。

实现本发明目的的技术方案是:一种监控物理打印机打印内容的方法,包括以下步骤:

S1,获取物理打印机名称;

S2,拦截应用程序的打印请求,判断打印请求是否调用物理打印机,若调用物理打印机,则保存物理打印机名称;然后调用虚拟打印机Microsoft XPS Document Writer,并将物理打印机准备打印的内容转到windows自带的xps打印机Microsoft XPS DocumentWriter打印,得到xps监控文件;

S3,设置在打印成xps文件的时候,将不会跳出保存文件对话框,而是直接打印成xps文件;

S4,重新调用步骤S2保存的原始物理打印机,打印步骤S3中的xps监控文件。

进一步地,所述步骤S1具体为:首先使用EnumPrinters来获取需要的缓冲区大小,然后创建缓冲区;然后再次调用EnumPrinters来获取打印机信息,从而获取物理打印机名称。

进一步地,所述步骤S2具体为:ApiHook windows接口CreateDC,然后检查第二个参数pwszDevice;如果其有值,则与步骤S1中保存的打印机名称相比对,判断其是否为打印机,且不为Microsoft XPS Document Writer或者PDF打印机;如果判断是打印机,且不为Microsoft XPS Document Writer或者PDF打印机,则表明正在调用物理打印机准备打印文件,此时首先将pwszDevice保存起来,命名为:pwszOrgDevice;然后调用Real_CreateDCW(NULL,L"Microsoft XPS Document Writer",NULL,NULL);并返回,将打印机要打印的内容先打印到xps文件中去。

进一步地,所述步骤S3具体为:ApiHook windows接口StartDocW,将第二个参数lpDocInfoW中的成员lpszOutput设为{tmp}\myName.xps,其中,{tmp}为系统临时目录。

进一步地,所述步骤S4具体为:ApiHook Windows接口EndDoc,当Microsoft XPSDocument Writer打印完成时,xps监控文件也已生成,此时调用步骤S2保存的原始物理打印机,打印生成的xps监控文件。

采用了上述技术方案,本发明具有以下的有益效果:(1)本发明提供的方法,能够监控到物理打印机的具体打印内容,并将内容备份、存档,方便后续在需要的时候进行审计,保证了打印内容的可控、可回溯。

(2)本发明设置在打印成xps文件的时候,将不会跳出保存文件对话框,而是直接打印成xps文件,能够保证监控过程不被打断,提高了监控的稳定性。

具体实施方式

(实施例1)

本实施例的一种监控物理打印机打印内容的方法,包括以下步骤:

S1,获取物理打印机名称:首先使用EnumPrinters来获取需要的缓冲区大小,然后创建缓冲区;然后再次调用EnumPrinters来获取打印机信息,从而获取物理打印机名称。代码如下:

DWORD dwNeeded=0,dwPrinterNum=0;

EnumPrinters(PRINTER_ENUM_LOCAL,NULL,4,NULL,0,&dwNeeded,&dwPrinterNum);

LPPRINTER_INFO_4pPrinterInfo=(LPPRINTER_INFO_4)LocalAlloc(LPTR,dwNeeded+4);

EnumPrinters(PRINTER_ENUM_LOCAL,NULL,4,pPrinterInfo,dwNeeded,&dwNeeded,&dwPrinterNum);

其中pPrinterInfo中保存了相应的打印机信息,dwPrinterNum表示有多少打印机。

通过以下指令可以权举出打印机名称:

for(int i=0;i

{

wprintf_s(L"%s\r\n",pBuffer[i].pPrinterName);

S2,ApiHook windows接口CreateDC。检查第二个参数pwszDevice,如果其有值,则与步骤S1中保存的打印机名称相比对,判断其是否为打印机,且不为Microsoft XPSDocument Writer或者PDF打印机,具体指令如下:

如果bPhysicalPrint为true,则表明此时正在调用物理打印机准备打印文件。此时首先将pwszDevice保存起来,命名为:pwszOrgDevice。然后调用Real_CreateDCW(NULL,L"Microsoft XPS Document Writer",NULL,NULL);并返回。目的是将打印的内容先打印到xps文件中去。

S3,ApiHook windows接口StartDocW。将第二个参数lpDocInfoW中的成员lpszOutput设为{tmp}\myName.xps,其中,{tmp}为系统临时目录。通过此设置,在打印成xps文件的时候,将不会跳出保存文件对话框,则直接输入到文件{tmp}\myName.xps。

S4,ApiHook Windows接口EndDoc。当Microsoft XPS Document Writer打印完成时,xps监控文件也已生成。此时调用步骤S2中保存的原始物理打印机pwszOrgDevice,打印生成的xps监控文件。代码如下:

通过本实施例提供的一种监控物理打印机打印内容的方法,能够监控到物理打印机的具体打印内容,并将内容备份、存档,方便后续在需要的时候进行审计,保证了打印内容的可控、可回溯。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种监控物理打印机打印内容的方法
  • 基于windows打印池的打印机打印内容监控与审计方法
技术分类

06120112220861