首页 / 知识

MS Access有没有办法抓住当前的Active Directory用户?

2023-04-12 02:07:00

MS Access有没有办法抓住当前的Active Directory用户?

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

依靠环境变量保持有效不是一个好主意,因为可以在用户会话中轻松更改它们。


用户审核公司系统

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢