Tho*_*sen 14 c# windows printing sdk visual-studio
我有一种情况,生成某个数据文件的唯一方法是手动将其打印到FILE:在Windows下并将其保存在文件中以供进一步处理.
我真的想有一个小的独立程序嵌入这个二进制打印机驱动程序,所以我可以从批处理文件运行它并让它为我生成二进制文件,因为我们可以完全自动化"在Visio中保存文件, '打印'它并将其上传到最终目的地并触发远程测试".
这可以通过合适的Windows SDK实现吗?我是一名Java程序员,所以我不知道Visual Studio和MSDN的可能性 - 但是! - 但我很感激指针.
编辑:我有该打印机驱动程序的安装文件,32位和64位.旧版本可能包含16位驱动程序.
编辑:"打印到文件:"功能正是文档推荐的内容.我已经玩了一点使用LPR协议来看看它能做些什么.我还是更喜欢"调用小二进制"方法.
Ole*_*leg 12
你制定的一般问题很难解决.大多数打印机驱动程序包括一些众所周知的组件,如打印监视器,打印处理器等,这些组件在Windows驱动程序工具包中有详细记录http://msdn.microsoft.com/en-us/library/ff560885%28v=VS.85% 29.aspx.几年前我写了一个打印监视器.它在一个客户工作了很多年.所以我确切地知道我写的是什么.打印监视器不再是具有良好记录功能的DLL.大多数其他打印机组件也是如此.这些DLL将从后台处理程序加载和调用.如果您有一个现代的打印机驱动程序,它没有在内核模式下运行的组件.因此,可以加载大多数DLL,每个DLL都包含每个打印机驱动程序并调用相应的函数.
你有兴趣使用一个音乐会打印机驱动程序.所以首先要做的是检查这个驱动程序是如何实现的.如果您发现哪个组件可以完成您需要的工作,您可能会在您的过程中加载此DLL并生成所需的输出.您可以发布我可以下载此驱动程序的URL吗?
更新:我更多关于你的要求.在我看来,你可以采用打印机驱动程序开发人员建议的方式.如果驱动程序可以打印到本地端口FILE,则它可以在任何打印机端口中打印.因此,您可以从C:\ WinDDK\7600.16385.1\src\print\monitors\localmon给出端口监视器服务器驱动程序的src(另请参阅http://msdn.microsoft.com/en-us/library/ff556478%28v = VS.85%29.aspx,http://msdn.microsoft.com/en-us/library/ff549405%28v=VS.85%29.aspx和http://msdn.microsoft.com/en-us /library/ff563806%28v=VS.85%29.aspx).(我是一个Windows 32/64 DLL,而不是一个真正的驱动程序)并做了一些小修改.您可以将结果分发给应用程序,而不是将结果保存到文件中.它将100%没有任何技巧.如果你有一些问题需要了解localmon,我可以给你一些提示.这真的不复杂.您需要做的主要更改是修改localmon.c中的LcmStartDocPort LcmWritePort LcmReadPort LcmEndDocPort函数.一些简单的事情是将端口DLL与典型的DLL区分开来,它不是导出所有DLL的函数,而是只导出一个指向所有其他函数的指针.InitializePrintMonitor2
更新2:使用"本地端口"监视器的另一个提示.如果进入打印机配置,则选择"添加端口...",选择"本地端口"并单击"新端口...",您可以键入任何文件名,如"C:\ temp\my.bin".然后,通过打印机打印的所有内容都将打印在此文件中,无需任何用户迭代.名称可以是任何 win32文件名(也允许使用UNC名称或命名管道).通过这种方式,您无需使用DDK进行任何编程即可实现某些场景.
更新3:我从不同侧面查看了打印机驱动程序,再次在DDK中查看API.现在我想建议您选择最简单的方法,以及驱动程序制造商完全支持的方式.我建议如下:
使用所需的驱动程序安装打印机,并选择具有固定文件名的本地端口作为输出端口(请参阅更新2).我在这里将目标文件名命名为C:\ TEMP\Output.afp.因此,您会收到与推荐驱动程序制造商相同的情况.固定文件名是完全一样的FILE:端口.因此,如果您在C:\ TEMP目录中的Output.afp文件中打印到打印机.为了确保写作结束,您可以使用或/ 等于的函数.然后在文件的最后写入时间之后收到通知.这意味着在写入结束之后以及缓存被充分刷新之后.因此,文件Output.afp未锁定,您可以非常安全地读取结果.ReadDirectoryChangesWFindNextChangeNotificationFindFirstChangeNotificationdwNotifyFilterFILE_NOTIFY_CHANGE_LAST_WRITEFileClose
要打印简单文档,您可以使用WritePrinter函数(请参阅http://msdn.microsoft.com/en-us/library/dd162959%28VS.85%29.aspx并在文档中注释http://msdn.microsoft.com /en-us/library/dd145226%28VS.85%29.aspx).使用位图,颜色和不同字体编写复杂文件时,必须使用典型的GDI API,如Windows中的一样(参见http://msdn.microsoft.com/en-us/library/dd162865%28v=VS.85%29 .aspx).
这个解决方案看起来不像编写打印机驱动程序组件或打印机驱动程序的假脱机程序环境模拟那样非常壮观,但它可以正常工作,安全工作并将得到驱动程序制造商的全面支持.
(自从我做了这样的事情已经10年了,但我不认为整体概念已经发生了很大变化:)
您要做的是实现自定义打印处理器.打印处理器是一段代码,它接收打印机驱动程序生成的输出并将其传输到输出设备.打印处理器实现为常规用户模式DLL.您应该能够在Windows DDK中找到所需的一切,包括示例.
| 归档时间: |
|
| 查看次数: |
6180 次 |
| 最近记录: |