3.COM使用实例——快捷方式创建和解析

发布时间:2017-6-29 10:43:36编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"3.COM使用实例——快捷方式创建和解析",主要涉及到3.COM使用实例——快捷方式创建和解析方面的内容,对于3.COM使用实例——快捷方式创建和解析感兴趣的同学可以参考一下。

平常我们操作Windows系统都是在资源管理器explorer.exe中,微软提供了COM接口供我们操作和扩展资源管理器行为。实际上微软的很多接口是通过COM来开放的,COM已经成为Windows系统事实上的接口标准了。上节介绍如何编写最简单的COM,本节通过[快捷方式创建和解析]看下如何使用COM调用Windows相关功能。


1.创建快捷方式

//功能:创建快捷方式
//参数:pszShortCut—快捷方式名称,lpss-快捷方式参数
HRESULT SHCreateShortcutEx(LPTSTR pszShortCut, LPSHORTCUTSTRUCT lpss)
{
	if (lpss == NULL)
	{
		return E_FAIL;
	}

	IShellLink*	  pShellLink = NULL;
	IPersistFile* pPersistFile = NULL;

	//内存中创建快捷方式
	HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, reinterpret_cast<LPVOID*>(&pShellLink));
	if (FAILED(hr))
	{
		return hr;
	}

	pShellLink->SetPath(lpss->pszTarget);
	pShellLink->SetDescription(lpss->pszDescription);
	pShellLink->SetHotkey(lpss->wHotkey);
	pShellLink->SetIconLocation(lpss->pszIconPath, lpss->wIconIndex);

	//保存到磁盘上
	hr = pShellLink->QueryInterface(IID_IPersistFile, reinterpret_cast<LPVOID*>(&pPersistFile));
	if (FAILED(hr))
	{
		pShellLink->Release();
		return hr;
	}

	hr = pPersistFile->Save(pszShortCut, TRUE);

	pShellLink->Release();
	pPersistFile->Release();
	return hr;
}

2.解析快捷方式

//功能:解析快捷方式
//参数:pszShortCut—解析快捷方式,lpss-解析出的快捷方式参数
HRESULT SHResolveShortcut(LPTSTR pszShortCut, LPSHORTCUTSTRUCT lpss)
{
	if (lpss == NULL)
	{
		return E_FAIL;
	}

	IShellLink*	  pShellLink = NULL;
	IPersistFile* pPersistFile = NULL;
	HRESULT hr = E_FAIL;

	do
	{
		//获取操作接口
		hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, reinterpret_cast<LPVOID*>(&pShellLink));
		if (FAILED(hr))
		{
			break;
		}

		hr = pShellLink->QueryInterface(IID_IPersistFile, reinterpret_cast<LPVOID*>(&pPersistFile));
		if (FAILED(hr))
		{
			break;
		}

		//加载快捷方式到内存Storage
		hr = pPersistFile->Load(pszShortCut, STGM_READ);
		if (FAILED(hr))
		{
			break;
		}

		//解析快捷方式
		hr = pShellLink->Resolve(NULL, SLR_ANY_MATCH);
		if (FAILED(hr))
		{
			break;
		}

 		WIN32_FIND_DATA fd;

		//导出信息
		pShellLink->GetPath(lpss->pszTarget, MAX_PATH, &fd, SLGP_SHORTPATH);
		pShellLink->GetDescription(lpss->pszDescription, MAX_PATH);
		pShellLink->GetHotkey(&lpss->wHotkey);
		pShellLink->GetIconLocation(lpss->pszIconPath, MAX_PATH, &lpss->wIconIndex);
	}
	while(false);

	if(pShellLink)
	{
		pShellLink->Release();
	}

	if(pPersistFile)
	{
		pPersistFile->Release();
	}

	return hr;
}


可以看到操作COM接口很简单,创建对应的COM对象,不需要关心具体实现的位置和细节,类似功能的接口可以互查。


完整代码下载链接

原创,转载请注明来自http://blog.csdn.net/wenzhou1219



上一篇:Java开发中的23种设计模式详解---
下一篇:遇到问题----

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款