Is there a way for MS Access to grab the current Active Directory user?
我正在为我公司的软件制定规范,并且作为审核系统的一部分,我认为如果有一种方法可以抓住当前的Active Directory用户,那就太好了。
希望是这样的:
1 2 3
| Dim strUser as String
strUser = ActiveDirectory.User()
MsgBox"Welcome back," & strUser |
试试这篇文章-我有一些工作中的代码会出错,如果不行的话就可以工作...
相关报价:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| Private Declare Function GetUserName Lib"advapi32.dll" Alias"GetUserNameA" _
(ByVal IpBuffer As String, nSize As Long) As Long
Private Declare Function GetComputerName Lib"kernel32" Alias"GetComputerNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
Function ThisUserName() As String
Dim LngBufLen As Long
Dim strUser As String
strUser = String$(15,"")
LngBufLen = 15
If GetUserName(strUser, LngBufLen) = 1 Then
ThisUserName = Left(strUser, LngBufLen - 1)
Else
ThisUserName ="Unknown"
End If
End Function
Function ThisComputerID() As String
Dim LngBufLen As Long
Dim strUser As String
strUser = String$(15,"")
LngBufLen = 15
If GetComputerName(strUser, LngBufLen) = 1 Then
ThisComputerID = Left(strUser, LngBufLen)
Else
ThisComputerID = 0
End If
End Function |
这是我的版本:它将获取您喜欢的任何东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 'gets firstname, lastname, fullname or username
Public Function GetUser(Optional whatpart ="username")
Dim returnthis As String
If whatpart ="username" Then GetUser = Environ("USERNAME"): Exit Function
Set objSysInfo = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objSysInfo.USERNAME)
Select Case whatpart
Case"fullname": returnthis = objUser.FullName
Case"firstname","givenname": returnthis = objUser.givenName
Case"lastname": returnthis = objUser.LastName
Case Else: returnthis = Environ("USERNAME")
End Select
GetUser = returnthis
End Function |
我从Spiceworks获得了最初的想法。
David很好地说明了使用环境变量的风险。 我只能补充一点,环境变量可能还有其他问题。 只需看一下我们已有5年历史的项目中的实际代码片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| Public Function CurrentWorkbenchUser() As String
' 2004-01-05, YM: Using Application.CurrentUser for identification of
' current user is very problematic (more specifically, extremely
' cumbersome to set up and administer for all users).
' Therefore, as a quick fix, let's use the OS-level user's
' identity instead (NB: the environment variables used below must work fine
' on Windows NT/2000/2003 but may not work on Windows 98/ME)
' CurrentWorkbenchUser = Application.CurrentUser
'
' 2005-06-13, YM: Environment variables do not work in Windows 2003.
' Use Windows Scripting Host (WSH) Networking object instead.
' CurrentWorkbenchUser = Environ("UserDomain") &"\" & Environ("UserName")
'
' 2007-01-23, YM: Somewhere between 2007-01-09 and 2007-01-20,
' the WshNetwork object stopped working on CONTROLLER3.
' We could not find any easy way to fix that.
' At the same time, it turns out that environment variables
' do work on Windows 2003.
' (Apparently, it was some weird configuration problem back in 2005:
' we had only one Windows 2003 computer at that time and it was
' Will's workstation).
'
' In any case, at the time of this writing,
' returning to environment variables
' appears to be the simplest solution to the problem on CONTROLLER3.
' Dim wshn As New WshNetwork
' CurrentWorkbenchUser = wshn.UserDomain &"\" & wshn.UserName
CurrentWorkbenchUser = Environ("USERDOMAIN") &"\" & Environ("USERNAME")
End Function |
依靠环境变量保持有效不是一个好主意,因为可以在用户会话中轻松更改它们。
|