2011-08-31 27 views
5

Tôi đang đề cập đến C# - How to get current user picture nhưng tôi chưa bao giờ tìm thấy giải pháp. (Tôi đang làm việc trên Win7 OS)C# Nhận hình ảnh của người dùng (Avatar)

Đối với một số người dùng, bức tranh nằm trên

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

(trong đó UserName là biệt danh của người dùng) cho những người dùng khác, đường dẫn này sẽ ném FileNotFoundException nhưng hình ảnh tồn tại.

Tôi có thể tìm thông tin về đường dẫn hoặc hình ảnh thực ở đâu? Có một đăng ký có chứa thông tin này?

+0

Bạn nên xem xét việc đưa ra các câu trả lời hay cho câu hỏi của mình (bao gồm nhưng không giới hạn ở những câu trả lời bạn chấp nhận) –

Trả lời

9

blog post này cho biết cách đặt lát người dùng (ảnh). Trong một bình luận gần kết thúc (Michael Anthony, 10 tháng tư 22:45), người bình luận mô tả làm thế nào để có được hình ảnh. Tôi đã thu thập thông tin vào một đoạn mã C#. Hãy nhớ rằng điều này được dựa trên một hàm Windows Shell không có giấy tờ.

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

Lưu ý rằng chức năng Shell này tạo ra các tập tin \ Users \ <USER> \ AppData ... \ <USER> .bmp và trả về tên tập tin của nó.

Ngoài ra, tôi đã thử nghiệm nó trên Win7. Tôi không có ý tưởng về khả năng tương thích với các phiên bản Windows cũ.

Tín dụng cho JocoMichael Anthony.

+0

Tuyệt vời. Bây giờ tôi sẽ thử đoạn này. – CeccoCQ

+0

Hoạt động hoàn hảo, cảm ơn! – CeccoCQ

0

Tôi đã tìm thấy thông tin có liên quan tại \HKEY_CURRENT_USER\Volatile Envirnment, nhưng không tìm thấy đường dẫn chính xác.

tôi đoán là các avatar luôn là C:\Users\UserName\AppData\Local\Temp\ và tên tập tin bản thân có thể được tìm thấy từ thuật toán này:

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

Một lần nữa, chỉ là một phỏng đoán.

P.S .: Có Volatile Environment cho tất cả người dùng, nếu bạn xem \HKEY_USERS. Nếu bạn muốn một người dùng cụ thể, hãy lặp lại tất cả người dùng và kiểm tra trong Volatile Environment cho tên người dùng (các khóa phụ của \HKEY_USERS chỉ là các chuỗi ngẫu nhiên, vì vậy bạn phải nhìn vào bên trong).

+0

Lưu ý phần về '' .''. Tôi đã thêm rằng vì tên người dùng của tôi là abc.xyz và tệp là DOMAIN + abc.bmp. –

+0

Cảm ơn, đây là một thông tin tốt. Nhưng tôi không đọc đường dẫn cho hình ảnh của người dùng, vì vậy tôi nghĩ rằng thông tin này nên được lưu trữ vào một nơi khác. Tôi đã tìm thấy username.dat trong C: \ ProgramData \ Microsoft \ User Account pictures. Có một cách để đọc các tập tin .dat? – CeccoCQ

+0

Cách duy nhất tôi biết (và nó không phải là khu vực của tôi) được coi là một byte [], và trích xuất văn bản từ cuối tệp .dat (Tôi không biết bạn đang sử dụng trình soạn thảo văn bản nào, nhưng lưu ý rằng có các ký tự null giữa các ký tự văn bản - có thể là một biện pháp bảo mật chống lại '' grep'' và tương tự). –

Các vấn đề liên quan