博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++ 设置桌面壁纸
阅读量:5819 次
发布时间:2019-06-18

本文共 2165 字,大约阅读时间需要 7 分钟。

 

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的要求
    WCHAR wszWallpaper [MAX_PATH] = {
0
};
    LPTSTR lpStr = strPicFile.GetBuffer(strPicFile.GetLength() );
    MultiByteToWideChar(CP_ACP, 
0
, lpStr, -
1
, wszWallpaper, MAX_PATH);
    strPicFile.ReleaseBuffer();
    
    
//设置墙纸
    hr = pIAD->SetWallpaper(wszWallpaper, 
0
);
    
if
 (FAILED(hr))
    {
        
return
 FALSE;
    }
    
    
//设置墙纸的样式
    WALLPAPEROPT wpo;
    wpo.dwSize = 
sizeof
(wpo);
    wpo.dwStyle = dwStyle;
    hr = pIAD->SetWallpaperOptions(&wpo, 
0
);
    
if
(!SUCCEEDED(hr))
    {
        
return
 FALSE;
    } 
    
    
//应用墙纸的设置
    hr = pIAD->ApplyChanges(AD_APPLY_ALL);
    
if
(!SUCCEEDED(hr))
    {
        
return
 FALSE;
    } 
    
    
//读取墙纸的文件名并打印在debug窗口内
    hr = pIAD->GetWallpaper(wszWallpaper, MAX_PATH, 
0
);
    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, 
0
);
    
if
(!SUCCEEDED(hr))
    {
        
return
 FALSE;
    } 
    
    
//释放接口的实例
    pIAD->Release;
    
return
 TRUE;
}

  Demo下载

转载地址:http://sjwdx.baihongyu.com/

你可能感兴趣的文章
SpringBoot 2.X课程学习 | 第一篇:初识SpringBoot
查看>>
架构师日常:你离资深架构师还有多少距离——技术架构的升级之路
查看>>
Android圆角布局、天气应用、树状图、日食动画、仿饿了么导航效果等源码
查看>>
借助Nginx搭建反向代理服务器
查看>>
GCC同时使用静态库和动态库链接
查看>>
Spring容器基础XmlBeanFactory(一)
查看>>
zabbix监控mysql、mariaDB
查看>>
(转载)Python日志工具 Python plog
查看>>
python数学公式:找出完美数的方法
查看>>
如何正确访问Redis中的海量数据?服务才不会挂掉!
查看>>
Tomcat日志catalina.out切分脚本
查看>>
[喵咪开源软件推荐(5)]开源DNS服务-bind
查看>>
记录一下iOS开发中琐碎的点点-8
查看>>
ActiveMQ基本知识
查看>>
归纳法 演绎法区别
查看>>
愚人节整人大全,丧心病狂没朋友!
查看>>
OSChina 周二乱弹 —— 我视若珍宝的,别人弃之如敝履。
查看>>
java和c中"="的区别
查看>>
Ubuntu Kylin 安装和配置maven
查看>>
jvm GC内存回收的思考
查看>>