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. WordPress 主题开发 - (三) 开发工具 待翻译

    Before we get started building any WordPress Theme, we’re going to need to get our development tools ...

  2. 重拾C,一天一点点_4_随想

    刚才顺便又把二分默写了一遍,还好,这次比较顺利.算法这一块,一直是自己一块痛处,有时感觉自己的脑瓜子怎么就这么笨,后一想觉得肯定是锈逗了,确实啊,这么长时间不思考的脑子能机灵到哪呢?早就意识到这个问题 ...

  3. GridView数据源绑定的一个小问题

    在使用GridView绑定数据源的时候,遇到了一个问题,因为图简单,没有注意到,贴出错误截图: 找了半天没有找出错误,在网上找了之后,才发现是一个细节引起的错误. 后台是这样写的: namespace ...

  4. Boa练习程序2

    做一个地址簿的gui. #Boa:Frame:AddressEntry import wx def create(parent): return AddressEntry(parent) [wxID_ ...

  5. Python编码与解码

    # -*- coding: utf-8 -*- # 直接保存为Python脚本,对照执行结果会好看点. # 实验的内容都是在Python 2.7.x下进行的. # Python3默认采用unicode ...

  6. SQL Server Management Studio Keyboard shortcuts

    一些平时在SQL Server Management Studio 使用到的快捷键 F5 (Ctrl+x)执行选中部分的语句,没有选中则全文执行 Ctrl+L 现实执行计划(估计) Ctrl+M 在运 ...

  7. CrossDomain.xml的作用及其简单用法

    使用crossdomain.xml让Flash可以跨域传输数据 本文来自http://www.mzwu.com/article.asp?id=975 一.概述 位于www.mzwu.com域中的SWF ...

  8. Daject初探之Record模型

    上一篇博文我简单介绍了Daject以及Daject的Table模型,Table模型是对一张数据表的抽象,从数据表的级别处理数据,而Record模型是对单条数据记录的抽象,从记录的级别处理数据. 这一篇 ...

  9. internet协议

    internet协议入门 前言 劳于读书,逸于作文. 原文地址:internet协议入门 博主博客地址:Damonare的个人博客 博主之前写过一篇博客:网络协议分析,在这篇博客里通过抓包,具体的分析 ...

  10. python 笔记总结

    python  3.5 面向对象:类:具有同种属性的对象称为类,是个抽象的概念.比如说:汽车.人.狗.神:对象:日常生活中的所有东西都是对象,是类的实例化.比如说:推土车是汽车的实例化:姚明是人的实例 ...