1. // 枚举桌面上应用程序的lnk路径
  2. void EnumDesktopLnkPath()
  3. {
  4. WCHAR szPath[MAX_PATH] = {0};
  5. SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, 0);
  6. IShellFolder* pShell = NULL;
  7. if(FAILED(SHGetDesktopFolder(&pShell)))
  8. {
  9. return ;
  10. }
  11. IShellFolder* pFolder = NULL;
  12. ITEMIDLIST* pItem = NULL;
  13. if(FAILED(pShell->ParseDisplayName(NULL, NULL, szPath, NULL, &pItem, NULL)))
  14. {
  15. return ;
  16. }
  17. if(FAILED(pShell->BindToObject(pItem, NULL, IID_IShellFolder, (LPVOID*)&pFolder)))
  18. {
  19. return ;
  20. }
  21. pShell->Release();
  22. if(NULL == pFolder)
  23. {
  24. return ;
  25. }
  26. IEnumIDList* pEnum = NULL;
  27. if(FAILED(pFolder->EnumObjects(NULL, SHCONTF_NONFOLDERS, &pEnum)))
  28. {
  29. return ;
  30. }
  31. pItem = NULL;
  32. ULONG ulFetched = 0;
  33. WCHAR szLnkPath[MAX_PATH] = {0};
  34. WCHAR szLnkName[MAX_PATH] = {0};
  35. LPCWSTR pszLnkName(L".lnk");
  36. WIN32_FIND_DATAW fd = {0};
  37. while(S_OK == pEnum->Next(1, &pItem, &ulFetched))
  38. {
  39. SHGetDataFromIDListW(pFolder, pItem, SHGDFIL_FINDDATA, &fd, sizeof(fd));
  40. swprintf(szLnkName, L"%s", fd.cFileName);
  41. if(0 == wcscmp(wcsrchr(szLnkName, L'.'), pszLnkName))
  42. {
  43. swprintf(szLnkPath, L"%s//%s", szPath, szLnkName);
  44. AfxMessageBox(CString(szLnkPath));
  45. //ParseLnk2Path(szLnkPath);
  46. }
  47. }
  48. pEnum->Release();
  49. pFolder->Release();
  50. }
  51. // 由程序的Lnk路径得到对应的绝对路径
  52. BOOL ParseLnk2Path(LPCWSTR pszLnkName)
  53. {
  54. ::CoInitialize(NULL);
  55. IShellLink* pShell = NULL;
  56. IPersistFile* pFile = NULL;
  57. if(S_OK == ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&pShell))
  58. {
  59. if(S_OK == pShell->QueryInterface(IID_IPersistFile, (LPVOID*)&pFile))
  60. {
  61. pFile->Load(pszLnkName, STGM_READWRITE);
  62. TCHAR szPath[MAX_PATH] = {0};
  63. pShell->GetPath(szPath, MAX_PATH, NULL, SLGP_UNCPRIORITY);
  64. AfxMessageBox(CString(szPath));
  65. }
  66. }
  67. pShell->Release();
  68. pFile->Release();
  69. ::CoUninitialize();
  70. return TRUE;
  71. }
 

http://blog.csdn.net/visualeleven/article/details/6433330

枚举桌面应用程序lnk路径并得到对应程序的绝对路径(使用SHGetDesktopFolder函数枚举,然后使用COM查询IShellFolder,IShellLink和IPersistFile接口)的更多相关文章

  1. 【C#】获取当前系统桌面、我的照片、我的文档等路径

    获取当前系统桌面.我的照片.我的文档等路径   using System; using System.Collections.Generic; using System.ComponentModel; ...

  2. JAVA文件中获取路径及WEB应用程序获取路径方法

    JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...

  3. 二叉树中和为某一值的路径 牛客网 程序员面试金典 C++ Python

    二叉树中和为某一值的路径 牛客网 程序员面试金典 题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一 ...

  4. mac通过wine运行windows程序(将文件关联到windows程序notepad++)

    windows程序功能强大且已经习惯使用了,用mac总感觉不给力,例如记事本工具Notepad++就非常优秀.下面介绍如何在mac系统下通过wine来安装使用notepadd++程序. 1.安装win ...

  5. 使用LabVIEW如何生成应用程序(exe)和安装程序(installer)

    主要软件:   LabVIEW Development Systems>>LabVIEW Professional Development System主要软件版本:   2012主要软件 ...

  6. 在Vista以上版本运行WTL程序,有时候会提示“这个程序可能安装补正确...”的错误

    在Win7/Vista下,如何以兼容模式运行exe?     https://msdn.microsoft.com/en-us/library/dd371711(VS.85).aspx     问题描 ...

  7. 《微信小程序七日谈》- 第六天:小程序devtool隐藏的秘密

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩: 第五 ...

  8. 应用程序初次运行数据库配置小程序(Java版)

    应用程序初始化数据库配置小程序 之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的 ...

  9. 简述在ADO中使用接口的抽象数据提供程序以及ADO.NET数据提供程序工厂模型

    如何在ADO中使用接口的抽象数据提供程序 在cofig中 appSettings下,配置数据连接类型 <appSettings> <!--这个键值映射到枚举值中的某个值--> ...

随机推荐

  1. Mysql 的MYISAM引擎拷贝出现异常——Incorrect information in file 'xxx.frm'

    MYISAM引擎有三个文件 .FRM    存储表结构 .MYD    存储数据 .MYI   存储索引 当复制表时,将这三个文件同时复制到指定目录下. 异常处理: 1. Incorrect info ...

  2. 使用cookie解决微信不能存储localStorage的问题

    最近在开发基于微信的Web页面时,发现有些机型不能存储信息到localStorage中,或者是页面一旦关闭,存储的信息也失效了. 于是想到用cookie来替代localStorage,存储一些简单的数 ...

  3. Excel REPT函数使用

    需要制作1K大小的数据 使用Excel REPT函数可以迅速制造 Excel REPT 函数 =REPT(1,1024) 结果直接黏贴进txt文件,注意删除尾空格.

  4. [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(二)

    三.配置主机与备机的ssh无密码登录1.主机s1到备机s3的无密码登录a.创建ssh目录[root@s1 ~]# mkdir /opt/PostgresPlus/9.2AS/.sshb.修改ssh目录 ...

  5. windows下SSH客户端远程访问Linux出现错误

  6. HttpWebRequest,HttpWebResponse的用法和用途

    1.用途:HettpWebRequest,HettpWebResponse用途和webServers的作用差不多,都是得到一个页面传过来的值.HttpWebRequest 2.用法:--------- ...

  7. WPF九宫格HLSL版

    偶遇需要再WPF里面处理九宫格,因不喜截图缩放,即写成了HLSL的Effcect sampler2D input : register(s0); /// <summary>The floa ...

  8. android 中使用回调方法(适用于自定义view传值到activity、adapter传值到activity)

    如图所示: 每当listview中有选中的操作时都需要发消息给activity,用来实时改变真实需要支付的剩余金额. 代码暂不公开啦!公司项目!

  9. 原型prototype -- 深入理解javascript

    /* 原型Prototype */ //一.原型 //原型使用一 var calculator = function (dlg, tax) { this.dlg = dlg; this.tax = t ...

  10. 百度地图API使用

    1.引用js脚本 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&am ...