7

ユーザーが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)

なぜこれが時々起こるのか分かりません。代わりに LDAP に変換した方がよいでしょうか? 試してみましたが、LDAP URL を正しく構築できません。

4

2 に答える 2

5

ユーザーが Windows ログインを介して既に認証されている場合、詳細を再度入力する必要があるのはなぜですか?

ログインしているユーザーを知る必要がある場合は、次の関数で非常に簡単にユーザー名を取得できます。

Declare Function IGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long

関数 GetUserName() を文字列として

    エラー時再開次へ

    Dim sBuffer を文字列として
    Dim lSize As Long
    薄暗い x 長い

    sBuffer = スペース$(32)
    lSize = Len(sBuffer)
    x = IGetUserName(sBuffer, lSize)
    GetUserName = left$(sBuffer, lSize - 1)

終了機能

于 2012-08-28T19:30:23.447 に答える