我指的是C# - How to get current user picture,但我从未找到解决方案。 (我正在研究Win7 OS)
对于某些用户,图片位于
C:\ Users \用户名\应用程序数据\本地\ TEMP \ UserName.bmp
(其中UserName是用户昵称)对于其他用户,此路径抛出FileNotFoundException但图片存在。
我可以在哪里找到有关路径或真实图片的信息?有一个包含此信息的注册表?
答案 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版本的兼容性。
答案 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
的子键只是随机字符串,因此您必须查看内部)。