Как узнать логин и стаус пользователя с помощью VBA?
Вобщем буду рад любым идеям!:)
Если Вы говорите о свойстве UserName объекта Application, то при работе с Windows линейки NT здесь могут быть "подводние камни".
Дело в том, что это свойство возвращает имя не того пользователя, который открыл текущий сеанс работы в Windows, а того, под чьим именем был создан профиль, назначенный для использования текущему пользователю. Резюме: это [color=red]ненадёжный[/color] способ верификации.
Пожалуй, второе проще первого. Здесь надо знать какая у Вас сеть: одноранговая или доменная.
А вот сеть в организации доменная.
[color=blue]Environ[/color] возвращает верные данные. Однако с её помощью Вы не сможете установить членства пользователя в группах.
В таком случае удобнее всего будет воспользоваться интерфейсами ADSI.
Вот пара примеров.
1. Определение имени текущего пользователя и проверка его членства в заданной доменной группе:
Dim objADSysInfo As Object, objCurrentUser As Object
Dim objGroup As Object, objItem As Object
Dim strCurUserName As String, strListUsers As String
Const strTestGroup = "здесь - имя нужной группы"
Const strDomainName = "здесь - DNS-имя домена"
Const strDC = "здесь - DNS-имя контроллера домена"
Set objADSysInfo = CreateObject("ADSystemInfo")
Set objCurrentUser = GetObject("LDAP://" & objADSysInfo.UserName)
strCurUserName = objCurrentUser.cn
Set objCurrentUser = Nothing
Set objADSysInfo = Nothing
MsgBox "Текущий пользователь: " & strCurUserName, vbInformation
Set objGroup = GetObject("WinNT://" & strDomainName & "/" & strDC & "/" & strTestGroup & ",group")
For Each objItem In objGroup.Members
strListUsers = strListUsers & objItem.Name & ","
Next
Set objGroup = Nothing
If InStr(1, strListUsers, strCurUserName, vbTextCompare) > 0 Then
MsgBox "Результат поиска положительный.", vbInformation
Else
MsgBox "Результат поиска отрицательный.", vbCritical
End If
End Sub
2. Определение имени текущего пользователя и проверка его членства хотя бы в одной из заданных доменных групп:
Dim objADSysInfo As Object, objCurrentUser As Object
Dim strCurUserName As String, strListGroups As String
Dim intResFind As Integer
Dim arrMemberOf, arrTestGroups, strItem
arrTestGroups = Array("Группа 1", "Группа 2", "Группа 3")
Set objADSysInfo = CreateObject("ADSystemInfo")
Set objCurrentUser = GetObject("LDAP://" & objADSysInfo.UserName)
strCurUserName = objCurrentUser.cn
arrMemberOf = objCurrentUser.GetEx("MemberOf")
Set objADSysInfo = Nothing
Set objCurrentUser = Nothing
MsgBox "Текущий пользователь: " & strCurUserName, vbInformation
For Each strItem In arrMemberOf
strListGroups = strListGroups & strItem & vbNewLine
Next
intResFind = 0
For i = LBound(arrTestGroups) To UBound(arrTestGroups)
If InStr(1, strListGroups, arrTestGroups(i), vbTextCompare) > 0 Then
intResFind = intResFind + 1
End If
Next
If intResFind > 0 Then
MsgBox "Результат поиска положительный.", vbInformation
Else
MsgBox "Результат поиска отрицательный.", vbCritical
End If
End Sub