我有一个 Access 应用程序,要求用户输入其 Windows 域用户和密码才能进入。我使用以下 VBA 代码来完成此任务:
Function WindowsLogin(ByVal strUserName As String, ByVal strpassword As String, ByVal strDomain As String) As Boolean
'Authenticates user and password entered with Active Directory.
On Error GoTo IncorrectPassword
Dim oADsObject, oADsNamespace As Object
Dim strADsPath As String
strADsPath = "WinNT://" & strDomain
Set oADsObject = GetObject(strADsPath)
Set oADsNamespace = GetObject("WinNT:")
Set oADsObject = oADsNamespace.OpenDSObject(strADsPath, strDomain & "\" & strUserName, strpassword, 0)
WindowsLogin = True 'ACCESS GRANTED
ExitSub:
Exit Function
IncorrectPassword:
WindowsLogin = False 'ACCESS DENIED
Resume ExitSub
End Function
我注意到有时当信息输入正确时,访问会被拒绝。我尝试调试一次,但出现错误:“找不到网络路径。
” 在Set oADsObject = oADsNamespace.OpenDSObject)
line.
不知道为什么有时会发生这种情况。转换为 LDAP 是否更好?我已经尝试过,但无法正确构建 LDAP URL。
如果用户已经通过 Windows 登录进行身份验证,为什么还要让他们再次输入详细信息?
如果您需要知道哪个用户登录了,您可以通过以下函数非常轻松地获取用户名:
Declare Function IGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long
Function GetUserName() As String
On Error Resume Next
Dim sBuffer As String
Dim lSize As Long
Dim x As Long
sBuffer = Space$(32)
lSize = Len(sBuffer)
x = IGetUserName(sBuffer, lSize)
GetUserName = left$(sBuffer, lSize - 1)
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)