c# -如何获取当前用户图片

本文关键字:用户 获取 何获取 | 更新日期: 2023-09-27 17:49:31

如何在c#中获得登录用户的图像?

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库在不断的积极发展,所以它是一个安全的选择。