获取用户图片

时间:2012-02-05 09:32:16

标签: delphi winapi

操作系统:Win7x64(2008,2008r2)。 郎:德尔福Xe2。

enter image description here enter image description here

  1. 如何接收图像“用户帐户图片”的完整路径(和文件名)?
  2. 如何设置新图片?
  3. delphi plz上的示例。

    需要: ... function GetCurrentUserPicture:string;

    ... function GetUserPicture(UserName:String):string;

    ... function SetUserNewPicture(UserName,ImageFileName:String):bool;

2 个答案:

答案 0 :(得分:11)

shell32.dll中有一个未记录的函数。在Windows XP上,其顺序为233,在Windows Vista上为7,其序数为261。

它的函数原型(from Airesoft)是:

HRESULT WINAPI SHGetUserPicturePath (
    LPCWSTR pwszPicOrUserName, 
    DWORD sguppFlags, 
    LPWSTR pwszPicPath, 
    UINT picPathLen 
)

您可以使用此功能检索存储用户图片的路径。只需将用户名传递为pwszPicOrUserName,将要存储图片路径的缓冲区作为pwszPicPath,将缓冲区的大小存储为picPathLen。您可以将sguppFlags设置为0或任何other flags posssible。

还有一个未记录的功能,您可以使用它来设置用户的用户图片。其序号在Windows XP上为234,在Windows Vista和Windows 7上为262。

它的函数原型(from Airesoft)是:

HRESULT WINAPI SHSetUserPicturePath ( 
    LPWSTR pwszAcctName, 
    DWORD reserved, 
    LPCWSTR pwszPictureFile 
)

将应将其图片更改为pwszAcctName的用户的名称和要设置为pwszPictureFile的图片的路径。将reserved设置为0.必须在调用此函数之前初始化COM。

根据Microsoft的说法,您不应该依赖未记录的功能,因为可以使用Windows上安装的任何修补程序删除或更改它们。

答案 1 :(得分:4)

根据MSDN

  

在Windows 7或更高版本中,每个用户个人资料都有一个关联的图像   呈现为用户磁贴。这些图块显示给用户上的用户   “帐户控制面板”项及其“管理帐户”子页面   默认访客和默认用户帐户的图像文件   如果您具有管理员访问权限,则会显示

     

...

     

用户的图块图像存储为   C:\ Users \< username> \ Local \ Temp文件夹为.bmp。任何斜线   characters()被转换为加号字符(+)。例如,   DOMAIN \ user已转换为DOMAIN +用户。

我找不到用于获取图像的API,因为官方文档正在调用此实现细节,我认为这意味着您可以安全地依赖它。这是我认为这是获得平铺图像的支持方式。