繁体   English   中英

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

[英]C# Get user picture (Avatar)

我指的是C# - 如何获取当前的用户图片,但我从未找到过解决方案。 (我正在研究Win7 OS)

对于某些用户,图片位于

C:\\ Users \\用户名\\ 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 \\ <USER> \\ AppData ... \\ <USER> .bmp并返回其文件名。

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

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

再一次,只是一个猜测。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM