Получите информацию об учетной записи LiveId (Office 365), зарегистрированной в приложении Office в надстройке VSTO.

Я разрабатываю надстройку VSTO для Word, Excel и т. д. И мне нужно получить информацию о пользователе, который в данный момент находится в приложении Office. Мне нужен хотя бы адрес электронной почты.

введите здесь описание изображения

Я нашел эти свойства Globals.ThisAddIn.Application.UserName, .UserInitials и .UserAddress. Но дело не в LiveID аккаунте. Речь идет о пользовательских настройках офиса.

Как я могу получить необходимую информацию?


person ApceH Hypocrite    schedule 02.12.2016    source источник


Ответы (1)


Я нашел только один способ получить эту информацию - прочитать реестр ... Есть ключ HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Common\Identity\Identities\, если это Office 2016. Есть подраздел типа xxxxx_LiveId, где xxxxx соответствует значению ProviderId.

Вы можете прочитать не менее EmailAddress значений из этого подраздела.

Поэтому я написал некоторый код C# для получения адреса электронной почты вошедшего в систему пользователя LiveID:

string GetUserEmailFromOffice365()
{
    string Version = "16.0"; //TODO get from AddIn
    string identitySubKey = $@"Software\Microsoft\Office\{Version}\Common\Identity\Identities";

    using (var key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(identitySubKey))
    {
        if (key != null && key.SubKeyCount > 0)
            {
                foreach (var subkeyName in key.GetSubKeyNames())
                {
                    using (var subkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey($@"{identitySubKey}\{subkeyName}"))
                    {
                        object value = null;
                        try
                        { 
                            value = subkey.GetValue("EmailAddress");
                        }
                        catch (Exception ex)
                        {
                            Debug.WriteLine(ex);
                        }
                        if (value != null && value is string)
                        {
                            return value as string;
                        }
                    }
                }
            }
    }
    return null;
}

Конечно, вы не должны жестко кодировать значение Version. Получить и запомнить офисную версию можно из Globals.ThisAddIn.Application.Version в ThisAddIn.cs файле методом ThisAddIn_Startup.

person ApceH Hypocrite    schedule 04.12.2016