Добрый день, уважаемые форумчане! Никак не могу найти каким образом получить имя учетной записи Microsoft. Именно той, которая указана в меню Файл->Учетная запись (блок "Сведения о пользователе")?
Добрый день, уважаемые форумчане! Никак не могу найти каким образом получить имя учетной записи Microsoft. Именно той, которая указана в меню Файл->Учетная запись (блок "Сведения о пользователе")?EvgenyD
Rioran, это не выдает желаемого результата. Тут возможно есть еще важные моменты, которые надо было написать. Пользователи на Office 365 Buisness, соответственно у каждого свой логин microsoft - его то и нужно будет получить. [vba]
Код
Application.UserName
[/vba] - выводит имя пользователя ПК А мне нужно получить то, что на принтскрине в приложенном файле.
Rioran, это не выдает желаемого результата. Тут возможно есть еще важные моменты, которые надо было написать. Пользователи на Office 365 Buisness, соответственно у каждого свой логин microsoft - его то и нужно будет получить. [vba]
Код
Application.UserName
[/vba] - выводит имя пользователя ПК А мне нужно получить то, что на принтскрине в приложенном файле.EvgenyD
_Boroda_, Ваш вариант на второй строке ошибается automation Error. Я в этом ничего не смыслю, но кажется ADSystemInfo будет работать только при наличии настроенной Active Directory.
_Boroda_, Ваш вариант на второй строке ошибается automation Error. Я в этом ничего не смыслю, но кажется ADSystemInfo будет работать только при наличии настроенной Active Directory.EvgenyD
У меня эти сведения нашлись в ветке реестра: HKEY_USERS\S-1-5-21-1838117663-2728108920-1439421766-1000\Software\Microsoft\Office\15.0\Common\Identity\Identities\dc7cdd78f0fa498e_OrgId
У меня эти сведения нашлись в ветке реестра: HKEY_USERS\S-1-5-21-1838117663-2728108920-1439421766-1000\Software\Microsoft\Office\15.0\Common\Identity\Identities\dc7cdd78f0fa498e_OrgIdEvgenyD
Вот еще вариант (где нашла, уже не помню), вдруг подойдет: [vba]
Код
Declare Function WNetGetUserA Lib "mpr.dll" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
[/vba][vba]
Код
Function GetUserName() As String Dim sUserNameBuff As String * 255 sUserNameBuff = Space(255) Call WNetGetUserA(vbNullString, sUserNameBuff, 255&) GetUserName = Left$(sUserNameBuff, InStr(sUserNameBuff, vbNullChar) - 1) End Function Sub tt() MsgBox GetUserName End Sub
[/vba] и еще тут есть пример, правда по-моему тоже самое, что и я написала
Вот еще вариант (где нашла, уже не помню), вдруг подойдет: [vba]
Код
Declare Function WNetGetUserA Lib "mpr.dll" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
[/vba][vba]
Код
Function GetUserName() As String Dim sUserNameBuff As String * 255 sUserNameBuff = Space(255) Call WNetGetUserA(vbNullString, sUserNameBuff, 255&) GetUserName = Left$(sUserNameBuff, InStr(sUserNameBuff, vbNullChar) - 1) End Function Sub tt() MsgBox GetUserName End Sub
[/vba] и еще тут есть пример, правда по-моему тоже самое, что и я написалаManyasha
Доброе время суток Скорее всего предложенными средствами так или иначе возвращается имя пользователя, вошедшего в систему Windows. Вам же нужна данные учётной записи подключения к Office 365. Скорее всего в объектной модели Excel такого нет (Может что есть в объектной модели Microsoft Office Object Library). Можно попытаться, используя Using Excel to Retrieve Office 365 Reporting Data - хотя есть вопрос - захотите ли вы светить данные входа администратора Offce 365, получить информацию если она там есть о подключенных пользователях и, если есть, с какого компьютера они подключены. Увы, сообщить что-то детальнее не могу - не имею установленного Office 365.
Интересно, а в ветке залогиневшегося к Office 365 текущего пользователя Windows HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Identity\Identities - ничего нет?
Доброе время суток Скорее всего предложенными средствами так или иначе возвращается имя пользователя, вошедшего в систему Windows. Вам же нужна данные учётной записи подключения к Office 365. Скорее всего в объектной модели Excel такого нет (Может что есть в объектной модели Microsoft Office Object Library). Можно попытаться, используя Using Excel to Retrieve Office 365 Reporting Data - хотя есть вопрос - захотите ли вы светить данные входа администратора Offce 365, получить информацию если она там есть о подключенных пользователях и, если есть, с какого компьютера они подключены. Увы, сообщить что-то детальнее не могу - не имею установленного Office 365.
Интересно, а в ветке залогиневшегося к Office 365 текущего пользователя Windows HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Identity\Identities - ничего нет?anvg
Сообщение отредактировал anvg - Среда, 02.09.2015, 08:46
anvg, Вы правы, по этому пути находятся такие же данные как и в указанном мной ранее. Приведенную статью еще не читал, сяду вечером, т.к. это надолго (с инглишем плохо).
anvg, Вы правы, по этому пути находятся такие же данные как и в указанном мной ранее. Приведенную статью еще не читал, сяду вечером, т.к. это надолго (с инглишем плохо).EvgenyD
Не могли бы вы скинуть экспортированную ветку этого раздела реестра, естественно, изменив сами имена, логины, в силу их конфиденциальности? Вдруг там есть какой-нибудь идентификатор активного пользователя, тогда требуемую информацию можно будет попытаться извлечь из реестра. Если будете экспортировать, то сделайте это при запущенном Excel и выполненном входе в учётную запись Microsoft.
Цитата
по этому пути находятся такие же данные
Не могли бы вы скинуть экспортированную ветку этого раздела реестра, естественно, изменив сами имена, логины, в силу их конфиденциальности? Вдруг там есть какой-нибудь идентификатор активного пользователя, тогда требуемую информацию можно будет попытаться извлечь из реестра. Если будете экспортировать, то сделайте это при запущенном Excel и выполненном входе в учётную запись Microsoft.anvg
Private Const IdentitiesSubKeyName As String = "Software\Microsoft\Office\15.0\Common\Identity\Identities" Private Function GetIdentitiesNames() On Error GoTo errHandle Const HKEY_CURRENT_USER = &H80000001 Dim pReg As Object, sNames Set pReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") pReg.EnumKey HKEY_CURRENT_USER, IdentitiesSubKeyName, sNames GetIdentitiesNames = sNames Exit Function errHandle: GetIdentitiesNames = sNames End Function
Public Sub test() Const SignParamName = "\SigninName", DisplayParamName = "\FriendlyName" Dim Keys, i As Long, SignName As String, DisplayName As String Dim wshShell As Object, sKey As String Keys = GetIdentitiesNames If Not IsEmpty(Keys) Then Set wshShell = CreateObject("WScript.Shell") For i = LBound(Keys) To UBound(Keys) sKey = Keys(i) SignName = wshShell.RegRead("HKCU\" & IdentitiesSubKeyName & "\" & sKey & SignParamName) DisplayName = wshShell.RegRead("HKCU\" & IdentitiesSubKeyName & "\" & sKey & DisplayParamName) Debug.Print SignName & " === " & DisplayName Next End If End Sub
[/vba] Но остаются два невыясненных вопроса 1. Позволит ли код обратиться к реестру, если это обычный пользователь (если wmi запрещено, то однозначно нет)? 2. Что будет в реестре, если пользователь из под одной учётки Windows более одного раза за сессию подключался к Office 365 под разными именами входа?
Можно таким кодом [vba]
Код
Private Const IdentitiesSubKeyName As String = "Software\Microsoft\Office\15.0\Common\Identity\Identities" Private Function GetIdentitiesNames() On Error GoTo errHandle Const HKEY_CURRENT_USER = &H80000001 Dim pReg As Object, sNames Set pReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") pReg.EnumKey HKEY_CURRENT_USER, IdentitiesSubKeyName, sNames GetIdentitiesNames = sNames Exit Function errHandle: GetIdentitiesNames = sNames End Function
Public Sub test() Const SignParamName = "\SigninName", DisplayParamName = "\FriendlyName" Dim Keys, i As Long, SignName As String, DisplayName As String Dim wshShell As Object, sKey As String Keys = GetIdentitiesNames If Not IsEmpty(Keys) Then Set wshShell = CreateObject("WScript.Shell") For i = LBound(Keys) To UBound(Keys) sKey = Keys(i) SignName = wshShell.RegRead("HKCU\" & IdentitiesSubKeyName & "\" & sKey & SignParamName) DisplayName = wshShell.RegRead("HKCU\" & IdentitiesSubKeyName & "\" & sKey & DisplayParamName) Debug.Print SignName & " === " & DisplayName Next End If End Sub
[/vba] Но остаются два невыясненных вопроса 1. Позволит ли код обратиться к реестру, если это обычный пользователь (если wmi запрещено, то однозначно нет)? 2. Что будет в реестре, если пользователь из под одной учётки Windows более одного раза за сессию подключался к Office 365 под разными именами входа?anvg
Сообщение отредактировал anvg - Среда, 02.09.2015, 21:27
anvg, на Вашем решении и остановлюсь. Протестировал на 5 машинах пользователей. (Все ОС - Win7, MS Office 365 Business) При смене учетки, смена значений происходит только после перезапуска приложения (данные в реестр записываются при корректном выходе из приложения, на сколько я понимаю). По пункту 1 протестировать нет возможности. Прикрепляю файлик с Вашим решением, для возможности быстро попробовать, может еще кто-то протестирует.
anvg, на Вашем решении и остановлюсь. Протестировал на 5 машинах пользователей. (Все ОС - Win7, MS Office 365 Business) При смене учетки, смена значений происходит только после перезапуска приложения (данные в реестр записываются при корректном выходе из приложения, на сколько я понимаю). По пункту 1 протестировать нет возможности. Прикрепляю файлик с Вашим решением, для возможности быстро попробовать, может еще кто-то протестирует.EvgenyD