Public Class Printers ''' <summary> ''' Eingetragene Drucker ermitteln und an StringCollection zur ''' Ausgabe �bergeben ''' 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 ' Platform 1 1 2 2 2 2 ' Version.Major 4 4 4 5 5 5 ' Version.Minor 10 90 0 0 1 2
Vista/Longhorn 2 6 0
''' <summary> ''' Betriebsystem ermitteln ''' 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 ''' 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 ''' 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