Get and set a new printer(VB.NET)
Version: VB 2005 
Compatibility: VB 2005 
Category: Miscellaneous 
Get and set a new printer.
Declarations:
none
Code:
Public Class Printers
    ''' 
    ''' 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  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
 
    ''' 
    ''' 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
    ''' 
    ''' 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
 
    ''' 
    ''' 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


0 comments:
Post a Comment