标签:
编程设置壁纸有很多办法,可以调用SystemParametersInfo、修改注册表、还可以通过Windows Shell提供的IActiveDesktop接口来实现。
IActiveDesktop接口是一个COM接口,需要按照调用COM组件的方法来使用它。这里通过应用IActiveDesktop接口来说明COM的使用方法。
奇怪的是,必须包含wininet.h,而且顺序不能错,见下面的顺序:
#include <afxwin.h> // MFC 核心组件和标准组件
#include <wininet.h>
#include <afxext.h> // MFC 扩展
否则会提示找不到IActiveDesktop的定义。
::CoInitialize(NULL);
2.使用CoCreateInstance函数,创建 ActiveDesktop对象的实例,获取ActiveDesktop对象的IActiveDesktop接口指针,成功后对象的使用计数加一。
IActiveDesktop *pActiveDesktop=NULL;
//Create an instance of the Active Desktop
HRESULT hr = ::CoCreateInstance(
CLSID_ActiveDesktop,
NULL,
CLSCTX_INPROC_SERVER,
IID_IActiveDesktop,
(void**)&pActiveDesktop);
if (FAILED(hr))
{
printf("Create ActiveDesktop failure:0x%08X\n",hr);
return -1;
}
2.1 调用SetWallpaper方法设置桌面壁纸。
USES_CONVERSION;
hr=pActiveDesktop->SetWallpaper(
A2W("F:\\我的文档\\My Pictures\\xinsrc_55203051817196711110236.jpg"),0);
if (FAILED(hr))
{
printf("SetWallpaper failure:0x%08X\n",hr);
return -1;
}
2.2 调用ApplyChanges方法应用当前设置。
hr=pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
if (FAILED(hr))
{
printf("ApplyChanges failure:0x%08X\n",hr);
return -1;
}
3.调用Release方法释放接口,这时对象的使用计数减一。
pActiveDesktop->Release();
4.调用CoUninitialize在当前线程释放COM库。
::CoUninitialize();
COM.2 用实例说明COM的使用(用IActiveDesktop设置壁纸)
标签:
原文地址:http://www.cnblogs.com/dgx/p/5491544.html