注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

分享,态度 ·~~

—— 十年太长,五年;如果可以回到五年前,你最想对那时候的自己说什么?

 
 
 

日志

 
 

C++ 获取快捷方式指向的路径  

2010-10-20 11:44:26|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

通常我们直接用ShellExecute函数来打开指向exe的link文件(即快捷方式,XX.lnk),这样的操作与直接打开exe一样,没有有特别的操作。但是在某些情况下,其他的AP有可能会动到操作系统的设定,在这种情况下,用ShellExecute函数来直接打开link文件(ShortCut)的方法就会失效,无论如何,如果能从link文件中直接得到exe的路径、然后再用ShellExecute打开,这会是最保险的方式。下面的例程展示了这样的方法:

HRESULT CManage::OpenExeLinkFile(TCHAR *linkPath)
{
    TCHAR szLinkPath[MAX_PATH] = {0};
    lstrcpy(szLinkPath,linkPath);

    TCHAR extName[MAX_PATH] = {0};
    _wsplitpath(szLinkPath, NULL, NULL, NULL, extName);
    if (lstrcmp(extName, L".lnk") == 0)
    {
        if (GetShortCutFile(szLinkPath, linkPath, MAX_PATH))
        {
            lstrcpy(szLinkPath,linkPath);
            _wsplitpath(szLinkPath, NULL, NULL, NULL, extName);
            if (lstrcmp(extName, L".exe") != 0)
            {
                return S_OK; //not exe, return
            }
        }
    }

    TCHAR *pFind1=_tcsrchr(szLinkPath,L'\\');
    if (pFind1 != NULL)
    {
        *pFind1 = L'\0';
        pFind1 = NULL;
    }

    ShellExecute(NULL,_T("Open"),linkPath,NULL,szLinkPath,SW_SHOWNORMAL);

    return S_OK;
}

BOOL CManage::GetShortCutFile(WCHAR* ShortcutFile,WCHAR* buf,int nSize)  
{   
    HRESULT           hres;   
    IShellLink        *psl;   
    IPersistFile      *ppf;   
    WIN32_FIND_DATA   fd;


    hres = CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(void**)&psl);   
    if(!SUCCEEDED(hres))   
        return   false; 

    hres = psl->QueryInterface(IID_IPersistFile,(void**)&ppf);   
    if(SUCCEEDED(hres))   
    {   
        //wchar_t wsz[MAX_PATH];   //buffer   for   Unicode   string
        //MultiByteToWideChar(CP_ACP,0,ShortcutFile,-1,wsz,MAX_PATH);   
        //hres = ppf->Load(wsz,STGM_READ);

        hres = ppf->Load(ShortcutFile,STGM_READ);
        if(SUCCEEDED(hres))   
        hres = psl->GetPath(buf,nSize,&fd,0);   
        ppf->Release();   
    }   
    psl->Release(); 

    return SUCCEEDED(hres);  
}

  评论这张
 
阅读(3411)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017