获取用户图片(头像)

本文关键字:头像 用户 获取 | 更新日期: 2023-09-27 18:07:01

我指的是c# -如何获得当前用户图片,但我从来没有找到一个解决方案。(我在Win7操作系统上工作)

对于某些用户,图片位于

C: ' '用户名' AppData '用户本地' Temp ' UserName.bmp

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

我在哪里可以找到路径或真实图片的信息?是否存在包含此信息的注册表?

获取用户图片(头像)

这篇博文展示了如何设置用户平铺(图片)。在接近结尾的评论中(迈克尔·安东尼,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''AppData…'.bmp并返回它的文件名。

我也在Win7上测试过。我不知道它与以前的Windows版本是否兼容。

感谢Joco和Michael Anthony。

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

再一次,只是猜测。

注:如果你看'HKEY_USERS,所有用户都有Volatile Environment。如果您想要一个特定的用户,遍历所有用户并在Volatile Environment中检查用户名('HKEY_USERS的子键只是随机字符串,因此您必须查看内部)。