Mit den nachfolgenden Klassen lassen sich alle im System installierten Drucker ermitteln, sowie ein bestimmter Drucker systemweit als neuer Standard-Drucker setzen. Das Ganze funktioniert aber erst ab Windows XP, so dass eine enstprechende Betriebssystem-Abfrage erfolgen sollte, was über die OS-Klasse erledigt werden kann. Für den Zugriff auf die WMI-Funktionen von Windows benötigen Sie in Ihrem Projekt zunächst einen Verweis auf das System.Management-Objekt (Projekt - Eigenschaften - Verweise). Erstellen Sie ein neues Projekt, platzieren auf die Form ein ListBox-Control, sowie zwei Schaltflächen (Button1 und Button2) über die die Liste der verfügbaren Drucker geladen bzw. ein neuer Drucker systemweit als Standard-Drucker festgelegt werden kann. Fügen Sie nun nachfolgenden Code in den Codeteil der Form1 ein: ' Benötigte zusätzliche Verweise Imports System.Management ' WMI Imports System.Collections.Specialized ' StringCollection Imports System.Environment ' OS Public Class Form1 Die Klasse Printers 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 Die Klasse OS 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 Die Klasse SetPrinter 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 Anzeigen aller verfügbaren Drucker ' 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 Neuen Drucker systemweit festlegen 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 Dieser Tipp wurde bereits 26.969 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |