#include <shlobj.h> 关键引用的类IShellLink: IShellLink主要方法: 1、GetArguments:获得参数信息 2、GetDescription:获得描述信息 3、GetHotkey:获得快捷键 4、GetIconLocation:获得快捷方式图标 5、GetIDList:获得快捷方式的目标对象的item identifier list (Windows外壳中的每个对象如文件,目录和打印机等都有唯一的item identifiler list) 6、GetPath: 获得快捷方式的目标文件或目录的全路径 7、GetShowCmd:获得快捷方式的运行方式,比如常规窗口,最大化 8、GetWorkingDirectory:获得工作目录 9、Resolve:按照一定的搜索规则试图获得目标对象,即使目标对象已经被删除或移动,重命名 解析的处理流程: 1、初始化COM接口 2、创建IShellLink对象 3、从IShellLink对象中获取IPersistFile对象接口 4、操作IShellLink对象 5、释放IPersistFile对象接口 6、释放IShellLink对象 7、释放COM接口 //参数1:Lnk文件路径,参数2:返回存放目标路径 bool GetShellPath(Char *Src,Char *ShellPath) { bool blret=false; ::CoInitialize(NULL); //初始化COM接口 IShellLink *psl = NULL; //创建COM接口,IShellLink对象创建 HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID *)&psl); if (SUCCEEDED(hr)) { IPersistFile *ppf ; hr=psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); if (SUCCEEDED(hr)) { WCHAR wsz[MAX_PATH] = {0}; MultiByteToWideChar( CP_ACP, 0, Src, -1, wsz, MAX_PATH ) ; //转下宽字节 hr=ppf->Load(wsz, STGM_READ); //加载文件 if (SUCCEEDED(hr)) { WIN32_FIND_DATA wfd ; psl->GetPath(ShellPath,MAX_PATH, (WIN32_FIND_DATA*)&wfd,SLGP_SHORTPATH); //获取目标路径 blret=true; } ppf->Release(); } psl->Release(); //释放对象 } ::CoUninitialize(); //释放COM接口 return blret; }
时间: 2024-10-12 10:29:59