VBA Tipp: Feststellen, ob ein Drucker eingeschaltet ist

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte feststellen, ob ein an meinem Computer angeschlossener Drucker eingeschaltet ist oder nicht.

Lösung

Das geht mit folgender Funktion, die in einem allgemeinen (globalen) Modul gespeichert wird. Die Funktion verwendet die WMI (Windows Management Instrumentation).

Public Function IstDruckerEingeschaltet(ByVal Druckername As String) As Boolean
 
 ' Late Binding: Kein Verweis auf "Microsoft WMI Scripting V1.2 Library" notwendig
 ' Quelle: http://www.dbwiki.net/
 
 Dim objWMISrvEx  As Object    ' WbemScripting.SWbemServicesEx
 Dim objWMIObjEx  As Object    ' WbemScripting.SWbemObjectEx
 Dim objWMIProp   As Object    ' WbemScripting.SWbemProperty
 
 Set objWMISrvEx = GetObject("winmgmts:\\.\root\CIMV2")
 Set objWMIObjEx = objWMISrvEx.Get("Win32_Printer='" & Druckername & "'")
 Set objWMIProp = objWMIObjEx.Properties_("WorkOffline")
 
 IstDruckerEingeschaltet = Not objWMIProp.Value
 
 Set objWMIProp = Nothing
 Set objWMIObjEx = Nothing
 Set objWMISrvEx = Nothing
 
End Function

Aufruf

Feststellen, ob ein Drucker eingeschaltet ist:

 Dim strDruckername  As String
 
 strDruckername = "EPSON Stylus 12345"
 
 If IstDruckerEingeschaltet(strDruckername) Then
   MsgBox "Der Drucker '" & strDruckername & "' ist eingeschaltet."
 Else
   MsgBox "Der Drucker '" & strDruckername & "' ist nicht eingeschaltet."
 End If

Bei Bedarf:
Die Namen aller Drucker auflisten, die beim Öffnen der Access-Datenbank installiert waren:

 Dim prt As Printer
 
 For Each prt In Application.Printers
   Debug.Print prt.DeviceName
 Next prt

Wikilinks

Weblinks