Drucker-Info
Hier war das Problem, daß ich in einem Programm von
zwei verschiedenen Papierschächten drucken sollte und dazu die beim Drucker
installierten/unterstützten Schachtnummern wissen wollte.
Zusätzlich kam dazu, daß dieses Programm auch noch mit unterschiedlichen
Druckern funktionieren sollte. Also kam mir das Rezept 219: ... alles
über den Drucker erfahren
aus dem Buch Doberenz, Walter u Kowalsky,
Thomas: Borland Delphi 4 - Kochbuch
aus dem Hanser-Verlag (München,
Wien 1998) gerade recht. Doch wie so üblich reichten die so gewonnenen
Informationen für meine Zwecke nicht aus, zumal ich bei einem anderen
Projekt (Drucken von Farbflächen nebst barcodes auf einem
Farb-Tintenstrahl-Labeldrucker) Schwierigkeiten mit der Programmierung
hatte, und feststellen mußte, ob ich einen Programmierfehler gemacht hatte,
oder der Drucker-Treiber die verwendeten GDI-Fähigkeiten gar nicht besaß,
so daß ich das Programm mit Informationen aus dem MSDN erweiterte
und später etwas komfortabler gestaltete.
Druck-Server (JetDirect) Simulator
Vor einiger Zeit wollte ich ein neues Label-Design in der zugehörigen Druckersprache auf meinem Test-Labeldrucker ausprobieren. Doch der Drucker druckte direkt nach dem Einschalten einfach nur wirre Zeichen. Da dies sich auch nach mehrfachem Aus- und Einshalten bzw. Druckpuffer leeren nicht änderte und kein IP-Adressen-Konflikt vorlag, war mir klar, daß in irgeneinem Druck-Spooler noch Druckaufträge für diesen Drucker (bzw. einem anderen Drucker der früher die gleiche IP-Adresse hatte) in einer anderen Druckersprache hingen. Natürlich hätte ich mir nun von den Netzwerk-Administratoren für den Test-Drucker eine andere IP-Adresse geben lassen können, doch dies hätte das andere Problem (daß ein Druckspooler unser Netzwerk mit Druck-Versuchen "verseucht") nicht gelöst. Also habe ich mir (mit Hilfe eines Code-Schnipsels, den ich in ähnlicher Art häufiger auf stackoverflow gefunden habe) ein Programm geschrieben, daß einen Druck-Server auf dem JetDirect Port 9001 (und damit den Label-Printer) simuliert und als Daten-Senke diente. Auf diesem Weg konnte ich sowohl die Druck-Aufträge eliminieren als auch (mittel Wireshark) ohne extrem teurer Spezial-Netzwerk-Karte die Quelle (ein lokaler Druck-Spooler auf einem Notebook) identifizieren. Nachdem ich das Tool nun einmal programmiert hatte, habe ich es natürlich auch für andere Problemfälle (z.B. fehlerhafte Unix2DOS Konvertierungen) um eine Ausgabe/Dump-Funktion erweitert.