zoukankan      html  css  js  c++  java
  • VC怎么从快捷方式获取目标文件路径

    #include <shlobj.h> 
    
    关键引用的类IShellLink:
    
    IShellLink主要方法:
    1、GetArguments:获得参数信息 
    2、GetDescription:获得描述信息
    3、GetHotkey:获得快捷键
    4、GetIconLocation:获得快捷方式图标  
    5、GetIDList:获得快捷方式的目标对象的item identifier list (Windows外壳中的每个对象如文件,目录和打印机等都有唯一的item identifiler list)
    6、GetPath: 获得快捷方式的目标文件或目录的全路径
    7、GetShowCmd:获得快捷方式的运行方式,比如常规窗口,最大化
    8、GetWorkingDirectory:获得工作目录 
    9、Resolve:按照一定的搜索规则试图获得目标对象,即使目标对象已经被删除或移动,重命名
    
    
    解析的处理流程:
    
    1、初始化COM接口
    2、创建IShellLink对象
    3、从IShellLink对象中获取IPersistFile对象接口
    4、操作IShellLink对象
    5、释放IPersistFile对象接口
    6、释放IShellLink对象
    7、释放COM接口
    
    //参数1:Lnk文件路径,参数2:返回存放目标路径
    bool GetShellPath(Char *Src,Char *ShellPath)
    {
          bool blret=false;
          ::CoInitialize(NULL); //初始化COM接口
          IShellLink *psl = NULL;
          //创建COM接口,IShellLink对象创建
          HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID *)&psl);
          if (SUCCEEDED(hr))
          {
              IPersistFile *ppf ;
              hr=psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);
              if (SUCCEEDED(hr))
             {
                 WCHAR wsz[MAX_PATH] = {0};
                 MultiByteToWideChar( CP_ACP, 0, Src, -1, wsz, MAX_PATH ) ;    //转下宽字节
                 hr=ppf->Load(wsz, STGM_READ);    //加载文件
                 if (SUCCEEDED(hr))
                 {
                         WIN32_FIND_DATA wfd ;
                         psl->GetPath(ShellPath,MAX_PATH, (WIN32_FIND_DATA*)&wfd,SLGP_SHORTPATH);  //获取目标路径
                         blret=true;
                 }
                 ppf->Release(); 
             }
             psl->Release();  //释放对象
           }
           ::CoUninitialize();   //释放COM接口
           return blret;
    }
  • 相关阅读:
    [已解决] Python logging 重复打印日志信息
    scrapy
    Python 元编程
    MySQL性能优化 分区
    SQL Mode
    Golang 接口
    Python partial
    栈、队列(链表实现)
    Golang 位向量
    Java50题——学习以及思考
  • 原文地址:https://www.cnblogs.com/Lthis/p/4243812.html
Copyright © 2011-2022 走看看