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

https://www.vbarchiv.net
Rubrik: System/Windows · Computer/Benutzer/Ländereinstellungen   |   VB-Versionen: VB624.08.07
Alle im System eingerichteten Benutzer ermitteln

Dieser Tipp verrät, wie man alle im System eingerichteten Benutzernamen ermitteln kann.

Autor:   Dieter OtterBewertung:  Views:  9.908 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Mit nachfolgendem Tipp lassen sich alle im System eingerichteten Benutzer ermitteln. Die Funktion EnumUsers gibt die Benutzernamen hierbei als String-Array zurück.

Fügen Sie nachfolgenden Code am besten in ein Modul:

Option Explicit
 
' benötigte API-Deklarationen
Private Declare Function NetApiBufferFree Lib "Netapi32.dll" ( _
  ByVal lpBuffer As Long) As Long
 
Private Declare Function NetUserEnum Lib "Netapi32.dll" ( _
  ServerName As Byte, _
  ByVal level As Long, _
  ByVal filter As Long, _
  bufptr As Long, _
  ByVal prefmaxlen As Long, _
  entriesread As Long, _
  totalentries As Long, _
  resume_handle As Long) As Long
 
Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  Destination As Any, _
  Source As Any, _
  ByVal Length As Long)
 
Private Declare Function lstrlen Lib "kernel32" _
  Alias "lstrlenA" ( _
  ByVal lpString As String) As Long
Public Function EnumUsers( _
  Optional ByVal sComputer As String = "") As Variant
 
  ' alle im System eingerichteten Usern ermitteln
  ' Rückgabe als String-Array
 
  Dim bServer() As Byte
  Dim nUsers() As Long
  Dim nBufPtr As Long
  Dim nCount As Long
  Dim nTotal As Long
  Dim i As Long
  Dim sUsers() As String
  Dim nBuffer() As Byte
 
  ' Computername (Server)
  ' (wird als Byte-Array benötigt)
  If Len(sComputer) = 0 Then sComputer = Environ$("COMPUTERNAME")
  If Left$(sComputer, 2) <> "\\" Then sComputer = "\\" & sComputer
  bServer = sComputer & vbNullChar
 
  ' Benutzer ermitteln
  If NetUserEnum(bServer(0), 0, &H2, nBufPtr, 255&, nCount, nTotal, 0&) = 0 Then
    ReDim nUsers(nCount - 1)
    ReDim sUsers(nCount - 1)
    CopyMemory nUsers(0), ByVal nBufPtr, nCount * 4
 
    ' jetzt die Benutzernamen anhand der Speicheradresse
    ' (Pointer) ermitteln
    For i = 0 To nCount - 1
      If lstrlen(nUsers(i)) > 0 Then
        ReDim nBuffer(255)
        CopyMemory nBuffer(0), ByVal nUsers(i), 255
        sUsers(i) = nBuffer
        If InStr(sUsers(i), vbNullChar) > 0 Then
          sUsers(i) = Left$(sUsers(i), InStr(sUsers(i), vbNullChar) - 1)
        End If
      End If
    Next i
 
    ' Resourcen freigeben
    NetApiBufferFree nBufPtr
  End If
 
  EnumUsers = sUsers
End Function

Aufrufbeispiel:
Es sollen alle Benutzernamen in einer ListBox angezeigt werden.

Dim sUsers() As String
sUsers = EnumUsers()
 
Dim i As Long
If UBound(sUsers) >= 0 Then
  For i = 0 To UBound(sUsers)
    List1.AddItem sUsers(i)
  Next i
End If



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.