获取桌面路径 和快捷方式.exe路径

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(lnkpath.c_str()), qqpath, const_cast(param.c_str()));

 

要特别注意传入的。lnk路径问题

你可能感兴趣的:(获取桌面路径 和快捷方式.exe路径)