Drucker: Ist ein Drucker ein Farbdrucker?

Von Mathias Schiffer

Beispielprojekt herunterladen (25 kB, Format Visual Basic 5/6)

Die Frage, ob ein installierter Drucker ein Farbdrucker ist, lässt sich mit dem Printer-Objekt von Visual Basic nur indirekt und je nach verwendetem Druckertreiber fehleranfällig über die Eigenschaft ColorMode beantworten.

Zuverlässiger und auskunftsfreudiger ist die Abfrage über die API-Funktion GetDeviceCaps gemeinsam mit der Konstanten NUMCOLORS: Bei Übergabe der hDC-Eigenschaft des Printer-Objekts und der Konstanten liefert sie die Anzahl unterstützter Farben zurück. Bis zu mindestens 256 Farben liefert sie hierbei die Anzahl an Farben zurück – wobei Schwarz und Weiß als zwei Farben angesehen werden, so dass für einen Schwarzweiß-Drucker der Wert 2 angegeben wird. Liegt die Anzahl vom Drucker angebotener Farben höher als 256, reagiert die Funktion laut Dokumentation mit der Rückgabe von -1. Im Praxistest hat sich jedoch gezeigt, dass je nach Druckertreiber durchaus auch höhere Werte als 256 ausgegeben werden.

So lässt sich die Frage nach einem Farbdrucker auf Basis des Druckertreibers einfach beantworten:

' API-Deklarationen:
 
Private Const NUMCOLORS As Long = 24&

Private Declare Function GetDeviceCaps _
  Lib "gdi32" ( _
  ByVal hDC As Long, _
  ByVal nIndex As Long _
  ) As Long
 
 
Private Function IsColorPrinter() As Boolean
 
  With Printer
    IsColorPrinter = GetDeviceCaps(.hDC, NUMCOLORS) > 2 Or _
                     GetDeviceCaps(.hDC, NUMCOLORS) = -1
  End With
  
End Function

Beispielprojekt

Zu diesem MSDN Quickie können Sie ein Beispielprojekt herunterladen, das verschiedene Druckertipps aus dem MSDN Quickie in einer einfach anzuwendenden Klassenlösung vereint.