string getDesktopPath()
{
LPITEMIDLIST pidl;
LPMALLOC pShellMalloc;
char szDir[200];
if (SUCCEEDED(SHGetMalloc(&pShellMalloc)))
{
if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl))) {
// 如果成功返回true
SHGetPathFromIDListA(pidl, szDir);
pShellMalloc->Free(pidl);
}
pShellMalloc->Release();
}
return string(szDir);
}
void GetLinkPath(wchar_t *lpszLink, wchar_t *szPath, wchar_t *szParam)
{
HRESULT hres;
IShellLink* psl;
wchar_t szGotPath[MAX_PATH];
wchar_t szArguement[MAX_PATH];
WIN32_FIND_DATA wfd;
*szPath = 0; // assume failure
CoInitialize(0);
//Get a pointer to the IShellLink interface.
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *)&psl);
if (SUCCEEDED(hres)) {
IPersistFile* ppf;
//Get a pointer to the IPersistFile interface.
hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if (SUCCEEDED(hres)) {
//WCHAR wsz[MAX_PATH];
//Ensure that the string is Unicode.
//MultiByteToWideChar(CP_ACP, 0, lpszLink, -1, wsz,
// MAX_PATH);
// Load the shortcut.
hres = ppf->Load(lpszLink, STGM_READ);
if (SUCCEEDED(hres)) {
//Resolve the link.
hres = psl->Resolve(0, 0);
if (SUCCEEDED(hres)) {
//Get the path to the link target.
hres = psl->GetPath(szGotPath, MAX_PATH, (WIN32_FIND_DATA *)&wfd, SLGP_SHORTPATH);
if (SUCCEEDED(hres))
lstrcpy(szPath, szGotPath);
hres = psl->GetArguments(szArguement, 256);
if (SUCCEEDED(hres))
lstrcpy(szParam, szArguement);
}
}
//Release the pointer to the IPersistFile interface.
ppf->Release();
}
//Release the pointer to the IShellLink interface.
psl->Release();
}
if (hres)
lstrcpy(szPath, lpszLink);
CoUninitialize();
}
//pathdesk += "C:\\Users\\Public\\Desktop\\腾讯QQ.lnk
pathdesk += "\\腾讯QQ.lnk";
wstring lnkpath = stringToWstring(pathdesk);
GetLinkPath(const_cast
要特别注意传入的。lnk路径问题