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;
}