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.092 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 sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
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. |