c# -如何获取当前用户图片
本文关键字:用户 获取 何获取 | 更新日期: 2023-09-27 17:49:31
如何在c#中获得登录用户的图像?
这在每个操作系统上是不可能的;但在可能的操作系统上:
对于Windows Vista或更高版本:
该图像位于C:'Users'UserName'AppData'Local'Temp' UserName.bmp
如果用户是域用户,它将是"DOMAIN+UserName.bmp"
(是的,'+'是文件名的一部分)
Try this::
public static Image GetUserimage()
{
if (File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)+@"'Temp'"+Environment.UserName+".bmp"))
{
return Image.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"'Temp'" + Environment.UserName + ".bmp");
}
else
{
return null;
}
}
在windows 10上试试
用户图片位于C:/用户/用户名/appdata/罗马/微软/windows/账户图片/
对于当前用户,以及Microsoft Windows实例上的任何用户,有一个NuGet包用于此(这里是无耻的插头):
https://github.com/HTD/Woof.System对于那些对源代码和巫术感兴趣的人。
对于那些感兴趣的只是使它工作,使用NuGet包Woof。系统,然后像这样使用这个特性:
获取WPF的当前小用户位图:var userBitmapSmall = new BitmapImage(new Uri(SysInfo.GetUserPicturePath()));
获取WPF的小OTHER用户位图:var userBitmapSmall = new BitmapImage(new Uri(SysInfo.GetUserPicturePath("John")));
获取WPF的大小任意用户位图:var smallBitmapPath = SysInfo.GetUserPicturePath("John", out var largeBitmapPath);
var smallBitmap = new BitmapImage(new Uri(smallBitmapPath));
var largeBitmap = new BitmapImage(new Uri(largeBitmapPath));
库中包含的解决方案是基于Windows Vista中未记录的Shell32.dll
调用和Windows 8及更新版本中未记录的注册表项。
如何获取使用Microsoft帐户登录的用户的头像是我自己发现的,我还没有找到解决方案,这可能是微软的甜蜜秘密。
重要的是,可以用谷歌搜索到的解决方案在很多方面都是不完整的:
- 没有Win32 API的用户头像可能不存在于临时目录中,可以被删除,可以被普通用户无法读取。
- 不使用未记录的注册表项和未记录的Win32 API功能检索微软帐户用户的个人资料图片是不可能的。
如果您在此解决方案中发现任何错误或不兼容,请在GitHub上打开问题。
在几个版本的Windows 10上进行了测试(稳定版和开发者版)。我用本地账户和微软账户测试了一下。
BTW:如果用户名不存在,该方法返回"默认"头像的路径。
注意:该包依赖于。net框架,由于对Win32 API的强烈依赖(因此不跨平台),与。net Core和。net Standard不兼容。还有其他与。net标准兼容的Woof库。它们似乎没有文档,但是它们包含Visual Studio可用的XML文档,并且GitHub上的源代码允许您了解它们是如何工作的。Woof库在不断的积极发展,所以它是一个安全的选择。