如何使用 Delphi 使用打印机名称获取 PrinterIndex?

Posted

技术标签:

【中文标题】如何使用 Delphi 使用打印机名称获取 PrinterIndex?【英文标题】:How do I get the PrinterIndex using the Printer Name using Delphi? 【发布时间】:2021-01-25 16:48:32 【问题描述】:

我需要为三种不同的打印功能、标签、收据和“标准”(例如 A4)中的每一种分配一台打印机。我已经使用listbox1.assign(printer.printers) 确定了所有可用的打印机,但似乎没有办法使用它来建立打印机的PrinterIndex。我想将打印机名称和索引值存储在一个文件中,这样我就可以使用printer.printerindex 将打印机分配给每种类型的打印作业,而无需要求用户使用对话框选择打印机。

我是不是走错了路,如果是这样,有人可以告诉我正确的方法吗?我以前不必直接使用printers 单元。

【问题讨论】:

存储打印机索引不是一个好主意,因为如果用户添加/删除/重新安装打印机,索引可能会发生变化。 我想我可以控制它,因为除了我之外没有人会添加/删除打印机驱动程序。是否可以直接使用打印机名称? 你可能会在那里找到一个很好的答案:***.com/questions/20277061/… 感谢 fpiette。我一定会试试的,没有vcl! 我还想到每次使用打印机名称都可以检查索引。这行得通,非常感谢。如果您愿意设置一个,我们很乐意接受您的回答。 【参考方案1】:

将打印机名称保存在文件中,而不是索引中。

当您重新启动程序并读回打印机名称时。然后循环遍历所有打印机以查找保存名称的打印机(它可能已被删除或重命名)并使用该打印机。

【讨论】:

不用循环,直接用Printer.printers.IndexOf即可。 在 Windows 终端服务器的情况下,必须从打印机名称中删除会话号!在这种情况下,循环是必需的。

以上是关于如何使用 Delphi 使用打印机名称获取 PrinterIndex?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 打印使用文件重写功能

2008 64位标准服务器上的Delphi Win32服务“打印机选择无效”错误

如何在 Windows 服务中获取所有打印机名称?

在Delphi 中如何调用printerindex指定打印打印?

delphi 如何获取文件的大小和类型

如何获取窗体中组件的句柄