![](/img/trans.png)
[英]Active Directory Authentication of Logged-in User using ADODB/ADSDSOObject
[英]Getting the currently logged-in windows user
我通過谷歌找到了這個: 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 **************************
這是最好的方法嗎?
你也可以這樣做:
Set WshNetwork = CreateObject("WScript.Network")
Print WshNetwork.UserName
它還有一個 UserDomain 屬性和其他一些東西:
http://msdn.microsoft.com/en-us/library/907chf30(VS.85).aspx
您也可以使用 Environ$ 但問題指定的方法更好。 用戶/應用程序可以更改環境變量。
我通常使用 VBA 中的環境,如下所示。 我沒有遇到 Ken 提到的可能性問題。
Function UserNameWindows() As String
UserNameWindows = VBA.Environ("USERNAME") & "@" & VBA.Environ("USERDOMAIN")
End Function
替代方法- 您提到的 API 可能是獲取用戶名的更好方法。
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
其他帖子中有很多替代方法,但要回答這個問題:是的,這是最好的方法。 如果您只需要用戶名,則比創建 COM 對象或 WMI 更快,並且在從 Win95 起的所有 Windows 版本中都可用。
有很多方法可以在 WMI 中獲取當前登錄的用戶名。 我的方法是通過'explorer.exe'進程中的用戶名獲取它,因為當用戶登錄窗口時,根據當前用戶訪問該文件。
WMI 腳本如下所示:
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
有關更多詳細信息,請查看以下鏈接:
http://msdn.microsoft.com/en-us/library/aa394599%28v=vs.85%29.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.