设置正确的打印机在MS Word我有以下自动化代码:通过自动化
lPrintSetup := fWordObject.Application.Dialogs.Item(wdDialogFilePrintSetup);
lPrintSetup.Printer := 'MyPrinter';
lPrintSetup.DoNotSetAsSysDefault := True;
lPrintSetup.Execute;
lPrintSetup := Null;
的Printer
物业给我一些问题,有时Execute
崩溃与EOleException(0x800A1460(错误代码5216):有打印机错误),因为一个错误的printername。
我通过EnumPrinters API调用获取了_PRINTER_INFO_2
记录中的所有打印机的打印机信息。如果给出_PRINTER_INFO_2
记录中的信息,我怎样才能为Word编写正确的printername?它至少与Windows 2000,Word 2000和Citrix一起工作。
一些背景资料:
我们的应用程序首先与自我构建的打印机名称充满了PRINTERNAME。这给Citrix客户端带来了问题,因此对于Citrix客户端,我们采用了_PRINTER_INFO_2.pPortName
并删除了客户端:#:部分。 这是为我们的大多数客户工作,但有时仍然显示打印机错误。
我至今尝试过(在Windows XP SP3,Word 2007中):
- 只取
_PRINTER_INFO_2.pPrinterName
。问题在于,当您有意修改printernames(将'PDFCreator'重命名为'MYPC上的HP DESKJET 520')时,后者会崩溃(同时在Word中选择此打印机)。 - 编写一个像这样的printername:
lPrintSetup.Printer := PRINTER_INFO_2.pPrinterName + ' on ' + PRINTER_INFO_2.pPortname
。似乎总是工作!但是,搜索结果显示'on'是本地化的,所以我不确定这是否会在非英文版Windows上运行。 编辑:并不总是工作:(
另一种解决方案我在网上找到:
当从Word阅读打印机名称有“的形式PRINTERNAME上Ne01:”,其中Ne01范围是从Ne00到Ne99:解决方案建议使用printername,并在从Ne00循环到Ne99时试着设置它:当.Execute没有崩溃时,你已经得到了正确的。我不是很喜欢这个'跟踪和错误'的方法
你不是说因为本地化的“on”,你不想这样做吗? – 2009-09-02 09:34:12