博客日历
2025年07月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
30 | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 | 1 | 2 | 3 |
存档
2025年03月 2024年
03月 04月 05月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
COM.2 用实例说明COM的使用(用IActiveDesktop设置壁纸)
编程设置壁纸有很多办法,可以调用SystemParametersInfo、修改注册表、还可以通过Windows Shell提供的IActiveDesktop接口来实现。
IActiveDesktop接口是一个COM接口,需要按照调用COM组件的方法来使用它。这里通过应用IActiveDesktop接口来说明COM的使用方法。
奇怪的是,必须包含wininet.h,而且顺序不能错,见下面的顺序:
#include <afxwin.h> // MFC 核心组件和标准组件
#include <wininet.h>
#include <afxext.h> // MFC 扩展
否则会提示找不到IActiveDesktop的定义。
1.调用CoInitialize在当前线程初始化COM库。
::CoInitialize(NULL);
2.使用CoCreateInstance函数,创建 ActiveDesktop对象的实例,获取ActiveDesktop对象的IActiveDesktop接口指针,成功后对象的使用计数加一。
IActiveDesktop *pActiveDesktop=NULL;
//Create an instance of the Active Desktop
HRESULT hr = ::CoCreateInstance(
CLSID_ActiveDesktop,
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.4 COM(Component Object Model,组件对象模型)深入学习
下一篇: COM.3 用VC++生成接口的COleDispatchDriver包装类来调用COM组件
分类:Win32/C++ 查看次数:9110 发布时间:2009/6/16 12:41:48