Druckertyp abfragen

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Benutzeravatar
Friedhelm
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 46
Registriert: Sa, 08. Apr 2006 17:20
Wohnort: Leverkusen
Kontaktdaten:

Re: Druckertyp abfragen

Beitrag von Friedhelm »

Die Frage ob es eine Möglichkeit gibt, festzustellen ob ein bestimmter Drucker ein Matrix-(Lineprinter) oder Laser-(pageprinter) ist hatte ich im Rahmen unsers XUG-Cologne -Treffen am Dienstag gestellt.

Manfred hatte diese Frage direkt aufgegriffen und ins Forum gestellt.

Der Grund dieser Frage war, programmtechnisch zu unterscheiden ob eine Druckausgabe direkt an den angeschlossenen Port (mit ESC-Sequenzen) oder über das Windows-Druckermanagement erfolgen kann. Der Direktdruck (über das Port) hat einen wesentlichen Vorteil für Druckausgaben mit Duchschreibsätzen, da sie wesentlich schneller erfolgen (keine Schriftartenersetzung etc).

Mein Lösungsansatz war, über die Windows API die Funktion GetPrinterA() (Winspool.drv) mit Level 2 entsprechende Parameter abzufragen

Code: Alles auswählen

BOOL GetPrinterA(
    HANDLE hPrinter,	// handle to printer of interest 
    DWORD Level,	              // version of printer info data structure 
    LPBYTE pPrinter,	              // pointer to array of bytes that receives printer info. structure 
    DWORD cbBuf,	              // size, in bytes, of array of bytes 
    LPDWORD pcbNeeded 	// pointer to variable with count of bytes retrieved (or required) 
   );

typedef struct _PRINTER_INFO_2 { // pri2  
    LPTSTR    pServerName; 
    LPTSTR    pPrinterName; 
    LPTSTR    pShareName; 
    LPTSTR    pPortName; 
    LPTSTR    pDriverName; 
    LPTSTR    pComment; 
    LPTSTR    pLocation; 
    LPDEVMODE pDevMode; 
    LPTSTR    pSepFile; 
    LPTSTR    pPrintProcessor; 
    LPTSTR    pDatatype; 
    LPTSTR    pParameters; 
    PSECURITY_DESCRIPTOR pSecurityDescriptor; 
    DWORD     Attributes; 
    DWORD     Priority; 
    DWORD     DefaultPriority; 
    DWORD     StartTime; 
    DWORD     UntilTime; 
    DWORD     Status; 
    DWORD     cJobs; 
    DWORD     AveragePPM; 
} PRINTER_INFO_2; 


Leider ergeben auch diese Informationen keine Auskunft über den angeschlossen Druckertyp.
Ich werde bei nächster Gelegenheit im MSDN Forum absetzen, vielleich hat dort jemand eine Idee.
Gruß Friedhelm
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Druckertyp abfragen

Beitrag von Koverhage »

Das sollte relativ einfach sein.
Einfach prüfen ob es einen Traktor gibt,
oder ob es ein Papierformat 12" bzw 11" gibt.
11" bzw 12" gibt es wohl nur bei Nadeldrucker.
Dateianhänge
traktor.png
traktor.png (14.41 KiB) 3365 mal betrachtet
Gruß
Klaus
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Re: Druckertyp abfragen

Beitrag von Lewi »

Ich habe früher das Problem dahingehend gelöst, dass ich das "Device" zum Drucker abgefragt habe. Nadeldrucker wurden üblicher Weise an die parallele Schnittstelle angeschlossen, Laser und Tintendrucker über USB. Seit einigen Jahren können Nadeldrucker nunmher auch über USB abgeschlossen werden.

Das Windows-API stellt keine Standard-Schnittstelle zur Abfrage des Druckertyps zur Verfügung. Heute löse ich das Problem, in dem ich in Anwendungen Drucker zu bestimmten Arbeitsplätzen und/oder Formularen zuordne.
Antworten