int CWallPaper::Remove()
{
if (m_bRemoved)
{
return 0;
}
int nRes = 0;
HRESULT hr = S_FALSE; CoInitialize(NULL);
IActiveDesktop *m_pActiveDesktop = NULL; hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**) &m_pActiveDesktop);
if (!SUCCEEDED(hr))
m_pActiveDesktop = NULL;
if (m_plogger)
{
m_plogger->log_info("%d",m_pActiveDesktop);
}
ZeroMemory(m_wszWallpaper, MAX_PATH * sizeof(WCHAR));
ZeroMemory(&m_OldwpOptions, sizeof(WALLPAPEROPT));
ZeroMemory(&m_OldcompOptions, sizeof(COMPONENTSOPT));
if (m_pActiveDesktop)
{
hr = m_pActiveDesktop->GetWallpaper(m_wszWallpaper, MAX_PATH, 0);
if (FAILED(hr))
nRes = HRESULT_CODE(hr);
if (m_plogger)
{
m_plogger->log_info("1:%d",nRes);
}
m_OldcompOptions.dwSize = sizeof(COMPONENTSOPT);
hr = m_pActiveDesktop->GetDesktopItemOptions(&m_OldcompOptions, 0);
if (FAILED(hr))
{
m_OldcompOptions.fActiveDesktop = true;
m_OldcompOptions.fEnableComponents = true;
nRes = HRESULT_CODE(hr);
}
if (m_plogger)
{
m_plogger->log_info("2:%d",nRes);
}
m_OldwpOptions.dwSize = sizeof(WALLPAPEROPT);
hr = m_pActiveDesktop->GetWallpaperOptions(&m_OldwpOptions, 0);
if (FAILED(hr))
{
m_OldwpOptions.dwStyle = WPSTYLE_STRETCH;
nRes = HRESULT_CODE(hr);
}
if (m_plogger)
{
m_plogger->log_info("3:%d",nRes);
}
USES_CONVERSION;
hr = m_pActiveDesktop->SetWallpaper(T2W(""), 0);
if (FAILED(hr))
nRes = HRESULT_CODE(hr);
if (m_plogger)
{
m_plogger->log_info("4:%d",nRes);
}
hr = m_pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
if (FAILED(hr))
nRes = HRESULT_CODE(hr);
m_pActiveDesktop->Release();
CoUninitialize();
if (m_plogger)
{
m_plogger->log_info("5:%d",nRes);
}
}
else
{
if (!SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE))
nRes = GetLastError();
if (m_plogger)
{
m_plogger->log_info("6:%d",nRes);
}
}
if (nRes == 0)
{
m_bRemoved = true;
//m_nCount ++;
}
return nRes;
}根据记录的日志显示如下:
2010-12-28 11:54:23:927  Info     56537296
2010-12-28 11:54:23:927  Info     1:0
2010-12-28 11:54:23:927  Info     2:16385
2010-12-28 11:54:23:927  Info     3:16385
2010-12-28 11:54:23:927  Info     4:16385
2010-12-28 11:54:24:597  Info     5:16385
说明从GetDesktopItemOptions函数就开始执行失败了,只在WIN7下失败,失败返回值为16385[WIN7系统的版本号],在XP和03下正常,哪位帮忙解释下这是什么情况?
事实上墙纸正常被移除掉了!