您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页如何获取Windows用户头像(XP,2003,vista及以上版本系统的实现)

如何获取Windows用户头像(XP,2003,vista及以上版本系统的实现)

来源:筏尚旅游网
2014年8月29日如何获取Windows用户头像(XP,2003,vista及以上版本系统的实现)

如何获取Windows用户头像(XP,2003,vista及以上版本系统的实现)

一、获取思路1.调用API

2.从注册表获取

3.直接从硬盘读取文件

二、实现过程关于调用API:

网上找了找资料,获取用户头像的API在shell32.dll下有两个SHGetUserPicturePathEx和SHGetUserPicturePath其中SHGetUserPicturePathEx不支持Vista以下的系统,API的ID为810.

SHGetUserPicturePath不支持XP以下的系统,API的ID在Vista以上261,XP和2003为233SHGetUserPicturePathEx: function(pwszUserOrPicName: PWideChar; sguppFlags: DWORD; pwszDesiredSrcExt: PWideChar;

pwszPicPath: PWideChar; picPathLen: UINT; pwszSrcPath: PWideChar; srcLen: UINT): HRESULT; stdcall;

SHGetUserPicturePath: function(pwszPicOrUserName: LPCWSTR; sguppFlags: DWORD;pwszPicPath: PWideChar; picPathLen: UINT): HRESULT; stdcall;

经过测试后发现SHGetUserPicturePathEx在win7工作没有问题,vista下失败。

SHGetUserPicturePath在win7、win8、win vista工作没有问题,在xp下失败。(这个失败的至今未搞懂,怎么会事)

所以在XP下还需要寻找其他方法解决

关于从注册表读取:

在Xp下的当前用户头像存放位置在:

HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Hints\\\\PictureSource其他系统的暂时未找到注册表位置。

不过我还没有测试,在注册表中是否可以获取到当前用户的头像,还是得到administrator的头像。所以我没有在程序中使用注册表这种方法。

关于直接从文件夹读取:

在Xp下用户图像储存位置是在C:\\Documents and Settings\\All Users\\Application Data\\Microsoft\\User Account Pictures\\.bmp ,这个文件夹还可以看到其他用户的头像。

win7,vista以上是在C:\\Users\\\\AppData\\Local\\Temp\\.bmp

ps. 在这里我还专门有测试,如果调用API获取图像,即使删掉.bmp或则修改了用户头像。这个

.bmp文件都是会自动恢复和修改的。所以不必担心着不到该文件。但是如果是直接读取磁盘文件,这个还是有可能被人工或其他删掉(可能性低),还是会访问不到文件的。

综上:

首先,需要判断系统版本,xp以下系统直接没有用户图片这个功能。

XP和2003用直接读取当前用户名称,构造用户图片路径,读取文件夹获得图片。(最好能动态的获取C:\\Documents and Settings\\All Users\\Application Data\\文件夹路径,毕竟是系统变量用户是可以更改位置的)vista以上则调用API获得路径,读取图片。

另外还有一个非常重要的问题需要解决:关于16位bmp的读取。

由于16位bmp缺少调色盘,这个问题如果不注意,最后显示的图片颜色会不正确。

我使用的是Delphi,所以最后解决方案是用GdiPlus,加载bmp文件重绘解决。如果有更好的方法请告诉我。var

draw: IGPGraphics;

image, pThumbnail: IGPImage;Bmp.PixelFormat := pf24bit;

file:///C:/Users/Administrator/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E5%A6%82%E4%BD%95%E8%8E%B7…

1/2

2014年8月29日如何获取Windows用户头像(XP,2003,vista及以上版本系统的实现)

Bmp.SetSize(65, 65);

draw := TGPGraphics.Create(Bmp.Canvas.Handle);Image := TGPImage.Create(userPicPath);

pThumbnail := image.GetThumbnailImage(65, 65, nil, nil);

draw.DrawImage(pThumbnail, 0, 0, pThumbnail.Width, pThumbnail.Height);

file:///C:/Users/Administrator/Desktop/%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/%E5%A6%82%E4%BD%95%E8%8E%B7…2/2

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务