Rubrik: Drucker | VB-Versionen: VB4, VB5, VB6 | 14.06.04 |
Standard-Drucker systemweit festlegen (WMI) Diesmal zeigen wir Ihnen, wie man per WMI den Standard-Drucker systemweit festlegen kann. | ||
Autor: Gerhard Kuklau | Bewertung: | Views: 33.260 |
ohne Homepage | System: WinXP, Win8, Win10, Win11 | Beispielprojekt auf CD |
In einem unserer Extratipps haben wir Ihnen gezeigt, wie man einen bestimmten Drucker systemweit als neuen Standard-Drucker festlegen kann. Hierzu bedarf es allerlei API-Funktionen:
Neuen Standard-Drucker festlegen
Wenn Sie als Betriebssystem Windows XP oder Windows Server 2003 verwenden, lässt sich mit Hilfe des mächtigen WMI-Objekts der Standard-Drucker jedoch sehr viel einfacher und schneller festlegen, wie nachfolgender Code zeigt.
(Update 26.08.06: Sie können mit diesem Beispiel auch Netzwerkdrucker als Standard-Drucker festlegen!)
' Standard-Drucker systemweit festlegen Public Function fSet_DefaultPrinter( _ ByVal sPrinterName As String) As Boolean Dim sComputerName As String Dim oWMI As Object Dim oPrinter As Object Dim colInstalledPrinters As Variant ' Fehlerbehandlung aktivieren On Error GoTo ErrHandler ' lokaler Rechner sComputerName = "." ' Druckernamen bei Netzwerkdruckern ggf. modifizieren ' =================================================== ' da der Backslash in der Registry doppelt gesetzt werden muß ' (Unterscheidung zu Pfadangaben innerhalb der Registry!), ' müssen wir hier den Druckernamen anpassen, um den Drucker ' zu "finden" sPrinterName = Replace(sPrinterName, "\", "\\") ' WMI-Objekt erstellen Set oWMI = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & _ sComputerName & "\root\cimv2") ' WMI-Abfrage: alle Drucker mit dem ' einer bestimmten Bezeichnung selektieren Set colInstalledPrinters = oWMI.ExecQuery _ ("SELECT * FROM Win32_Printer WHERE Name = '" & sPrinterName & "'") ' Jetzt den Drucker als Standard-Drucker festlegen For Each oPrinter In colInstalledPrinters oPrinter.SetDefaultPrinter Next fSet_DefaultPrinter = True Exit Function ErrHandler: fSet_DefaultPrinter = False End Function
Die Funktion fSet_DefaultPrinter erwartet als Parameter die Bezeichnung des neuen Standard-Druckers.
Beispiel:
Es sollen alle verfügbaren Drucker in einer ComboBox angezeigt werden. Per CommandButton soll der aktuell ausgewählte Drucker dann systemweit als neuer Standard-Drucker festgelegt werden.
Private Sub Form_Load() ' ComboBox: alle Drucker auflisten Dim oPrinter As Variant For Each oPrinter In Printers Combo1.AddItem oPrinter.DeviceName Next ShowDefaultPrinter End Sub
Private Sub ShowDefaultPrinter() Dim i As Long ' Default-Printer in der Titelzeile der Form anzeigen Me.Caption = Printer.DeviceName ' In der Combo-Box auf den Default-Printer positionieren For i = 0 To Combo1.ListCount If Combo1.List(i) = Printer.DeviceName Then Combo1.ListIndex = i Exit For End If Next i End Sub
Private Sub Command1_Click() ' aktuell ausgewählten Drucker systemweit als ' neuen Standard-Drucker festlegen If fSet_DefaultPrinter(Combo1.Text) Then ShowDefaultPrinter MsgBox Combo1.Text & " ist der neue Standard-Drucker!" Else MsgBox "Konnte " & Combo1.Text & " nicht als " & _ "neuen Standard-Drucker festlegen." End If End Sub