Windows Shell API提供了接口IActiveDesktop来完成墙纸的设置。

//IActiveDesktop 接口方法表 (详情参见MSDN)

AddDesktopItem
AddDesktopItemWithUI
AddUrl
ApplyChange
GenerateDesktopItemHtml
GetDesktopItem
GetDesktopItemByID
GetDesktopItemBySource
GetDesktopItemCount
GetDesktopItemOptions
GetPattern
GetWallpaper
GetWallpaperOptions
ModifyDesktopItem
RemoveDesktopItem
SetDesktopItemOptions
SetPattern
SetWallpaper
SetWallpaperOptions

   C++ Code 
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
BOOL SetWallpaper(CString &strPicFile, DWORD dwStyle)
{
    HRESULT hr = S_OK;
    IActiveDesktop* pIAD = NULL;
    
    //创建接口的实例
    hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**) &pIAD );
    if (FAILED(hr))
    {
        return FALSE;
    }
    
    //将文件名改为宽字符串,这是IActiveDesktop::SetWallpaper的要求
};
    LPTSTR lpStr = strPicFile.GetBuffer(strPicFile.GetLength() );
    MultiByteToWideChar(CP_ACP, , wszWallpaper, MAX_PATH);
    strPicFile.ReleaseBuffer();
    
    //设置墙纸
);
    if (FAILED(hr))
    {
        return FALSE;
    }
    
    //设置墙纸的样式
    WALLPAPEROPT wpo;
    wpo.dwSize = sizeof(wpo);
    wpo.dwStyle = dwStyle;
    hr = pIAD->SetWallpaperOptions(&wpo, );
    if(!SUCCEEDED(hr))
    {
        return FALSE;
    } 
    
    //应用墙纸的设置
    hr = pIAD->ApplyChanges(AD_APPLY_ALL);
    if(!SUCCEEDED(hr))
    {
        return FALSE;
    } 
    
    //读取墙纸的文件名并打印在debug窗口内
);
    CString strFile = wszWallpaper;
    TRACE(strFile); 
    
    //释放接口的实例
    pIAD->Release();
    return TRUE;
}

BOOL EnableActiveDesktop(BOOL bEnable)
{
    HRESULT hr = S_OK;
    IActiveDesktop* pIAD = NULL;
    
    //创建接口的实例
    hr = CoCreateInstance ( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**) &pIAD );
    if(!SUCCEEDED(hr))
    {
        return FALSE;
    } 
    
    //启用或关闭Active desktop
    COMPONENTSOPT comp;
    comp.dwSize = sizeof(comp);
    comp.fEnableComponents = bEnable;
    comp.fActiveDesktop = bEnable;
    hr = pIAD->SetDesktopItemOptions(&comp, );
    if(!SUCCEEDED(hr))
    {
        return FALSE;
    } 
    
    //释放接口的实例
    pIAD->Release;
    return TRUE;
}

  Demo下载http://pan.baidu.com/s/1bpjFyNX

VC++ 设置桌面壁纸的更多相关文章

  1. UWP 设置桌面壁纸、锁屏图片

    private static Uri imgUri = new Uri("ms-appx:///pic1.jpg"); private async void btnSetWallp ...

  2. sakura设置桌面壁纸

    下下载steam上的Wallpaper Engine 先将sakura.html下载为html文件. 再从文件打开 就保存了 再加载保存,就一直是了

  3. c++ 设置桌面壁纸(win)

    #include <iostream> #include <Windows.h> int main() { const char* path = "C:\\Users ...

  4. python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸

    ACG-wallpaper 初学python,之前想抓取P站的一些图片来着,然后发现acg12这里有专门的壁纸榜单,就写了个抓取壁纸作为mac桌面壁纸玩玩. 功能:抓取acg12壁纸榜单的动漫壁纸,并 ...

  5. Windows 聚焦的锁屏壁纸设置为桌面壁纸

    需求: Windows的锁屏壁纸偶尔遇到非常喜欢的壁纸,想设置为桌面壁纸. 步骤如下: 1. “Windows 聚焦”的锁屏壁纸都保存在隐藏文件夹 --- Assets里. a. 打开“资源管理器 b ...

  6. 【Win10应用开发】自定义桌面壁纸

    调用通用的API来设置桌面壁纸,是一件既简单又有趣的事情,结合XAML可以生成图像的特性,你甚至可以做一个应用,让用户用他所拍的照片做成一张自定义壁纸,然后作为桌面壁纸. 这个API是通用的,应用运行 ...

  7. Win10家庭版设置桌面右键更换桌面壁纸

    Win10家庭版设置桌面右键更换桌面壁纸.. ------------------------- 这是设置之前的右键快捷菜单.. ------------------------- 开始设置:右键桌面 ...

  8. 为你的Windows7设置动态壁纸

    From:http://www.cnblogs.com/killerlegend/p/3644014.html By KillerLegend DreamScene是Vista上的一个功能,可以让你设 ...

  9. android设置动态壁纸 (Wallpaper) 介绍

    当进入改壁纸的设置页面 但是还没有设置时 09-21 07:55:05.575: INFO/System.out(1337): service onCreate09-21 07:55:05.614: ...

随机推荐

  1. Linux配置 xampp下的https证书(腾讯云申请)

    准备 从腾讯云后台SSL证书管理里下载证书 一.上传文件 解压出来以后有三个文件: 1_root_bundle.crt 2_www.xxxxx.com.crt 3_www.xxxxx.com.key ...

  2. PHP - MAC下PhpStorm安装调试环境xdebug

    今天下午一直在捣鼓如何用PhpStorm进行调试,查找了许多资料,零零碎碎的,所以自己弄篇文章记录一下步骤. 安装xdebug 使用brew安装xdebug,语法如下 brew install hom ...

  3. 在 Ubuntu12.04/Xubuntu12.04 上安装 QQ2012,这才是真正可行的

     2012-5-18 11:16:29   1. 安装wine 终端下输入: sudo apt-get install wine 复制代码 有人这样:sudo apt-get install wine ...

  4. SDL视频显示进阶

    原文地址:http://blog.csdn.net/qingkongyeyue/article/details/53024467 1.SDL中事件和线程(函数同时运行) 2.练习 (1)创建线程 第一 ...

  5. jQuery开发插件的两种方式

    最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验 ...

  6. C#:xml操作(待补充)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  7. ArcGIS 10 安装程序及破解文件

    1.下载 ArcGIS 10 安装程序及破解文件 后面提供电驴的下载地址(可以使用迅雷.QQ旋风等下载工具下载),下载文件是一个光盘镜像文件:‍ArcGIS_Desktop10_122519.iso. ...

  8. PHP设计模式系列 - 观察者模式处理订单(异步操作附加功能)

    观察者模式 观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性.观察者设计模式非常常用,在一般复杂的WEB系统中,观察者模式可以帮你减轻代码设计的压力,降低代码 ...

  9. Atitit.国际化中的日期与钱符号问题

    Atitit.国际化中的日期与钱符号问题 1. 用户名注册的问题 1 1.1. 不能限制用户名长度与特殊符号 1 2. 2.8月7号未必总写成8/7,有时也用7/8 2 3. 5.$未必总是指美元 3 ...

  10. [svc]salt-grains

    用途 1,匹配客户端 2,配置文件里使用 3,资产管理 定义grains方法1: 方法2: