新年上班第一天的有关问题:IActiveDesktop的GetWallpaper获取的路径如何不正确

新年上班第一天的问题:IActiveDesktop的GetWallpaper获取的路径怎么不正确
我用COM组件IActiveDesktop获取的壁纸路径怎么不正确?获取是能获取,但是是错误的,我获取的路径为:C:\Users\Administrator\AppData\Local\Temp\bg766E.jpg

可是我到Temp路径下去看,根本就没有bg766E.jpg这张图片,这个文件名的文件也没有,我用的是WIN7 SP1系统和VS2008编程IDE环境,第一次这么专心的用COM,居然出错了,真心示解,望高人指点!

		WCHAR wszWallpaper[ MAX_PATH ];
CString strPath;
HRESULT hr;
IActiveDesktop* pIAD;

hr = CoCreateInstance( CLSID_ActiveDesktop, // (in)CoClass的CLSID
   NULL, // (in)集合,这里不使用
   CLSCTX_INPROC_SERVER,// (in)Server类型为“进程内Server”
   IID_IActiveDesktop, // (in)接口的IID
   (void**) &pIAD); // (out)返回接口指针

if ( SUCCEEDED( hr ) )
{
// 如果成功创建COM对象,我们调用GetWallpaper()
hr = pIAD->GetWallpaper( wszWallpaper, MAX_PATH, 0 ); // 获取是获取了,但是错误的

if ( SUCCEEDED(hr) )
{
// 如果成功,打印它返回的文件名
MessageBox( wszWallpaper );
}
else
{
MessageBox( _T("Failed!") );
}

pIAD->Release();
}
else
{
MessageBox( _T("CoCreateInstance() failed.") );
}

------解决方案--------------------
本帖最后由 VisualEleven 于 2014-03-10 13:27:52 编辑
wallpaper应该有两种模式 一种是原始的 一种是转化过的 你得到的可能是转化过的 我以前写的一个获取wallpaper路径的代码 当时比较清楚 现在记不清为啥那样写了
CString GetWallPaperPath()
{
CRegistryFt reg;
CString sPaperPath;

if (reg.Open( HKEY_CURRENT_USER, _T("Control Panel\\Desktop")))
{
if( !reg.Read( _T("Wallpaper"), sPaperPath ) )
{
sPaperPath.Empty();
}
}
else if (reg.Open( HKEY_CURRENT_USER, _T("Control Panel\\Desktop")))
{
if( !reg.Read( _T("ConvertedWallpaper"), sPaperPath ) )
{
sPaperPath.Empty();
}
}

return sPaperPath;
}

------解决方案--------------------
获取壁纸的路径可以用这个:
TCHAR szWallpaper[MAX_PATH] = { 0 };
SystemParametersInfo(SPI_GETDESKWALLPAPER, _countof(szWallpaper), (PVOID)szWallpaper, 0);

------解决方案--------------------
用你的方式得到的结果:
C:\Windows\web\wallpaper\Windows\img0.jpg