2011-08-31 16 views
5

मैं C# - How to get current user picture का जिक्र कर रहा हूं लेकिन मुझे कभी समाधान नहीं मिला। (मैं Win7 ओएस पर काम कर रहा हूँ)सी # उपयोगकर्ता चित्र प्राप्त करें (अवतार)

कुछ उपयोगकर्ताओं के लिए, चित्र पर

सी स्थित है: \ Users \ उपयोगकर्ता नाम \ AppData \ Local \ अस्थायी \ UserName.bmp

(जहां उपयोगकर्ता नाम उपयोगकर्ता उपनाम है) अन्य उपयोगकर्ताओं के लिए यह पथ FileNotFoundException फेंकता है लेकिन चित्र मौजूद हैं।

जहां मुझे पथ या वास्तविक तस्वीर के बारे में जानकारी मिल सकती है? एक रजिस्ट्री है जिसमें यह जानकारी है?

+0

आपको अपने प्रश्नों के अच्छे उत्तरों को ऊपर उठाने पर विचार करना चाहिए (आपके द्वारा स्वीकार किए जाने वाले लोगों तक सीमित नहीं है) –

उत्तर

9

यह blog post दिखाता है कि उपयोगकर्ता टाइल (चित्र) कैसे सेट करें। अंत के पास एक टिप्पणी में (माइकल एंथनी, 10 अप्रैल, 22:45), टिप्पणीकर्ता वर्णन करता है कि तस्वीर कैसे प्राप्त करें। मैंने जानकारी को सी # स्निपेट में इकट्ठा कर लिया है। याद रखें कि यह एक अनियंत्रित विंडोज शैल फ़ंक्शन पर आधारित है।

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

नोट इस शैल समारोह \ < उपयोगकर्ता > .bmp \ < उपयोगकर्ता > \ AppData ... फ़ाइल \ उपयोगकर्ता बनाता है और उसके फ़ाइलनाम देता है।

इसके अलावा, मैंने इसे Win7 पर परीक्षण किया है। मुझे पूर्व विंडोज संस्करणों के साथ इसकी संगतता का कोई अंदाजा नहीं है।

क्रेडिट Joco और Michael Anthony पर क्रेडिट।

+0

ग्रेट। अब मैं इस स्निपेट को आजमाउंगा। – CeccoCQ

+0

पूरी तरह से काम करता है, धन्यवाद! – CeccoCQ

0

मुझे \HKEY_CURRENT_USER\Volatile Envirnment पर प्रासंगिक जानकारी मिली है, लेकिन सही पथ नहीं है।

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

फिर से, बस एक अनुमान:

मेरा अनुमान है कि अवतार C:\Users\UserName\AppData\Local\Temp\ पर हमेशा होता है और फ़ाइल नाम ही इस एल्गोरिथ्म से पाया जा सकता है है।

पीएस .: \HKEY_USERS पर सभी उपयोगकर्ताओं के लिए Volatile Environment है। यदि आप एक विशिष्ट उपयोगकर्ता चाहते हैं, तो सभी उपयोगकर्ताओं पर पुनरावृत्ति करें और उपयोगकर्ता नाम के लिए Volatile Environment में चेक करें (\HKEY_USERS की उप-कुंजी केवल यादृच्छिक तार हैं, इसलिए आपको अंदर देखना चाहिए)।

+0

'' .'' के बारे में हिस्सा नोट करें। मैंने जोड़ा क्योंकि मेरा उपयोगकर्ता नाम abc.xyz है और फ़ाइल DOMAIN + abc.bmp है। –

+0

धन्यवाद, यह एक अच्छी जानकारी है। लेकिन मैं उपयोगकर्ता चित्र के लिए पथ नहीं पढ़ता, इसलिए मुझे लगता है कि यह जानकारी किसी अन्य स्थान पर संग्रहीत की जानी चाहिए। मुझे c: \ ProgramData \ Microsoft \ उपयोगकर्ता खाता चित्रों के भीतर username.dat मिला है। .dat फ़ाइलों को पढ़ने का एक तरीका है? – CeccoCQ

+0

एकमात्र तरीका मुझे पता है (और यह मेरा क्षेत्र नहीं है) इसे बाइट [] के रूप में मानता है, और .dat फ़ाइल के अंत से पाठ निकाला जाता है (मुझे नहीं पता कि आप किस टेक्स्ट एडिटर का उपयोग कर रहे हैं, लेकिन ध्यान दें कि पाठ वर्णों के बीच शून्य वर्ण हैं - शायद 'grep'' और इसी तरह के विरुद्ध सुरक्षा उपाय के रूप में)। –

संबंधित मुद्दे