zoukankan      html  css  js  c++  java
  • COM_利用GetWallpaper()获取墙纸路径

    // stdafx.h : 标准系统包含文件的包含文件,
    // 或是经常使用但不常更改的
    // 特定于项目的包含文件
    //
    
    #pragma once
    
    #include "targetver.h"
    
    #include <stdio.h>
    #include <tchar.h>
    
    
    #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的
    
    #include <atlbase.h>
    #include <atlstr.h>
    
    // TODO:  在此处引用程序需要的其他头文件
    
    // COMDemo.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    
    #include <windows.h>
    #include <comdef.h> // 主要定义了_com_error类,支持COM中的错误信息,对HRESULT进行友好的解释很有用
    #include <objbase.h>
    #include <wininet.h>
    #include <shlobj.h>
    #include <iostream>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        WCHAR wszWallpaper[MAX_PATH];
        CString strPath;
        HRESULT hr;
        IActiveDesktop* pIAd;
    
        // 1. 初始化COM库(让windows 加载DLLs)。通常是在程序的InitInstance() 中调用
        // CoInitialize(NULL) 或其它启动代码, MFC  程序使用AfxOleInit()
        CoInitialize(NULL);
    
        // 2. 使用外壳提供的活动桌面组件对像创建COM对像
        // 第4个参数通知COM需要什么接口(这里是IActiveDesktop)
        hr = CoCreateInstance(CLSID_ActiveDesktop,          // coclass 的CLSID
                            NULL,                       // 这个参数只用于COM对像的聚合,利用它向现有的coclass
                                                        // 添加新方法,参数为null代表不使用聚合
                            CLSCTX_INPROC_SERVER,           // 表示使用COM服务器的种类,本列中使用最简单的方法,一个进
                                                        // 程内DLL
                            IID_IActiveDesktop,         // 请求接口的IID,
                            (void**)&pIAd);             // 接口指针的地址。COM库通过这个参数的返回请求的接口
        if (SUCCEEDED(hr)){
          // 3. 如果COM对像创建成功,则调用这个对像的GetWallPaper() 方法
            // 这里最后一个参数,不管上哪个,都一样????????
            hr = pIAd->GetWallpaper(wszWallpaper, MAX_PATH, AD_GETWP_LAST_APPLIED);
            if (SUCCEEDED(hr)){
                // 4.如果调用GetWallpaper 成功,则返回它的文件名字
                // 注: 这里要使用wcout,这里的wcout是unicode专用的,与cout的作用相同。
                std::wcout << _T("Wallpaper path is:
    ")<< wszWallpaper << std::endl;
            }
            else
            {
                std::wcout << _T("GetWallpaper() Failed.") << std::endl;;
            }
            // 5. 释放接口
            pIAd->Release();
    
        }
        else
        {
            std::wcout << _T("CoCreateInstance() failed.") << std::endl;
        }
    
        // 6. 回收COM库。MFC 不用这一步,它会自动完成
        CoUninitialize();
        return 0;
    }
    
    
  • 相关阅读:
    mysql5.7 tar包安装
    jpa2.0以上findOne和getOne的区别
    终端设置代理
    virtualbox EFI安装Archlinux
    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
    代理模式笔记
    Mybatis详细的执行流程
    javaweb超市管理系统demo
    CF1409F Subsequences of Length Two
    1002: [FJOI2007]轮状病毒 基尔霍夫矩阵
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538068.html
Copyright © 2011-2022 走看看