MFC开发之从快捷方式获取路径
@TOC
正文
1、要注意不同的计算机登录用户名不一样,需要获取用户名
DWORD dwNameLen = 255; wchar_t szBuffer[255]; memset(szBuffer, 0, sizeof(szBuffer)); GetUserName(szBuffer, &dwNameLen);//获取电脑当前登录的用户名szBuffer 2、不能获取所有快捷方式的路径,可能和32位64位有关系,也可能是别的原因
//inFile是快捷方式文件名 //返回快捷方式所指向的文件名 CString ExpandShortcut(CString &inFile) { CString outFile = _T(" ");
ASSERT(inFile != _T(""));
IShellLink* psl;
HRESULT hres;
LPTSTR lpsz = inFile.GetBuffer(MAX_PATH);
hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID*)&psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf;
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
if (SUCCEEDED(hres))
{
ifndef _UNICODE
wchar_t wsz[MAX_PATH];
::MultiByteToWideChar(CP_ACP, 0, lpsz, -1, wsz, MAX_PATH);
hres = ppf->Load(wsz, STGM_READ);
else
hres = ppf->Load(lpsz, STGM_READ);
endif
if (SUCCEEDED(hres))
{
WIN32_FIND_DATA wfd;
HRESULT hres = psl->GetPath(outFile.GetBuffer(MAX_PATH),
MAX_PATH,
&wfd,
SLGP_UNCPRIORITY);
outFile.ReleaseBuffer();
}
ppf->Release();
}
psl->Release();
}
inFile.ReleaseBuffer();
return outFile;
}
- [原文链接]()
- 注:知识搬运,供学习交流使用,侵联删!