Wie kann ich die aktuell angemeldeten Benutzer in Windows in Access VBA bekommen?
-
03-07-2019 - |
Frage
Das fand ich über google: http://www.mvps.org/access /api/api0008.htm
'******************** Code Start **************************
' This code was originally written by Dev Ashish.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' Dev Ashish
'
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function fOSUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
strUserName = String$(254, 0)
lngLen = 255
lngX = apiGetUserName(strUserName, lngLen)
If ( lngX > 0 ) Then
fOSUserName = Left$(strUserName, lngLen - 1)
Else
fOSUserName = vbNullString
End If
End Function
'******************** Code End **************************
Ist dies der beste Weg, es zu tun?
Lösung
Sie können auch Environ $ verwenden, aber die Methode, mit der Frage angegeben ist besser. Benutzer / Anwendungen können die Umgebungsvariablen ändern.
Andere Tipps
Sie können auch dies tun:
Set WshNetwork = CreateObject("WScript.Network")
Print WshNetwork.UserName
Es hat auch eine Benutzerdomäne Eigenschaft und ein paar andere Dinge:
http://msdn.microsoft.com/en -US / library / 907chf30 (VS.85) aspx
Ich verwende im Allgemeinen eine environ aus VBA wie im Folgenden. Ich habe nicht die Probleme hat, die Ken als Möglichkeiten erwähnt.
Function UserNameWindows() As String
UserNameWindows = VBA.Environ("USERNAME") & "@" & VBA.Environ("USERDOMAIN")
End Function
Viele alternativer Methoden in anderen Beiträgen, aber die Frage zu beantworten: Ja, das ist der beste Weg, es zu tun. Schneller als ein COM-Objekt oder WMI zu schaffen, wenn alles, was Sie wollen, dass der Benutzername ist und in allen Versionen von Windows ab Win95 auf.
Alternative Art und Weise , das zu tun - wahrscheinlich die API Sie erwähnen, ist ein besserer Weg, Benutzernamen zu erhalten.
For Each strComputer In arrComputers
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
For Each objItem in colItems
Wscript.Echo "UserName: " & objItem.UserName & " is logged in at computer " & strComputer
Next
gibt es viele Möglichkeit, die aktuellen protokollierten Benutzernamen in WMI zu erhalten. meine Art und Weise ist es durch die Benutzername vom Prozess der ‚explorer.exe‘ zu bekommen denn wenn die Benutzeranmeldung in Fenster, die Zugriff auf diese Datei entsprechend den aktuellen Benutzer.
WMI-Skript sein würde wie folgt aussehen:
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strIP & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objprocess In colProcessList
colProperties = objprocess.GetOwner(strNameOfUser, strUserDomain)
If objprocess.Name = "explorer.exe" Then
UsrName = strNameOfUser
DmnName = strUserDomain
End If
Next
für mehr detailcheck Link auf:
http://msdn.microsoft. com / en-us / library / aa394599% 28v = VS.85% 29.aspx