![]() |
Drucker: Optionen Ausgabefach / Heften setzen
Moin,
ich möchte die genannten Einstellungen beim Druck mitgeben. Über SetPrinter und DEVMODE ist das meiner Meinung nach nicht möglich. Das Problem scheint zu sein, dass es sich bei diesen Optionen um Geräte spezifische Einstellungen handelt. Irgendwelche Ideen? Grüße, Jan |
Re: Drucker: Optionen Ausgabefach / Heften setzen
|
Re: Drucker: Optionen Ausgabefach / Heften setzen
Jep das Problem hab ich auch, nur muss ich nicht heften, sondern in Mailboxen einsortieren ;)
Der Link im Post obendrüber hat irgendwie ein total anderes Thema (Wechsel des Schachtes während des Druckens) |
Re: Drucker: Optionen Ausgabefach / Heften setzen
Moin,
ich hatte ganz vergessen, meine inzwischen gefundene Lösung hier zu posten. Im Registry-Pfad "HKEY_CURRENT_USER\Printers\DevModePerUser\*DRUCKE RNAME*" werden die Druckeinstellungen des jeweiligen Druckers gespeichert. Um die Einstellungen zu verändern, sind diese Schritte sinnvoll: 1. Auslesen des Wertes 2. Ändern >einer< Einstellung über den Dialog "Druckeinstellungen" 3. Erneutes Auslesen des Wertes und Ermittlung der veränderten Bytes Hinweis: Es gibt im angegebenen Registry-Pfad nur einen Eintrag, wenn der Dialog "Druckeinstellungen" für den jeweiligen Drucker mindestens 1mal aufgerufen und mit OK bestätigt wurde. Die folgenden Prozeduren setzen ein vorhandenes StringGrid mit dem Namen "sg1" voraus.
Delphi-Quellcode:
// Einstellungen auslesen procedure TForm1.Button3Click(Sender: TObject); var r: TRegistry; i, iDataSize: Integer; tDM: TByteArray; PrinterName: string; begin PrinterName := 'TESTDRUCKER'; // ANPASSEN !!! r := TRegistry.Create; r.rootkey:=HKEY_CURRENT_USER; r.OpenKey('Printers\DevModePerUser', false); iDataSize := r.GetDataSize(PrinterName); r.ReadBinaryData(PrinterName, tDM, iDataSize); r.CloseKey; r.Free; for i := 0 to iDataSize - 1 do begin sg1.Row := i; sg1.Rows[i].Strings[0] := IntToStr(i); sg1.Rows[i].Strings[1] := IntToSTr(tDM[i]); end; end; // Einstellung setzen procedure TForm1.Button4Click(Sender: TObject); var r: TRegistry; i, j, iDataSize: Integer; tDM: TByteArray; change: boolean; PrinterName: string; begin PrinterName := 'TESTDRUCKER'; // ANPASSEN !!! r := TRegistry.Create; r.rootkey:=HKEY_CURRENT_USER; r.OpenKey('Printers\DevModePerUser', false); iDataSize := r.GetDataSize(PrinterName); r.ReadBinaryData(PrinterName, tDM, iDataSize); tDM[1234] := 56; // ANPASSEN !!! r.WriteBinaryData(PrinterName, tDM, iDataSize); r.CloseKey; r.Free; end; Grüße, Jan |
Re: Drucker: Optionen Ausgabefach / Heften setzen
Hallo,
woher hast du denn die Information wo und wie welcher Parameter zu setzen ist? Hast du das mit try and error rausgefunden? Ist das Druckerspezifisch verschieden? Ich würde mich nicht trauen einfach solche Änderungen in die registry zu schreiben. Rainer |
Re: Drucker: Optionen Ausgabefach / Heften setzen
Der Schlüssel DevModePerUser wird wohl nur bei lokalen Druckern verwendet. Bei Netzwerkdruckern scheint der Schlüssel Connections Verwendung zu finden. Man muss also erstmal den gewünschten Drucker suchen gehen.
Theoretisch müsste das doch der gleiche Bytestrom sein, den man auch über die API bekommt?! EDIT: So, getestet und für gut befunden ;) Allerdings muss man ein bisschen Aufpassen, wir man das ganze in der GUI macht, da die Byteänderungen ja nur bei diesem spezifischen Druckertreiber funktionieren. Andere Treiber könnte man damit ins Nirvana befördern. |
Re: Drucker: Optionen Ausgabefach / Heften setzen
Keine Frage, Vorsicht ist geboten. Aber man könnte z.B. vorher die Größe der DevMode prüfen. Ich halte es für sehr unwahrscheinlich, dass zwei Treiber dieselbe Datengröße produzieren.
Grüße, Jan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz