码迷,mamicode.com
首页 > 其他好文 > 详细

COM.2 用实例说明COM的使用(用IActiveDesktop设置壁纸)

时间:2016-05-14 00:37:51      阅读:691      评论:0      收藏:0      [点我收藏+]

标签:

编程设置壁纸有很多办法,可以调用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,
            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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!