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. 优化技术之Android高效开发

    基于Android平台的设备一定是嵌入式设备. 两个原则判断一个系统是否合理:不要做不必要做的事情:尽可能地节省内存的使用. 1. 尽量避免创建对象Object 2. 使用自身方法 3. 使用虚拟优于 ...

  2. 转载【微信支付】jsapi支付之传参问题(使用微信官方SDK之PHP版本) V3之WxpayPubHelper 亲测有效,V3WxpayAPI_php_v3.zip版未测试,理论上也是一样的。

    本文转载至:http://blog.csdn.net/geeklx/article/details/51146151 (微信支付现在分为v2版和v3版,2014年9月10号之前申请的为v2版,之后申请 ...

  3. Ubuntu 分区方案参考

    2011-10-25 10:09   对于初次接触的一般用户(包括双系统用户): /             5-10G(玩玩的话5G就够,长期使用的话推荐10G) /usr         5-10 ...

  4. Linux命令-文件处理命令:ln

    ln -s /etc/issue /tmp/issue.soft 为这个/etc/issue文件创建一个软连接,名称为/tmp/issue.soft(相当于windows里面给/etc/issue文件 ...

  5. Redis总结(五)缓存雪崩和缓存穿透等问题(转载)

    前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhong/category/771056.html .今 ...

  6. 如何读取xml文件,根据xml节点属性查询并输出xml文件

    主要是应用SimpleXML和递归函数来根据key值来查询,并将结果以xml格式输出. <?php header("Content-type: text/xml"); //以 ...

  7. Python 实int型和list相互转换 现把float型列表转换为int型列表 把列表中的数字由float转换为int型

    第一种方法:使用map方法 >>> list = [, ] #带有float型的列表 >>> int_list = map(int,list) #使用map转换 & ...

  8. Linux 用C语言判断文件和文件夹

    Linux 用C语言判断文件和文件夹 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #inc ...

  9. c#省市联动(sqlHelper的应用)

    sqlHelper: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  10. PHP——分页显示数据库内容

    test.php <?php header("Content-Type:text/html;charset=utf-8"); //加载分页类 include "pa ...