2011-08-31 15 views
5

Mi riferisco a C# - How to get current user picture ma non ho mai trovato una soluzione. (Sto lavorando su Win7 OS)C# Ottieni immagine utente (Avatar)

Per alcuni utenti, l'immagine si trova su

C: \ Utenti \ nomeutente \ AppData \ Local \ Temp \ UserName.bmp

(dove UserName è nickname dell'utente) per gli altri utenti questo percorso genera FileNotFoundException ma le immagini esistono.

Dove posso trovare informazioni sul percorso o immagine reale? C'è un registro che contiene queste informazioni?

+0

Si dovrebbe prendere in considerazione l'inversione di risposte alle vostre domande (incluse ma non limitate a quelle che accettate) –

risposta

9

Questo blog post mostra come impostare il riquadro utente (immagine). In un commento vicino alla fine (Michael Anthony, 10 aprile, 22:45), il commentatore descrive come ottenere l'immagine. Ho raccolto le informazioni in uno snippet C#. Ricorda che questo è basato su una funzione di Windows Shell non documentata.

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

Si noti che questa funzione Shell crea il file \ Users \ <UTENTE> \ AppData ... \ <UTENTE> .bmp e restituisce il nome del file.

Inoltre, l'ho provato su Win7. Non ho idea della sua compatibilità con le precedenti versioni di Windows.

Crediti a Joco e Michael Anthony.

+0

Grande. Ora proverò questo snippet. – CeccoCQ

+0

Funziona perfettamente, grazie! – CeccoCQ

0

Ho trovato informazioni pertinenti a \HKEY_CURRENT_USER\Volatile Envirnment, ma non il percorso esatto.

La mia ipotesi è che l'avatar è sempre a C:\Users\UserName\AppData\Local\Temp\ e il nome del file stesso può essere trovato da questo 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('.')); 

Anche in questo caso, solo una supposizione.

P.S .: C'è Volatile Environment per tutti gli utenti, se si guarda \HKEY_USERS. Se si desidera un utente specifico, iterare su tutti gli utenti e controllare il Volatile Environment per il nome utente (le sottochiavi di \HKEY_USERS sono solo stringhe casuali, quindi è necessario guardare all'interno).

+0

Nota la parte relativa a '' .''. L'ho aggiunto perché il mio nome utente è abc.xyz e il file è DOMAIN + abc.bmp. –

+0

Grazie, questa è una buona informazione. Ma non ho letto il percorso per l'immagine dell'utente, quindi penso che queste informazioni dovrebbero essere archiviate in un altro posto. Ho trovato username.dat nelle immagini dell'account C: \ ProgramData \ Microsoft \ User. C'è un modo per leggere i file .dat? – CeccoCQ

+0

L'unico modo che conosco (e non è la mia area) è trattarlo come un byte [], ed estrarre il testo dalla fine del file .dat (non so quale editor di testo stai usando, ma nota che ci sono caratteri nulli tra i caratteri del testo - probabilmente come misura di sicurezza contro '' grep'' e simili). –

Problemi correlati