Der nachfolgende Code zeigt, ob ein User im System als Admin, Benutzer mit eingeschränkten Rechten oder als Gast angemeldet ist. Die Funktion User_LogInState liefert hierbei als Rückgabewert eine der vordefinierten KONSTANTEN zurück. Die Abfrage funktioniert allerdings nur auf WinNT-Systemen, also WinNT, Win2000 und WinXP. Unter Win9x würde es beim Aufruf der NetUserGetInfo-Funktion zu einem Fehler kommen. Diesen Fehler umgehen wir insofern, indem wir vor dem Aufruf einfach das Betriebssystem ermitteln. Handelt es sich um ein Win9x-System geben wir als Rückgabewert "ADMIN" zurück. Kopieren Sie nachfolgenden Code bitte in ein MODUL: Option Explicit ' API's zum Ermitteln des Betriebssystems Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformID As Long szCSDVersion As String * 128 End Type Private Declare Function GetVersionEx Lib "kernel32" _ Alias "GetVersionExA" ( _ ByRef lpVersionInformation As OSVERSIONINFO) As Long Private Const VER_PLATFORM_WIN32_NT = 2 ' API's zum Ermitteln der User-Infos Private Declare Function NetUserGetInfo Lib "Netapi32.dll" ( _ lpServer As Any, _ UserName As Byte, _ ByVal Level As Long, _ lpBuffer As Long) As Long Private Declare Function NetApiBufferFree Lib "Netapi32.dll" ( _ ByVal lpBuffer As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ Destination As Any, _ Source As Any, _ ByVal Length As Long) ' aktueller Benutzer Private Declare Function GetUserName Lib "advapi32.dll" _ Alias "GetUserNameA" ( _ ByVal lpBuffer As String, _ nSize As Long) As Long ' UserInfo-Struktur Private Type USER_INFO_1 usri1_name As Long usri1_password As Long usri1_password_age As Long usri1_priv As Long usri1_home_dir As Long usri1_comment As Long usri1_flags As Long usri1_script_path As Long End Type ' UserStatus Public Enum USER_PRIV USER_PRIV_GUEST = 0 USER_PRIV_USER = 1 USER_PRIV_ADMIN = 2 End Enum ' Hilfsfunktion: ' Windows NT-System? (NT, 2K, XP) Public Function IsWinNT() As Boolean Dim OSVersion As OSVERSIONINFO With OSVersion .dwOSVersionInfoSize = Len(OSVersion) GetVersionEx OSVersion IsWinNT = (.dwPlatformID = VER_PLATFORM_WIN32_NT) End With End Function ' Hilfsfunktion: ' Ermittelt den Namen des aktuell ' angemeldeten Benutzers Public Function GetUser() As String Dim UserName As String Dim Result As Long UserName = Space$(256) Result = GetUserName(UserName, Len(UserName)) If InStr(UserName, Chr$(0)) > 0 Then _ UserName = Left$(UserName, InStr(UserName, Chr$(0)) - 1) GetUser = UserName End Function ' Prüft, mit welchen Rechten ein User im System ' angemeldet ist ' ' Wenn kein Username angegeben wird, wird der ' Login-Status für den aktuell angemeldeten User ' ermittelt ' ' Rückgabewert: USER_PRIV_GUEST : Gast ' USER_PRIV_USER : Eingeschränkte Rechte ' USER_PRIV_ADMIN : Administrative Rechte ' ' Hinweis: Auf Win9x-Systemen wird IMMER USER_PRIV_ADMIN ' zurückgegeben! ' Public Function User_LogInState( _ Optional ByVal sUserName As String = "") As USER_PRIV Dim nResult As Long Dim nBuffer As Long Dim UserInfo As USER_INFO_1 Dim bServer() As Byte Dim bUser() As Byte ' NT-System? If Not IsWinNT() Then ' Nein, dann immer ADMIN-Rechte! User_LogInState = USER_PRIV_ADMIN Else ' Computer und UserName in Byte-Array umwandeln If sUserName = "" Then sUserName = GetUser() bServer = "" & vbNullChar bUser = sUserName & vbNullChar ' UserInfo "holen" nResult = NetUserGetInfo( _ bServer(0), bUser(0), &H1, nBuffer) If nResult = 0 Then ' Daten in InfoStruktur kopieren CopyMemory UserInfo, ByVal nBuffer, Len(UserInfo) NetApiBufferFree nBuffer ' Benutzer-Rechte auswerten User_LogInState = UserInfo.usri1_priv End If End If End Function Beispiel für den Aufruf: Dim nState As USER_PRIV nState = User_LogInState() MsgBox "Sie sind aktuell angemeldet als: " & _ Choose(nState + 1, "Gast", _ "Benutzer (eingeschränkte Rechte)", _ "Admin"), _ vbInformation Dieser Tipp wurde bereits 18.099 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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen 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 sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. |
||||||||||||||||
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. |