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

原创 2012年03月31日 08:52:05
/*
第二个例子展示了如何使用一个提供单接口的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(); 
}

使用IShellLink 创建快捷方式

用IShellLink解析快捷方式(ShortCut) 前几天要写一个解析快捷方式的程序,发现MSDN上有篇文章,转了过来  本想翻译一下的,想想英语比较弱,作罢。 Using Shell Lin...
  • htt9931
  • htt9931
  • 2013年08月10日 18:23
  • 3897

采用COM方法 创建应用程序的快捷方式(菜鸟版)

转载请标明是引用于 http://blog.csdn.net/chenyujing1234   通过此例子学习创建快捷方式的方法,也可知道一些编译错误的解决方法。  #include #in...

Windows 7如何建立一个FTP的快捷方式

原来,使用Windows XP的时候,在IE6的地址栏里输入FTP服务器的地址,就可以打开一个资源管理器的界面来管理文件。但是,随着IE的版本的提升或是装了Windows 7,原来的这种方法就不能用了...

ShortCut的延伸功能--为一个app的不同界面创建不同的快捷方式

现在做的项目有一个特殊的需求,众所周知,一个APP有一个主程序界面,一般是luncher的界面,通过这个主界面又可以进入很多界面,但是楼主这个程序需要为一个独立于主界面的子界面做一个独立的shortc...

Linux系统:Ubuntu下如何在桌面创建一个应用程序的“快捷方式”?

原:http://blog.sina.com.cn/s/blog_95e7dea801011ax3.html 刚从WIndows的魔爪中投奔自由,接触Ubuntu不久,遇到了很多问题,其中一...

如何在桌面上建立一个“关机”的快捷方式

桌面-右键-新建快捷方式-请键入项目位置-输入“shutdown -s -t 0”(-s -t 0前面都要空格)-输入名称-完成-右击这个快捷方式-属性-更改图标-点击关机那个图标-ok,是不是很漂亮...

用js文件创建一个带参数的view client的快捷方式(类似的bat形式也可模仿实现),并实现自动登录

代码如下
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。
举报原因:
原因补充:

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