关闭

创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。

755人阅读 评论(0) 收藏 举报
/*
第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数。
其中的代码用外壳的Shell Link组件对象类创建我们在第一个例子中获得的
墙纸文件的快捷方式  
以下是编程步骤:  

初始化COM 库。   
创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。  
调用IShellLink 接口的SetPath()方法  
调用对象的QueryInterface()函数并取得IPersistFile接口。  
调用IPersistFile 接口的Save()方法。  
释放接口  
收回COM库    
//*/
//#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();
	
	CString       sWallpaper = wszWallpaper;  // 将墙纸路径转换为ANSI  
	IShellLink*   pISL;  
	IPersistFile* pIPF;  
	
    // 1. 初始化COM库(让Windows 加载DLLs). 通常在InitInstance()中调用  
    // CoInitialize ( NULL )或其它启动代码。MFC 程序使用AfxOleInit() 。  
	
    //CoInitialize ( NULL );  
	
    // 2. 使用外壳提供的Shell Link组件对象类创建COM对象。.  
    // 第四个参数通知COM 需要什么接口(这里是IShellLink)。  
	
    hr = CoCreateInstance ( CLSID_ShellLink,  
		NULL,  
		CLSCTX_INPROC_SERVER,  
		IID_IShellLink,  
		(void**) &pISL );  
	
    if ( SUCCEEDED(hr) )  
	{  
        // 3. 设置快捷方式目标(墙纸文件)的路径。  
        hr = pISL->SetPath ( sWallpaper );  
		
        if ( SUCCEEDED(hr) )  
		{  
            // 4. 获取这个对象的第二个接口(IPersistFile)。  
            hr = pISL->QueryInterface ( IID_IPersistFile, (void**) &pIPF );  
			
            if ( SUCCEEDED(hr) )  
			{  
                // 5. 调用Save() 方法保存某个文件得快捷方式。第一个参数是  
                // Unicode 串。  
                hr = pIPF->Save ( L"C:\\wallpaper.lnk", FALSE );  
				
                // 6a. 释放IPersistFile 接口。  
                pIPF->Release();  
			}  
		}  
		
        // 6. 释放IShellLink 接口。  
        pISL->Release();  
	}  
	
    // 输出错误信息部分这里省略。  
	
    // 7. 收回COM 库。MFC 程序不用这一步,它自动完成。  
    CoUninitialize(); 
}

0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2969770次
    • 积分:40069
    • 等级:
    • 排名:第94名
    • 原创:399篇
    • 转载:4555篇
    • 译文:5篇
    • 评论:609条
    文章分类
    最新评论