2011-08-31 12 views
5

Me refiero a C# - How to get current user picture pero nunca he encontrado una solución. (Estoy trabajando en Win7 OS)C# Get imagen de usuario (avatar)

Para algunos usuarios, la imagen se encuentra en

C: \ Users \ Usuario \ AppData \ Local \ Temp \ UserName.bmp

(donde UserName es apodo de usuario) para otros usuarios, esta ruta arroja FileNotFoundException pero existen imágenes.

¿Dónde puedo encontrar información sobre la ruta o imagen real? Hay un registro que contiene esta información?

+0

usted debe considerar Upvoting buenas respuestas a sus preguntas (incluyendo pero no limitado a los que usted acepta) –

Respuesta

9

Este blog post muestra cómo configurar el mosaico de usuario (imagen). En un comentario cerca del final (Michael Anthony, 10 de abril, 22:45), el comentarista describe cómo obtener la imagen. Reuní la información en un fragmento de C#. Recuerde que esto se basa en una función de shell de Windows no documentada.

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)); 
    } 

Tenga en cuenta que esta función Shell crea el archivo \ Users \ <USUARIO> \ AppData ... \ <USUARIO> .bmp y devuelve su nombre de archivo.

Además, lo he probado en Win7. No tengo idea de su compatibilidad con versiones anteriores de Windows.

Créditos a Joco y Michael Anthony.

+0

Grande. Ahora probaré este fragmento. – CeccoCQ

+0

Funciona perfectamente, gracias! – CeccoCQ

0

he encontrado información relevante en \HKEY_CURRENT_USER\Volatile Envirnment, pero no la ruta exacta.

Mi conjetura es que el avatar está siempre a C:\Users\UserName\AppData\Local\Temp\ y el nombre del archivo en sí se puede encontrar a partir de este algoritmo:

// 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('.')); 

Una vez más, sólo una suposición.

P.S .: Hay Volatile Environment para todos los usuarios, si nos fijamos en \HKEY_USERS. Si desea un usuario específico, itere sobre todos los usuarios y marque Volatile Environment para el nombre de usuario (las subclases de \HKEY_USERS son solo cadenas aleatorias, por lo que debe mirar adentro).

+0

Tenga en cuenta la parte sobre el '' .''. Lo agregué porque mi nombre de usuario es abc.xyz y el archivo es DOMAIN + abc.bmp. –

+0

Gracias, esta es una buena información. Pero no leo el camino para la imagen del usuario, así que creo que esta información debe almacenarse en otro lugar. He encontrado username.dat en C: \ ProgramData \ Microsoft \ Imágenes de cuenta de usuario. Hay una forma de leer archivos .dat? – CeccoCQ

+0

La única forma que conozco (y no es mi área) es tratarla como un byte [], y extraer el texto del final del archivo .dat (no sé qué editor de texto está usando, pero tenga en cuenta que hay caracteres nulos entre los caracteres de texto, probablemente como una medida de seguridad contra '' grep'' y similares). –