截获输出到打印机的文本数据.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
截获输出到打印机的文本数据

截获输出到打印机的文本数据 在所有的应用软件当中,几乎都会提供打印结果的功能,但大部分的软件并不提供输出结果到文本文件功能(如速达,用友和金碟应用软件等能够打印,但不能将结果直接输出到文本文件;再比如一些与硬件配套的应用软件类似 PeakNet等软件,也只能打印,不能输出到文本文件)。有时候客户需要对这些结果进行再次处理分析和统计。传统的方法,只能把打印到纸上的数据手工输入电脑,再利用自己的统计分析软件来处理这些数据。如果这些数据量大,仅靠人工输入是不可能的。笔者经过探讨和测试,找到了一个方法,实现了他们的无缝连接。为方便起见,以下称本文最早提到提供打印结果功能的软件为软件A,对这些结果再次进行处理分析和统计的软件为软件B。 问题(一)描述: 由于软件A不提供打印文本数据到文本文件中,但可以通过打印机打印出来。比如有些监控机器的软件一直要监控并且不时产生数据,而这些数据又需要重新处理和统计。我们需要的是文本文件。如何解决这个问题,请详见解决思路1),2),3)。 解决思路: 1) 虽然有些软件(比如Excel, Word等)在打印功能中提供“打印到文件”,但实际上打印出来的文件并不是我们所想要的纯数据的文本文件,而是有一堆的打印控制信息在里面。所以我们必须创建一个文本文件打印机,然后选该文本文件打印机为软件A默认的打印机。这样我们才能得到纯数据的文本文件。 2) 创建一个文本文件打印机:在Windows中创建一个新的本地打印机,选“FILE(打印到文件)”端口(注意不是打印机端口也不是串行口);然后需要选一个打印驱动程序(当然,你是牛人的话,自己可以写一个打印驱动程序,但写打印驱动程序对大多数程序员来说是一件很困难的事情)。 3) 尽管Windows提供了数十个厂家的打印驱动程序,但唯独只有Generic提供了文本文件打印程序,所以只能选Generic的“Generic/Text only” 作为该文本文件打印机的驱动程序。建好了文本文件打印机后,再将软件A默认的打印机重新指向到该文本打印机。这样我们再打印后就可以得到文本文件了。 问题(二)描述 我们的确可以得到文本文件,但新的问题又来了。当软件A用默认的文本文件打印机打印数据到文件时,会弹出一个输入文件名的对话框,此时如果没有操作员使用计算机,软件A会停留住。不为了不要人工输入文件名,请详见解决思路4),5)。 解决思路: 4) 每次打印到文本文件时候,系统会弹出一个对话框,需要输入文件名。对某些一天24小时不停运作的软件来说,靠人工输入文件名是不可能的。 5) 因此,我们可以设计一个程序,或者在软件B中增加一个功能,它的任务就是先找到该对话框,然后自动模拟键盘输入文件名到这个弹出的对话框,并且模拟鼠标点击“确定”按扭来关闭这个对话框,这样无须人工操作就能生成文本文件。 笔者设计的这个软件就是为了解决问题(二)。该软件不光是针对打印弹出的对话框,也可以针对其他一切类似需要人工输入的对话框。该程序代码还有助于解决如何自动关闭弹出的消息框的问题。软件B的数据来源可以是指定文件名的文本文件即我们刚刚得到的文本文件。它应该会定时地去读取这个文本文件,然后进行分析处理和统计。 笔者主要是采用了Windows API 函数,下面先对几个API函数简单的介绍一下: FindWindow( LPCTSTR lpszClassName, LPCTSTR lpszWindowName ): 查找指定类名和窗口名的窗口,返回一个窗口句柄。GetWindowText( HWND hWndLPTSTR lpString, int nMaxCount ): 获得窗口的文本,如果该窗口是对话框,则lpString返回它的标题。 FindWindowEx( HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow ): 在指定的父窗口内查找第一个指定类名的子窗口,返回一个窗口句柄。 SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ): 发一个消息给指定窗口,直到消息被处理完才返回。 SendNotifyMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam): 发一个消息给指定窗口。 有了设计思想后,再来选定一种程序语言。由于大部分语言都支持Windows API函数,所以选什么语言并不太重要,比如DELPHI,VC++,C++BUILDER,VB等都可以,笔者采用的是VC++6.0。 HWND a_window,b_window,f_window; CFileExc

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档