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 Dieser Tipp wurde bereits 10.545 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
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. |