ich den folgenden Automatisierungscode haben:Einstellung richtigen Drucker in MS Word durch Automatisierung
lPrintSetup := fWordObject.Application.Dialogs.Item(wdDialogFilePrintSetup);
lPrintSetup.Printer := 'MyPrinter';
lPrintSetup.DoNotSetAsSysDefault := True;
lPrintSetup.Execute;
lPrintSetup := Null;
Die Printer
Eigenschaft wird mir einige Probleme geben, manchmal Execute
stürzt mit einem EOleException (0x800A1460 (Fehlercode 5216): Es wird ein Druckerfehler) wegen eines falschen Druckernamens.
Ich habe Druckerinformationen aller Drucker in einem _PRINTER_INFO_2
Datensatz, den ich von einem EnumPrinters API-Aufruf erhalten habe. Wie kann ich den richtigen Druckernamen für Word anhand der Informationen in einem _PRINTER_INFO_2
Datensatz erstellen? Es funktioniert mit mindestens Windows 2000, Word 2000 und Citrix.
Einige Informationen Hintergrund:
Unsere Anwendung gefüllt zuerst die printer mit einem selbst konstruierten printer. Dies führte zu Problemen mit den Citrix Clients, so dass wir für Citrix Clients die _PRINTER_INFO_2.pPortName
und den Client: #: part löschten. Dies funktioniert für die Mehrheit unserer Kunden, aber manchmal zeigt sich immer noch der Druckerfehler.
Was ich bisher versucht (unter Windows XP SP3, Word 2007):
- Nehmen Sie einfach die
_PRINTER_INFO_2.pPrinterName
. Problem ist, dass wenn Sie printernames absichtlich ändern (Umbenennen von "PDFCreator" zu "HP DESKJET 520 auf MYPC"), stürzt es auf letzterem ab (während der Auswahl dieses Druckers in Word funktioniert). - Erstellen eines Druckernamens wie folgt:
lPrintSetup.Printer := PRINTER_INFO_2.pPrinterName + ' on ' + PRINTER_INFO_2.pPortname
. Scheint immer zu funktionieren! Aber Googlen hat gezeigt, dass 'on' lokalisiert ist, also bin ich mir nicht sicher, ob das auf nicht-englischen Windows-Versionen funktionieren wird. Edit: nicht immer funktioniert :(
Eine andere Lösung, die ich im Web gefunden:
Wenn die Drucker aus Word liest es hat die Form von „printer auf NE01:“, wo NE01 reichte wird von Ne00: bis Ne99: Die Lösung schlug vor, den Druckernamen zu nehmen und einfach zu versuchen, ihn von Ne00 auf Ne99 zu setzen: Wenn .Execute nicht abstürzt, hast du den richtigen von dieser "Spur und Fehler" -Methode.
Hast du nicht gesagt, dass du das wegen des lokalisierten "An" nicht machen willst? –
Ich habe dies auf einer niederländischen Windows Vista Business Edition getestet und "on" wurde nicht lokalisiert, also habe ich meine Chancen genutzt. Ich habe den neuen Code in einem Versuch verpackt, außer wenn es fehlschlägt, wende ich mich wieder unserer alten Methode zu, einen Drucker zuzuweisen. –