使用 Win32api 打印到打印机

Posted

技术标签:

【中文标题】使用 Win32api 打印到打印机【英文标题】:Using Win32api to print to printer 【发布时间】:2011-07-19 19:19:08 【问题描述】:

我正在尝试让我的 python 脚本通过 Win32api.ShellExectute,IE 将 CSV 文件打印到打印机

win32api.ShellExecute(0,"print","C:\Test.csv",None,".",0)

这是我的问题:当我将文件与 Open Office 关联时,它完全拒绝打印。在记事本中打印良好。在 Microsoft Excel 中打印良好。拒绝在 Open Office 中打印。

也没有错误消息。如果有人知道获取错误消息或某些东西的方法,至少我可以尝试处理它。我访问了 OpenOffice.org 的网站和他们的 wiki,他们的所有解决方案都涉及使用 UNO 模块的集成 python 宏脚本。我正在寻找从单独的应用程序调用打印。

【问题讨论】:

当您从 shell 本身执行此操作时会发生什么?我预测这也行不通。 @Adam,因为该示例声称可以在记事本和 Excel 中工作,所以我认为这只是一个错字。 当我尝试从 shell 执行它时,它显示“无法初始化设备 PRN” 【参考方案1】:

您依赖于为特定文件类型定义“打印”动词的 shell。其工作原理如下:

    shell 去除文件扩展名,在本例中为“.csv”。 Shell 在注册表中的 HKEY_CLASSES_ROOT 下查找扩展名以查找关联的文件类型。例如,在我的系统上,这是“Excel.CSV”。 在 HKEY_CLASSES_ROOT\filetype 下会有一个“shell”键,其下是支持的动词。 动词下的注册表项将包含有关如何运行命令以产生所需操作的详细信息。

所有这些注册表项都必须由安装程序放置在那里。关联文件类型时,您将更改第 2 步中的查找。

编辑:我没有说的是,只要您可以编辑注册表并提供适当的命令行,就没有什么可以阻止您更正特定文件类型中动词的省略.

【讨论】:

@eryksun,我从来不知道那些命令行查询 - 谢谢! 谢谢大家,我知道可能有一种方法可以编辑 shell 如何处理它,但我对使用注册表不太熟悉。不过,我确实有一个问题:例如,当我在 Excel.CSV/shell/print/command 下查看时,我看到了 excel 可执行文件的文件路径的一个条目,然后我看到了一个“命令”条目,但在我得到的值是:“w_1^VW!!!!!!!!!MKKSkEXCELFiles>tW~$4Q]c@II=l2xaTO5 /e” 我该如何破译这个?我期待一个可以在 ShellExecute() 中使用的命令列表,例如“打印”等。另外,我将如何将 .CSV 条目添加到 openoffice 注册表?

以上是关于使用 Win32api 打印到打印机的主要内容,如果未能解决你的问题,请参考以下文章

python调用打印机实现打印文档

Python怎样控制打印机打印PDF文档

C++ Win32api 从用户输入输出 Unicode

如何在VC++ Win32应用程序中鼠标光标位置打印句子?

巧用win32print来控制windows系统打印机并推送打印任务

如何在Windows上使用Python 3.3.2直接打印到打印机?