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;
}
时间: 2024-10-12 10:29:59

VC怎么从快捷方式获取目标文件路径的相关文章

Atitit,通过pid获取进程文件路径&#160;java&#160;php&#160;&#160;c#.net版本大总结

Atitit,通过pid获取进程文件路径 java php  c#.net版本大总结 1. 通过PID获取进程路径的几种方法2 1.1. GetModuleFileNameEx 想获得进程可执行文件的路径最常用的方法是通过GetModuleFileNameEx函数获得可执行文件的模块路径这个函数从Windows NT 4.0开始到现在的Vista系统都能使用,向后兼容性比较好.2 1.2. 第二种方法是GetProcessImageFileName函数,这个函数在Windows XP及其以后的系

如何获取启动文件路径 GetModuleFileName

如何获取启动文件路径 GetModuleFileName CString GetExeDirPath() { char fn[MAX_PATH] = {0}; CString strExeDirPath; GetModuleFileName(NULL, strExeDirPath.GetBufferSetLength(MAX_PATH), MAX_PATH);//获取启动路径:"c:\Users\whl\Desktop\Example\Debug\Example.exe" CStrin

C/C++ 生成文件夹 删除文件夹 获取运行文件路径

最近要用MFC开发一个界面,里面有一个需求就是生成一个与可执行文件(exe文件)同名的文件夹,比如我的可执行文件路径是D:\KFS\codes\22222\Release\22222.exe,我需要在D:\KFS\codes\22222\Release路径下生成一个22222的文件夹放东西.查阅了一点资料之后,成功了.之后写了一个小demo.下面上代码: #include <windows.h> #include<iostream> #include<io.h> usi

wpf 前台获取资源文件路径问题

1 <ImageBrush ImageSource="YT.CM.CommonUI;component/Resource/FloadwindowImage/middle.png"/> YT.CM.CommonUI  这是一个类库名字 Resource 这是类库下的文件夹 FloadwindowImage 是Resource下的文件夹 middle.png 是FloadwindowImage下的一张图片 若在使用上句在wpf前台获取该类库下的文件夹中的图片资源,可能会报该路径

python获取当前文件路径以及父文件路径

1 2 3 4 5 6 #当前文件的路径 pwd = os.getcwd() #当前文件的父路径 father_path=os.path.abspath(os.path.dirname(pwd)+os.path.sep+".") #当前文件的前两级目录 grader_father=os.path.abspath(os.path.dirname(pwd)+os.path.sep+"..")   第一种方法: os.path.abspath(__file__) 假设ap

os.walk() 用于遍历目标文件路径的所有看见的看不见的文件和夹

import os def count_file_size(pathroot): print(pathroot) res = 0 for roots,dirs,files in os.walk(pathroot): for file in files: path = os.path.join(roots,file) print(path) res += os.path.getsize(path) return res path = os.path.dirname(__file__) print(

::GetModuleFileName 获取DLL文件路径

通过GetModuleHandle(NULL, .., .. ); 只能获取到 EXE文件所在路径,如果需要获取DLL路径怎么办? 有如下两种办法: 1. 从DllMain(hModule, …)中获取DLL句柄,并传入GetModuleHandle(); 但有些DLL被封装过的很难找到hModule,如: MFC的DLL, vstest的UnitTest DLL 等. 2.  变量 IMAGE_DOS_HEADER __ImageBase 可以转换为 hModule,传入GetModuleHa

linux 如何获取当前文件路径(source如何获取当前文件路径 bash如何获取当前文件路径)

bash  如何获取当前文件的绝对路径 #!/bin/bash export  bashpath=$(cd `dirname $0`;pwd) echo $bashpath source 文件获取当前文件的绝对路径 #!/bin/bash # 下面是输出当前文件的绝对路径 cd $(dirname $BASH_SOURCE) # echo $(pwd)/$(basename $BASH_SOURCE) temp_file=`echo $(pwd)/$(basename $BASH_SOURCE)

PHP获取当前文件路径信息的方法

文件名  test.php 1.__FILE__ 获取 “路径 + 文件名” : /var/www/test/test.php  echo __FILE__; //取得当前文件的路径:用魔术常量 __FILE__,这里的路径包含了文件名 2.basename获取 “文件名 ”: test.php  echo basename(__FILE__); 3.basename获取“不含扩展名的文件名”:test  echo basename(__FILE__, '.php'); 4.dirname获取“