You are on page 1of 4

Public Class Printers

''' <summary>
''' Eingetragene Drucker ermitteln und an StringCollection zur
''' Ausgabe �bergeben
''' </summary>
Public Shared Function GetPrinters() As StringCollection
'Be�etigte Variablen deklarieren
Dim sc As StringCollection = New StringCollection()
Dim scope As String = "ROOT\CIMV2"
Dim query As String = "Select * from Win32_Printer"

Dim Printers As New ManagementObjectSearcher(scope, query)

' Schleife durchlaufen und ermittelte Drucker an...


' StringCollection �bergeben
For Each Printer As ManagementObject In Printers.Get()
Dim PrinterDescription As String = _
DirectCast(Printer.GetPropertyValue("Name"), String)
sc.Add(PrinterDescription)
Next
Return sc
End Function
End Class
Public Class OS
' Win98 WinMe WinNT Win2K WinXP Server2003 Vista/Longhorn
' Platform 1 1 2 2 2 2 2
' Version.Major 4 4 4 5 5 5 6
' Version.Minor 10 90 0 0 1 2 0

''' <summary>
''' Betriebsystem ermitteln
''' </summary>
Public Shared Function IsWindowsXPOrHigher() As Boolean
If OSVersion.Platform <> PlatformID.Win32NT OrElse _
OSVersion.Version < New Version(5, 1) Then
' Stimmt das Ergebnis mit dem Vergleich ueberein
' wird True zurueckgegeben...
Return False
Else
' ... sonst False
Return True
End If
End Function
End Class
Public Class SetPrinter
''' <summary>
''' Neuen Standard-Drucker systemweit setzen
''' </summary>
Public Shared Function ChangePrinter(ByVal PrinterName As String) As Boolean
' Ben�tigte Variablen
Dim scope As String = "ROOT\CIMV2"
Dim query As String = "Select * from Win32_Printer"
Const DefaultPrinter As String = "SetDefaultPrinter"
Const ReturnValue As String = "ReturnValue"

' Fehler�berwachung einschalten


Try
Dim Printers As New ManagementObjectSearcher(scope, query)
For Each Printer As ManagementObject In Printers.Get()
Dim PrinterDescription As String = _
DirectCast(Printer.GetPropertyValue("Name"), String)
' Vergleichsvariable deklarieren und initialisieren
Dim Compared As Integer = String.Compare( _
PrinterDescription, PrinterName, True)
' �bergebenen Drucker mit vorhandenen Druckern vergleichen.
' Stimmt der �bergebene Drucker mit dem Vergleich �berein
' wird der �bergebene Drucker...
If Compared = 0 Then
' ... als Standarddrucker systemweit gesetzt
Dim mbo As ManagementBaseObject = _
Printer.InvokeMethod(DefaultPrinter, Nothing, Nothing)
' Ist das R�ckgabeergebnis = 0 gibt die Funktion...
If CType(mbo.Properties(ReturnValue).Value, Int32) = 0 Then
' True zurueck
Return True
End If
End If
Next
Catch ex As Exception
' Eventuell auftretenden Fehler abfangen
' Fehlermeldung ausgeben
MessageBox.Show(ex.Message.ToString(), "Info")
End Try
Return False
End Function

''' <summary>
''' Ausgabe eines Hinweises ob der Vorgang erfolgreich war
''' </summary>
Public Shared Sub OutPutMessage(ByVal State As Boolean)
Dim sMsg As String = ""
Select Case State
Case True
sMsg = "Der ausgew�hlte Drucker wurde gesetzt."
Case Else
sMsg = "Der ausgew�hlte Drucker konnte nicht gesetzt werden."
End Select
MessageBox.Show(sMsg, "Info")
End Sub
End Class

' alle verf�gbaren Drucker anzeigen


Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

' Button deaktivieren


Button1.Enabled = False

' Fehler�berwachung einschalten


Try
' Sanduhr einblenden
Me.Cursor = Cursors.WaitCursor

' StringCollection deklarieren und initialisieren


Dim sc As StringCollection = Printers.GetPrinters()
' Enth�lt die StringCollection Daten dann...
If sc IsNot Nothing Then
' ... StringCollection in einer Schleife durchlaufen...
For Each Printer As String In Printers.GetPrinters()
' und die Eintr�ge an die ListBox �bergeben
ListBox1.Items.Add(Printer)
Next
' Zum Testen eines nicht vorhandenen Drucker...
ListBox1.Items.Add("(Fehler Drucker - zum Testen)")
Else
' Enth�lt die StringCollection keine Daten, Hinweis anzeigen
Me.Cursor = Cursors.Default
MessageBox.Show("Es konnten keine Drucker ermittelt werden.", "Info")
End If
Catch ex As Exception
' Eventuell auftretenden Fehler abfangen und Hinweis anzeigen
Me.Cursor = Cursors.Default
MessageBox.Show(ex.Message.ToString(), "Info")
End Try

' Standard-Mauszeiger wiederherstellen


Me.Cursor = Cursors.Default

' Button wieder aktivieren


Button1.Enabled = True
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _


ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

' Button f�r "Standard-Drucker setzen" aktivieren/deaktivieren


Button2.Enabled = (ListBox1.SelectedIndex >= 0)
End Sub

' Ausgew�hlten Drucker systemweit als neuen Standard-Drucker setzen


Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click

' Fehlerueberwachung einschalten


Try
' Dieses Beispiel l�uft ab Windows XP. Daher wird zun�chst
' das verwendete Betriebssystem gepr�ft
If Not OS.IsWindowsXPOrHigher Then
MessageBox.Show("Das Beispiel wird erst ab Windows XP unterst�tzt!",
"Info")
Exit Sub
Else
' ChangePrinter mit neuem Drucker aufrufen...
Dim bResult As Boolean = SetPrinter.ChangePrinter( _
Me.ListBox1.SelectedItem.ToString())
' ... und eine Meldung �ber den Status des Vorgangs ausgegeben
SetPrinter.OutPutMessage(bResult)
End If
Catch ex As Exception
' Eventuell auftretenden Fehler abfangen und Hinweis anzeigen
MessageBox.Show(ex.Message.ToString(), "Info")
End Try
End Sub
End Class