Ist ein Drucker der Standarddrucker?

Veröffentlicht: 03. Aug 2001 | Aktualisiert: 13. Jun 2004

Von Mathias Schiffer

Das Printer-Objekt von Visual Basic liefert Ihnen keine Informationen darüber, welcher von mehreren Druckern auf einem System der Standarddrucker ist. Diese Information finden Sie je nach Windows-Version in der Registry oder in der Initialisierungsdatei WIN.INI im Windows-Verzeichnis.

Dieser Wert entspricht dabei einer kommaseparierten Liste des Druckernamens, des Druckertreibernamens und des Anschlussnamens. Da das Printer-Objekt selbst diese Angaben in den Eigenschaften DeviceName, DriverName und Port zur Verfügung stellt, ist ein Vergleich zwischen dem aktuellem Drucker und dem Standarddrucker nicht weiter kompliziert.

Statt sich je nach Windows-Version unterscheidend der Registry- und der INI-Funktionen zu bedienen, können Sie es sich hier einfach machen und die Funktion GetProfileString einsetzen – die eigentlich für die WIN.INI zuständig ist. Neuere Windows-Versionen leiten diese Anfrage jedoch bei Bedarf automatisch an die zugehörigen Registry-Einträge weiter, so dass eine Unterscheidung der Betriebssysteme aufgrund der unterschiedlichen Windows-Versionen entfallen kann.

So ergibt sich für die Abfrage, ob der aktuelle Drucker der Standarddrucker ist:

' Prototypisierung von GetProfileString: 
Private Declare Function GetProfileString _ 
  Lib "kernel32" Alias "GetProfileStringA" ( _ 
  ByVal lpAppName As String, _ 
  ByVal lpKeyName As String, _ 
  ByVal lpDefault As String, _ 
  ByVal lpReturnedString As String, _ 
  ByVal nSize As Long _ 
  ) As Long 
' Die Funktion IsDefaultPrinter ermittelt, ob der aktuelle Druker der Standarddrucker ist: 
Public Function IsDefaultPrinter() As Boolean 
Dim sDevice As String 
Dim lLen As Long 
  ' Infos über den Standarddrucker holen: 
  sDevice = Space$(1000) 
  lLen = Len(sDevice) 
  lLen = GetProfileString("windows", "device", "", sDevice, Len(sDevice)) 
  If lLen > 0 Then 
    sDevice = Left$(sDevice, lLen) 
  Else 
    Exit Function 
  End If 
  ' Aktuellen Drucker und Standarddrucker vergleichen: 
  With Printer 
    If LCase$(.DeviceName & "," & .DriverName & "," & .Port) = LCase$(sDevice) Then 
      IsDefaultPrinter = True 
    End If 
  End With 
End Function

Beispielprojekt