C#获取用户图片(阿凡达)

时间:2011-08-31 07:28:23

标签: c# windows-7 image

我指的是C# - How to get current user picture,但我从未找到解决方案。 (我正在研究Win7 OS)

对于某些用户,图片位于

  

C:\ Users \用户名\应用程序数据\本地\ TEMP \ UserName.bmp

(其中UserName是用户昵称)对于其他用户,此路径抛出FileNotFoundException但图片存在。

我可以在哪里找到有关路径或真实图片的信息?有一个包含此信息的注册表?

2 个答案:

答案 0 :(得分:9)

blog post显示如何设置用户磁贴(图片)。在评论结束时(迈克尔安东尼,4月10日,22:45),评论者描述了如何获得图片。我已将信息收集到C#片段中。请记住,这是基于未记录的Windows Shell函数。

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

请注意,此Shell函数会创建文件\ Users \< USER> \ AppData ... \< USER> .bmp并返回其文件名。

另外,我在Win7上测试过它。我不知道它与以前的Windows版本的兼容性。

JocoMichael Anthony

答案 1 :(得分:0)

我在\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的子键只是随机字符串,因此您必须查看内部)。