vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: System/Windows   |   VB-Versionen: VB2005, VB200811.04.08
Umgebungsvariablen ermitteln

Mit dieser Klasse werden die System-Umgebungsvariablen ermittelt und an eine HashTable übergeben. Das Beispiel zeigt zudem die Anzeige der Variablen in einer mehrspaltigen ListBox.

Autor:   Heinz PrelleBewertung:  Views:  12.084 
www.visual-basic5.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Mit nachfolgender Klasse lassen sich alle System-Umgebungsvariablen ermitteln und an ein HashTable-Objekt übergeben:

Public Class EnvironmentVariables
  ''' <summary>
  ''' Umgebungsvariablen ermitteln und an HashTable uebergeben
  ''' </summary>
  Public Shared Function EnumEnvironmentVariables() As Hashtable
    ' HashTable deklarieren / initialisieren
    Dim ht As Hashtable = New Hashtable()
    ' Fehlerueberwachung einschalten
    Try
      ' Variable zur Auflistung deklarieren und mit Namen und Werten 
      ' der Umgebungsvariablen initialiseren
      Dim Variables As IDictionary = System.Environment.GetEnvironmentVariables()
      ' Interface ICollection deklarieren
      Dim Keys As ICollection = Variables.Keys
      ' ICollection in eine Schleife durchlaufen und...
      For Each items As String In Keys
        ' ... Namen und Werte an HashTable uebergeben
        ht.Add(items, Variables(items))
      Next
      ' Eventuell auftretenden Fehler abfangen
    Catch ex As Exception
      ' Fehlermeldung ausgeben
      MessageBox.Show(ex.Message.ToString(), "Info")
    End Try
    ' HashTable zurueckgeben
    Return ht
  End Function
End Class

Beispiel:
Im nachfolgenden Beispiel sollen alle Umgebungsvariablen in einer mehrspaltigen ListBox angezeigt werden. Hierzu benötigen wir neben obiger Klasse noch nachfolgenden Code. Platzieren Sie aber bitte zunächst ein ListBox-Control, sowie einen Button auf die Form.

Public Class Form1
  Public Class EnvironmentVariables
    ' hier bitte Code von oben einfügen
  End Class
  ''' <summary>
  ''' Die Api Funktion "SendMessage" wird benoetigt,
  ''' um den Benutzerdefinierten Tab-Stop zu setzen
  ''' </summary>
  Public Class WinApi
    <System.Runtime.InteropServices.DllImport("user32.dll")> _
    Public Shared Sub SendMessage( _
      ByVal hWnd As IntPtr, _
      ByVal uMsg As Int32, _
      ByVal wParam As Int32, _
      ByRef lParam As Int32)
    End Sub
 
    ''' <summary>
    ''' Benoetigte Variable fuer SendMessage
    ''' </summary>
    Public Const LB_SETTABSTOPS As Int32 = &H192
  End Class
  ''' <summary>
  ''' Konstante Laenge des Tab-Stops
  ''' </summary>
  Const TabLength As Integer = 120
 
  ''' <summary>
  ''' Tabulator
  ''' </summary>
  Private [Tab] As Char = Convert.ToChar(9)
  ''' <summary>
  ''' Tab-Stop setzen. Erwartet eine ListBox als Uebergabeparameter
  ''' </summary>
  Private Sub ListBox_InitTabStops(ByRef lb As System.Windows.Forms.ListBox)
    If (Not lb Is Nothing) Then
      Dim cntTabs() As Integer = {TabLength}
      Call WinApi.SendMessage(lb.Handle, WinApi.LB_SETTABSTOPS, cntTabs.Length, cntTabs(0))
    Else
      Throw New Exception("Tab-Stop's konnten nicht initialisiert werden.")
    End If
  End Sub
  ''' <summary>
  ''' Inhalt der HashTable in ListBox ausgeben
  ''' </summary>
  ''' <param name="ht">Die mit den Umgebungsvariablen initialisierte HashTable</param>
  ''' <param name="lb">ListBox zur Ausgabe</param>
  Private Sub PopulateList(ByVal ht As Hashtable, ByVal lb As ListBox)
    ' Elemente auflisten
    Dim Enumerator As IDictionaryEnumerator = ht.GetEnumerator()
    ' Der Enumerator wird auf das naechste Element der Auflistung gesetzt
    While Enumerator.MoveNext()
      With Enumerator
        ' Key + Value Eintraege an ListBox uebergeben
        lb.Items.Add(.Key.ToString() & [Tab] & .Value.ToString())
      End With
    End While
  End Sub
  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
 
    With Me
      ' Form zentrieren
      .CenterToScreen()
      ' Tab-Stop setzen
      .ListBox_InitTabStops(ListBox1)
    End With
  End Sub
  Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
 
    ' HashTable deklarieren / initialisieren
    Dim ht As Hashtable = New Hashtable()
    ' Funktionsuebergabe an HashTable
    ht = EnvironmentVariables.EnumEnvironmentVariables()
    ' Enhaelt die HashTable Werte dann...
    If ht IsNot Nothing Then
      With Me
        ' Befinden sich Daten in der ListBox wird diese gelehrt
        If .ListBox1.Items.Count > 0 Then .ListBox1.Items.Clear()
        ' Ausgabe des HashTable Inhalts 
        .PopulateList(ht, .ListBox1)
      End With
    Else
      ' ... sonst wird eine Fehlermeldung ausgeben
      Throw New Exception("HashTable enthaelt keine auswertbaren Daten")
    End If
  End Sub
  ''' <summary>
  ''' Auf Maus-Click Eintraege ausgeben
  ''' </summary>
  Private Sub ListBox1_MouseDown(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
 
    ' Wurde eine Eintrag markiert?...
    If Me.ListBox1.SelectedIndex > -1 Then
      ' Fehlerueberwachung einschalten
      Try
        ' Zeile - Tabulator getrennt splitten
        Dim Items() As String = Me.ListBox1.SelectedItem.ToString().Split([Tab])
        ' Auswertung des linken und des rechten Maus-Buttons
        Select Case e.Button
          ' Bei einem Links-Klick wird das Array-Element 
          ' mit dem Index 0 angezeigt
          Case Windows.Forms.MouseButtons.Left
            MessageBox.Show(Items(0), "Info")
            ' Bei einem Rechts-Klick wird das Array-Element 
            ' mit dem Index 1 angezeigt
          Case Windows.Forms.MouseButtons.Right
            MessageBox.Show(Items(1), "Info")
        End Select
        ' Eventuell auftretenden Fehler abfangen
      Catch ex As Exception
        ' Fehlermeldung ausgeben
        MessageBox.Show(ex.Message.ToString(), "Info")
      End Try
    Else
      ' ... Wurde kein Eintrag markiert Hinweis anzeigen
      MessageBox.Show("Es wurde kein Eintrag ausgewaehlt.", "Info")
    End If
  End Sub
End Class



Anzeige

Kauftipp Unser Dauerbrenner!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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


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.