C # Получить изображение пользователя (аватар) - PullRequest
5 голосов
/ 31 августа 2011

Я имею в виду C # - Как получить текущее изображение пользователя , но я не нашел решения. (Я работаю на Win7 OS)

Для некоторых пользователей картинка расположена на

C: \ Users \ имя_пользователя \ AppData \ Local \ Temp \ UserName.bmp

(где UserName - псевдоним пользователя) для других пользователей этот путь вызывает исключение FileNotFoundException, но изображения существуют.

Где я могу найти информацию о пути или реальной картине? Есть реестр, который содержит эту информацию?

Ответы [ 2 ]

9 голосов
/ 31 августа 2011

Это сообщение в блоге показывает, как установить плитку пользователя (рисунок). В конце комментария (Майкл Энтони, 10 апреля, 22:45) комментатор описывает, как получить картину. Я собрал информацию в фрагмент C #. Помните, что это основано на недокументированной функции оболочки Windows.

    using System;
    using System.Text;
    using System.Drawing;

    [DllImport("shell32.dll", EntryPoint = "#261", 
               CharSet = CharSet.Unicode, PreserveSig = false)]
    public static extern void GetUserTilePath(
      string username, 
      UInt32 whatever, // 0x80000000
      StringBuilder picpath, int maxLength);

    public static string GetUserTilePath(string username)
    {   // username: use null for current user
        var sb = new StringBuilder(1000);
        GetUserTilePath(username, 0x80000000, sb, sb.Capacity);
        return sb.ToString();
    }

    public static Image GetUserTile(string username)
    {
        return Image.FromFile(GetUserTilePath(username));
    }

Обратите внимание, что эта функция оболочки создает файл \ Users \ \ AppData ... \ .bmp и возвращает его имя файла.

Кроме того, я протестировал его на Win7. Я понятия не имею о его совместимости с прежними версиями Windows.

Кредиты Джоко и Майкл Энтони .

0 голосов
/ 31 августа 2011

Я нашел соответствующую информацию на \HKEY_CURRENT_USER\Volatile Envirnment, но не точный путь.

Я предполагаю, что аватар всегда находится на C:\Users\UserName\AppData\Local\Temp\, а само имя файла можно найти по этому алгоритму:

// Note that $XYZ$ means \HKEY_CURRENT_USER\Volatile Envirnment\XYZ
if $USERDOMAIN$ = "" then
    return $USERNAME$.Substring(0, $USERNAME$.IndexOf('.'));
else
    return $USERDOMAIN$ + "+" + $USERNAME$.Substring(0, $USERNAME$.IndexOf('.'));

Опять же, только предположение.

P.S .: Volatile Environment для всех пользователей, если вы посмотрите на \HKEY_USERS. Если вы хотите определенного пользователя, выполните итерацию по всем пользователям и отметьте Volatile Environment для имени пользователя (подключи \HKEY_USERS - это просто случайные строки, поэтому вы должны заглянуть внутрь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...