none
如何获取windows 7用户账户当前使用的头像图片? RRS feed

  • 问题

    • 用途:      开发了一个IM软件, 希望自动获取windows系统正在使用的头像图片作为IM软件的头像;

    • 思路:      通过注册表得到当前系统正在使用的图片数据或者路径.

    • 目前了解到的:   (a).查询到 C:\Users\用户名\AppData\Local\Temp\用户名.bmp 即为当前的用户账户头像.  (b). 注册表                         HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003E8   UserTile即为当前用户头像的数据和路径, 当头像在控制面板中被修改, 此处数据随之被修改, 但是修改此处数据, 用户头像没有被修改, 看来此处并不决定用户头像的变化. 起决定性作用的注册表路径没有找到~

    • 问题:      对于(a), 一旦用户运行了系统清理类的软件, 临时存放的文件就没有了, 所以, 可行性不大.    对于(b). 我写的C++代码无论怎么弄都提示没有访问权限!   我知道的度娘、古哥、360搜、Yahoo、bing…… 我实在没辙了.  恳请能有好心的大侠救救我~!

    • 备注:  我使用的是win7 操作系统. win8好像有专门的类来进行处理, 可是却不支持win7~   别说放弃win7  即便xp咱也得兼顾啊, 是吧~      

    • 这里拜谢好心的朋友了!


    • 已编辑 atswan 2014年5月4日 20:39
    2014年5月4日 20:33

答案

  • Windows之前版本没有提供API来做这件事。

    你可以用spy++检查是否有WM_SETTINGCHANGE这样的消息发送出来,或者尝试调用SHChangeNotify。注意这样的反向工程的结果不是公开的文档,下一个Windows更新就可以让这样的技术发现失效。



    Visual C++ MVP


    2014年5月4日 22:36
    版主

全部回复

  • Windows之前版本没有提供API来做这件事。

    你可以用spy++检查是否有WM_SETTINGCHANGE这样的消息发送出来,或者尝试调用SHChangeNotify。注意这样的反向工程的结果不是公开的文档,下一个Windows更新就可以让这样的技术发现失效。



    Visual C++ MVP


    2014年5月4日 22:36
    版主
  • 这样貌似可以的。

    先要判断操作系统版本号

    typedef HRESULT (__stdcall*SHGetUserPicturePathVista)(LPCWSTR, UINT, LPWSTR, ULONG);
    typedef HRESULT (__stdcall*SHGetUserPicturePathXP)(LPCWSTR, UINT, LPWSTR);
    
    HMODULE hm = LoadLibrary(_T("shell32.dll"));
    if (hm)
    {
    	if (bIsWindowsXPorLater)
    	{
    			// 根据序号导入函数地址
    			SHGetUserPicturePathVista SHGetUserPicturePath_Vista = (SHGetUserPicturePathVista)MyGetProcAddress(hm, (LPCSTR)0x0105);
    			if (SHGetUserPicturePath_Vista)
    			{
    				SHGetUserPicturePath_Vista(NULL, 0x80000000, tmp, MAX_PATH);
    			}
    	}
    	else
    	{
    			// 根据序号导入函数地址
    			SHGetUserPicturePathXP SHGetUserPicturePath_XP = (SHGetUserPicturePathXP)GetProcAddress(hm, (LPCSTR)0x00e9);
    			if (SHGetUserPicturePath_XP)
    			{
    				SHGetUserPicturePath_XP(NULL, 0x80000000, tmp);
    			}
    	}
    	FreeLibrary(hm);
    }
    

    2015年1月21日 5:48