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.