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

来源:互联网 发布:java文件命名 编辑:程序博客网 时间:2024/05/22 05:18

平常我们操作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;}//加载快捷方式到内存Storagehr = 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

原创粉丝点击