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

https://www.vbarchiv.net
Rubrik: System/Windows · Computer/Benutzer/Ländereinstellungen   |   VB-Versionen: VB5, VB626.03.07
Informationen über einen Benutzer

Mit Hilfe der API-Funktion NetUserGetInfo lassen sich einige interessante Informationen über einen bestimmten Benutzer in Erfahrung bringen.

Autor:   HawkerBewertung:  Views:  10.526 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Manchmal ist es interessant, etwas mehr über einen Benutzer zu erfahren. Um Informationen über einen Benutzer zu erhalten, bietet Windows die NetUserGetInfo-API an. In Verbindung mit einer USER_INFO-Struktur kann man sehr umfangreiche Informationen einholen. Der Zugriff auf einige der in USER_INFO_3 angeführten Infos wird jedoch von Windows geblockt (z.B. das Passwort). Bei einem solchen Aufruf wird (bei einer Umwandlung von Unicode zu VB-String) sofort die gesamte VB-EXE geschlossen. Es empfiehlt sich also, das Programm rechtzeitig zu speichern! In nachfolgendem Beispielcode sind nur einige Beispielaufrufe angeführt. Dabei ist stets auf den Rückgabewert zu achten. Einige Type-Eigenschaften liefern einen Rückgabewert vom Typ String und müssen dementsprechend umgewandelt werden (da anfangs noch Unicode!), in diesem Beispiel der volle Name des Benutzers. Bei LastLogon und LastLogoff ist der Rückgabewert ein Long-Integer, und zwar die Anzahl der Sekunden seit dem 01.01.1970 00:00:00 GMT, die man am besten mit DateAdd zu dem genannten Datum hinzufügt.

Fügen Sie nachfolgenden Code in den Codeteil der Form:

Option Explicit
 
' Benötigte API-Deklarationen
Private Const SUCCESS As Long = 0&
 
Private Type USER_INFO_3
  usri3_name As Long
  usri3_password As Long
  usri3_password_age As Long
  usri3_priv As Long
  usri3_home_dir As Long
  usri3_comment As Long
  usri3_flags As Long
  usri3_script_path As Long
  usri3_auth_flags As Long
  usri3_full_name As Long
  usri3_usr_comment As Long
  usri3_parms As Long
  usri3_workstations As Long
  usri3_last_logon As Long
  usri3_last_logoff As Long
  usri3_acct_expires As Long
  usri3_max_storage As Long
  usri3_units_per_week As Long
  usri3_logon_hours As Long
  usri3_bad_pw_count As Long
  usri3_num_logons As Long
  usri3_logon_server As Long
  usri3_country_code As Long
  usri3_code_page As Long
  usri3_user_id As Long
  usri3_primary_group_id As Long
  usri3_profile As Long
  usri3_home_dir_drive As Long
  usri3_password_expired As Long
End Type
 
Private Declare Function NetUserGetInfo Lib "Netapi32.dll" ( _
  ServerName As Any, _
  UserName As Any, _
  ByVal Level As Long, _
  Buffer As Long) As Long
 
Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  Dest As Any, _
  ByVal Source As Long, _
  ByVal cbCopy As Long)
 
Private Declare Function NetApiBufferFree Lib "Netapi32.dll" ( _
  ByVal lpBuffer As Long) As Long
 
' in diesen Variablen werden die Benutzer-Infos gespeichert
Dim LastLogon, LastLogoff, NumLogons, Expire, PWAge, Priv, FullName As String
' Informationen über einen Benutzer ermitteln
Private Function Userinfo(ByVal Server As String, ByVal User As String) As Boolean
  Dim buff As Long
  Dim bServer() As Byte
  Dim bUser() As Byte
  Dim ui3 As USER_INFO_3
  Dim sByte() As Byte
  ReDim sByte(255)
 
  ' vbNull anhängen
  bUser = User & vbNullChar
  bServer = Server & vbNullChar
 
  ' Infos holen
  If NetUserGetInfo(bServer(0), bUser(0), 3, buff) = SUCCESS Then
    ' in USER_INFO_3 Struktur kopieren
    CopyMemory ui3, ByVal buff, Len(ui3)
 
    ' Letzte Anmeldung (GMT!!!)
    If ui3.usri3_last_logon > 0 Then
      LastLogon = DateAdd("s", (ui3.usri3_last_logon), "1-Jan-70")
    Else
      LastLogon = ""
    End If
 
    ' Anzahl aller Anmeldungen
    NumLogons = ui3.usri3_num_logons
 
    ' Letzte Abmeldung (Rückgabewert oft Null) (GMT!)
    If ui3.usri3_last_logoff > 0 Then
      LastLogoff = DateAdd("s", (ui3.usri3_last_logoff), "1-Jan-70")
    Else
      LastLogoff = ""
    End If
 
    ' Verfall: -1 = account verfällt nie, ansonsten sec ab 1. Jan 1970
    Expire = ui3.usri3_acct_expires
 
    ' Alter das Passworts in sec
    PWAge = Round((ui3.usri3_password_age / 84600), 3)
 
    ' Privilegien: 0 = Gast, 1 = Benutzer, 2 = Administrator
    Priv = ui3.usri3_priv
 
    ' Voller Name
    CopyMemory sByte(0), ui3.usri3_full_name, 256
    FullName = sByte
    If InStr(FullName, Chr$(0)) > 0 Then
      FullName = Left$(FullName, InStr(FullName, Chr$(0)) - 1)
    End If
 
    Userinfo = True
  Else
    Userinfo = False
  End If
  NetApiBufferFree buff
End Function

Per Schaltflächen-Klick soll die Benutzerinfos des aktuell angemeldeten Benutzer angezeigt werden:

Private Sub Command1_Click()
  ' Benutzerinformationen ermitteln
  Screen.MousePointer = 11
  If Userinfo("", Environ$("USERNAME")) Then
    MsgBox "FullName: " & IIf(Len(FullName) > 0, FullName, "-") & vbCrLf & _
    "Last Logon: " & LastLogon & vbCrLf & _
    "Last Lofoff: " & LastLogoff & vbCrLf & _
    "Number Logons: " & NumLogons & vbCrLf & _
    "PW Expires: " & Expire & vbCrLf & _
    "PW Age: " & PWAge & vbCrLf & _
    "Privilege: " & Priv
  Else
    MsgBox "Konnte keine Infos zu dem angegebenen Benutzer ermitteln!"
  End If
  Screen.MousePointer = 0
End Sub



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.