Anmeldenamen unter Windows ermitteln

Sie schreiben ein Visual-Basic-Programm. Darin möchten Sie den in der aktuellen Windows-Sitzung angemeldeten Benutzer eindeutig ermitteln.

Diese Aufgabe kann eine VBA-Funktion für Sie erledigen. Öffnen Sie die Office-Anwendung, in der Sie die Funktion benötigen - beispielsweise Access - und starten Sie den Visual-Basic-Editor. Dazu können Sie in allen Microsoft-Office-Anwendungen die Tastenkombination [Alt]+[F11] benutzen. Erzeugen Sie zuerst ein neues Modul mit dem Befehl »Einfügen | Modul« und ergänzen Sie dann folgende Anweisung

Private Declare Function Get

WindowsUser Lib äadvapi32.dllô
Alias äGetUserNameAô (ByVal lp
Buffer As String, nSize As Long)
As Long
Erzeugen Sie anschließend über den Befehl »Einfügen | Procedur« eine neue Prozedur mit dem Namen »getUser Name()« und wählen Sie als »Gültigkeitsbereich« »Public«. Ergänzen Sie im leeren Funktionsrumpf folgenden Quelltext:
Public Function getUserName() As String


Dim strBuffer As String
Dim lngReturn As Long
Dim intPosition As Integer
Const constBufferLaenge = 255

strBuffer = Space(constBufferLaenge)

lngReturn = GetWindowsUser(strBuffer, constBufferLaenge)
If CBool(lngReturn) Then
intPosition = InStr(strBuffer, vbNullChar)
If intPosition Then
getUserName = Left(strBuffer, intPosition - 1)
Else
getUserName = strBuffer
End If
End If
End Function
Speichern Sie das Modul. Jetzt können Sie mit der Funktion »getUserName()« die Bezeichnung des aktuellen Benutzerkontos ermitteln. Den Namen des angemeldeten Anwenders liest hingegen die API-Funktion »GetUserNameA()« aus - sie befindet sich in der Windows-Bibliothek ADVAPI32.DLL. Der im Scipt verwendete Befehl »Declare Function« verweist mit dem Aufruf »GetWindows User()« darauf. Ihr Aufruf ähnelt einer in der Programmiersprache C implementierten Funktion. Als Parameter über-geben Sie eine Zeichenkette und deren maximale Länge: die Variable »strBuffer« und die Konstante »constBufferLaenge«. Die Funktion beendet den übergebenen Namen mit einem Null-Zeichen, das der Konstante »vbNull(Char)« entspricht. Mit dem Befehl »InStr()« ermittelt das Modul im Rückgabewert der Funktion die Position »intPosition« dieser Konstante und übergibt mit Hilfe von »Left()« die Zeichenkette bis zu diesem Null-Zeichen an den Rückgabewert der Funktion »getUserName()«.