操作系统:Win7x64(2008,2008r2)。 郎:德尔福Xe2。
delphi plz上的示例。
需要: ... function GetCurrentUserPicture:string;
... function GetUserPicture(UserName:String):string;
... function SetUserNewPicture(UserName,ImageFileName:String):bool;
答案 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,因为官方文档正在调用此实现细节,我认为这意味着您可以安全地依赖它。这是我认为这是获得平铺图像的支持方式。