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. 纯js分页代码(简洁实用)

    纯js写的分页代码. 复制代码代码如下: //每页显示字数 PageSize=5000; //分页模式 flag=2;//1:根据字数自动分页 2:根据[NextPage]分页 //默认页 start ...

  2. JAVA四种线程池实例

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗?   Java   1 2 3 4 5 6 7 new Thread(new Runnable() {        ...

  3. PHP环境搭建(Windows8.1+IIS8.5+PHP5.6+PHPStorm)

    第一次接触php是在2014-5月份左右,当时是自己的主攻方向是C#,对php比较排斥, 其中很多一部分原因,就是PHP的断点调试一直无法配置成功,用echo打印日志的方式排错,使得自己对php心生怨 ...

  4. android 中文转拼音

    /** * 将汉字转换为拼音 * @author Champion.Wong * */ public class Trans2PinYin { private static int[] pyvalue ...

  5. Ubuntu12.10编译openwrt遇到的错误

    由于Openwrt有很多工具是要先编译的,在Ubuntu12.10平台下编译openwrt时就遇到了下面这样的错误:elf.cpp: In static member function 'static ...

  6. 【转载】Powershell获取世纪互联Office365所有用户最后一次登录时间

    #$Mails=get-mailbox -ResultSize 10 $Mails=get-mailbox -ResultSize Unlimited $Mails | Measure-Object ...

  7. OBIEE 11g:Error:nQSError 36010 Server version 318 cannot read the newer version of the repository

    biee11g升级到最新版以后,发现了一些bug,需要回退到原来的版本,卸载掉升级包以后,启动BI服务,会报上述错误.这是因为资料库文件已经升级为了最新版本.这时候我们需要将资料库文件进行降版本操作. ...

  8. 调皮的转义之addslashes

    背景: php自5.3版本开始废除set_magic_quotes_runtime函数,并在5.4及以后版本中移除了该函数 今天程序在向mysql插入一个serialize序列化后的数组时,由于一个数 ...

  9. Linux流量监控工具 - iftop (最全面的iftop教程)

    在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop. 一.if ...

  10. java 进制转化

    public static void toBinary(int num){ trans(num,1,1); } public static void toHex(int num){ trans(num ...