调用COM对象的GetWallpaper()方法。 如果GetWallpaper()成功,则输出/显示墙纸文件名

原创 2012年03月31日 08:43:29
/*
初始化COM库。 (Initialize)  
创建一个与活动桌面交互的COM对象,并取得IActiveDesktop接口。  
调用COM对象的GetWallpaper()方法。  
如果GetWallpaper()成功,则输出/显示墙纸文件名。  
释放接口(Release())。  
收回COM库(Uninitialize)。  
//*/
//#include <windows.h>
#include <afxwin.h>
#include <afxext.h> // MFC 扩展 
#include "wininet.h" // 自己添加(IActiveDesktop需要) 
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 
#include <iostream>
using namespace std;

void main(void)
{
WCHAR   wszWallpaper [MAX_PATH];  
CString strPath;  
HRESULT hr;  
IActiveDesktop* pIAD;  
  
    // 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用  
    // CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。  
  
    CoInitialize ( NULL );  
  
    // 2. 使用外壳提供的活动桌面组件对象类创建COM对象。  
    // 第四个参数通知COM需要什么接口(这里是IActiveDesktop).  
  
    hr = CoCreateInstance ( CLSID_ActiveDesktop,  
                            NULL,  
                            CLSCTX_INPROC_SERVER,  
                            IID_IActiveDesktop,  
                            (void**) &pIAD );  
  
    if ( SUCCEEDED(hr) )  
        {  
        // 3. 如果COM对象被创建成功,则调用这个对象的GetWallpaper() 方法。  
        hr = pIAD->GetWallpaper ( wszWallpaper, MAX_PATH, 0 );  
  
        if ( SUCCEEDED(hr) )  
            {  
            // 4. 如果 GetWallpaper() 成功,则输出它返回的文件名字。  
            // 注意这里使用wcout 来显示Unicode 串wszWallpaper.  wcout 是  
            // Unicode 专用,功能与cout.相同。  
            wcout << L"Wallpaper path is:\n    " << wszWallpaper <<endl << endl;  
            }  
        else  
            {  
            cout << _T("GetWallpaper() failed.") << endl << endl;  
            }  
  
        // 5. 释放接口。  
        pIAD->Release();  
        }  
    else  
        {  
        cout << _T("CoCreateInstance() failed.") << endl << endl;  
        }  
  
    // 6. 收回COM库。MFC 程序不用这一步,它自动完成。  
CoUninitialize();
/*  
在这个例子中,输出/显示Unicode 串 wszWallpaper用的是std::wcout。  
Wallpaper path is:
D:\temp\desktop\mydesktop.BMP

Press any key to continue
//*/
}

相关文章推荐

说说Android桌面(Launcher应用)背后的故事(五)——桌面壁纸的添加

博客搬家啦——为了更好地经营博客,本人已经将博客迁移至www.ijavaboy.com。这里已经不再更新,给您带来的不便,深感抱歉!这篇文章的新地址:点击我  上一篇中,我们了解了Works...

Swift - 实现日志输出的封装1(显示出调用的文件名、方法、行号)

在开发调试程序时,我们少不了使用 print 方法进行日志打印。当然简单地调试使用 print 方法就够了,但如果日志输出的地方很多,就不好区分出每条日志具体是在哪里打印的。 本文对日志打印功能...

COM应用实例--获取桌面墙纸路径

COM应用实例--获取桌面墙纸路径:Win32控制台程序(C++) /* 功能: 获取桌面墙纸的路径,并建立一个该墙纸的快捷方式保存在指定路径 说明: COM应用实例, Win32控制台程序...

程序安装不成功 提示COM类工厂中CLSID为{6BF52-394A-11D3-00co4F79FAA6}的组件 可能的解决方法

前记:在一个用户安装我们的软件的时候,每次安装到最后一步运行的时候。就会报出以下错误; 于是就找CLSID为6BF52-394A-11D3-00co4F79FAA6的组件是什么鬼?其实就是windo...

[教程] 写号+上3G成功,附个人经验补充,写号看此一贴即可,二楼附上radio恢复方法和recovery (来源于http://www.in189.com/thread-94957-1-1.htm)

首先是这个,觉得虽然是为droid x写的,但是他写的简单易懂,而且95%以上内容也适合里程碑使用。最关键的是他上传了写号上3G所需要的一切一切软件 http://www.in189.com/thr...

[电源、屏保、闹钟、日程、墙纸] UILocalNotification实现本地的闹钟提醒的方法。

UILocalNotification *notification=[[UILocalNotification alloc] init];         if (notification!=nil...

virtualbox创建com对象失败(解决方法)

virtualbox创建com对象失败(解决方法) 试过网上的好几个方法都不行,最后结合了两种办法才搞定。 方法一:(不能完全解决问题) ①对VirtualBox的图标点击右键->属性->兼容性; ②...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:调用COM对象的GetWallpaper()方法。 如果GetWallpaper()成功,则输出/显示墙纸文件名
举报原因:
原因补充:

(最多只允许输入30个字)