获取桌面路径 和快捷方式.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<wchar_t *>(lnkpath.c_str()), qqpath, const_cast<wchar_t *>(param.c_str()));

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值