最近的项目需要解析Windows系统的快捷方式(.lnk),研究发现,虽然快捷方式的后缀都是(.lnk),但其实存在两种不同的格式,如图:

右侧的 QQ 快捷方式则是我们常见的那种,目标是指向一个 .exe,而左侧的 python 的快捷方式并没有目标位置,而且目标也不指向一个特定文件。

用 IShellLink 去解析 QQ 的快捷方式(一般的快捷方式)没有任何问题(网上搜代码一堆,这里就不贴了),但用它来获取 python 那种图标就不行了,IShellLink 解 python 快捷方式,返回的目标文件是存放在 %appdata%\Roaming\Microsoft\Installer\{DCD5B320-89D9-4C7C-9E8B-84496588744D}\python_icon.exe。

在 MSDN 折腾了半天,搜到了 stackoverflow 的这个:

https://stackoverflow.com/questions/11776023/advertised-shortcuts-vs-non-advertised-shortcuts-in-windows-setup-project

里面有位大佬这么说:

大概就是说像 python 这种快捷方式就是一个 advertised shortcut,是 msi 安装包创建出来的快捷方式,支持各种各样高级功能,自修复什么的。

于是,在 MSDN msi 相关的 API 中,中找到了这个接口 MsiGetShortcutTargetW ,里面的 Remark 写道:

翻译下就是:如果这个 API 加载了这个快捷方式失败了,就用 IShellLink 接口获取,否则这就是个 Advertised Shortcut了。OK,看到这,问题解决了。

贴下 MsiGetShortcutTarget 的代码:

#include <msi.h>
#pragma comment(lib, "msi.lib")//
//Get the target file of a advertised shortcut
//
BOOL GetMsiShortCutTarget(LPCWSTR strShortcutFile, LPWSTR strTargetFile, DWORD& nSize)
{if (!strShortcutFile || !strTargetFile)return FALSE;//Extract from msi api. See: Windows Installer Advertised ShortcutsWCHAR szProductCode[39] = {};WCHAR szComponentCode[39] = {};if (S_OK == MsiGetShortcutTarget(strShortcutFile, szProductCode, NULL, szComponentCode)){INSTALLSTATE nState = MsiGetComponentPath(szProductCode, szComponentCode, strTargetFile, &nSize);if (nState == INSTALLSTATE_LOCAL || nState == INSTALLSTATE_SOURCE){return TRUE;}}//TODO Extract from IShellLink//...return FALSE;
}//usage
WCHAR szTargetFile[MAX_PATH] = {};
DWORD dwSize = MAX_PATH;
GetMsiShortCutTarget(L"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Python 2.7\\IDLE (Python GUI).lnk", szTargetFile, dwSize);
OutputDebugString(szTargetFile);

Windows系统没有目标位置的快捷方式及其目标文件获取相关推荐

  1. 怎么恢复服务器电脑删除的文件,windows系统中u盘上被删除的文件怎么恢复?_网站服务器运行维护,windows,u盘,删除,恢复...

    win10装cad提示权限不够怎么办?_网站服务器运行维护 解决方法:跳过管理员权限来进行安装.步骤:1.在经常要使用的程序上右键单击,选择"兼容性疑难解答":2.点击" ...

  2. RoboMaster视觉教程(5)目标位置解算(通过像素点获取转角)

    RoboMaster视觉教程(5)目标位置解算(通过像素点获取转角) 概览 直接使用像素坐标的缺陷 摄像头标定 根据小孔成像原理得到需要的转角 角度测量验证 概览 在识别到目标后,有一个很重要的问题: ...

  3. linux补丁更新服务器地址,windows系统之WSUS服务器:更改WSUS更新文件的路径

    wsus补丁硬盘空间不够 wsus补丁硬盘空间不够.我部署了WSUS服务器,使用正常,现在由于补丁下载的硬盘空间不够了,我想把补丁下载的路径改到一个比较大的硬盘上,该怎么操作? 当磁盘不足的时候,如果 ...

  4. windows:windows系统上的常用软件工具快捷方式

    windows 常用命令 查看端口的使用情况 netstat -ano // 查看所有的端口使用情况 用命令以管理员的方式打开文件 notepad 文件 IDEA 快捷键 编辑类 #光标多点 Shif ...

  5. windows系统中使用cmd中type命令查看文件内容

    在windows的cmd中输入如下命令: type  文件名 可以查看文件中的内容

  6. Windows系统,如何查看正在被使用的文件(夹)被占用情况

    每当我们要删除文件或文件夹时,经常会出现文件因为正在被占用而导致无法删除,如图: 如果当你必须要删除这个文件(夹),却又不知道被哪个程序占用,可用如下方法: 打开windows的任务管理器 选择[性能 ...

  7. windows系统下递归遍历目录下的所有文件

    c++代码如下: int GetAllFilepathFromfolder(char* Path) {char szFind[MAX_PATH];WIN32_FIND_DATA FindFileDat ...

  8. windows系统bat批处 注册一个exe执行文件变成服务

    在.exe的同级目录下写 .bat 软件名字.exe --service-install 服务名字 --service-start服务名字 --service-stop 服务名字 --service- ...

  9. 破解系统密码与重装windows系统

    数据来源 一.利用5次shift漏洞破解win7密码 1.1 漏洞   1. 在未登录时,连续按5次shift键,弹出程序C:\Windows\System32\sethc.exe         2 ...

  10. Silvaco TCAD 2012(2014) 在Windows系统的安装教程

    Silvaco TCAD 2012(2014) 在Windows系统的安装教程 1.运行安装文件:Silvaco-tcad-2012-00-win,在"Install License Ser ...

最新文章

  1. 我理解的【旁路代理】
  2. HDU-5123-who is the best?
  3. 学习笔记(28):Python网络编程并发编程-死锁与递归锁
  4. 成为高手前必懂的TCP干货
  5. 二叉树遍历代码_二叉树的题,就那几个框架,枯燥至极
  6. php 生成随机数组,利用php如何获取随机数组列表
  7. 移动磁盘显示由于IO设备错误,无法运行此项请求要怎样寻回资料
  8. 安全结束线程 linux,启动线程以及安全终止线程
  9. windows10如何注销
  10. 三年级计算机上册期末测试题,三年级上册期末试卷
  11. Masimo与Penington研究所合作,提升公众对处方阿片类药物过量危害的认识
  12. BZOJ 3162:独钓寒江雪
  13. php打开EXCEL过慢,打开excel很慢,编辑某个工作表很卡
  14. 关于GX WORKS2中M8002、M8012、M8013无法使用的问题
  15. PC端 kindle 导入 电子书
  16. 某音提取真机cookie,cookie参数解密
  17. python -m pip install --upgrade pip
  18. Application context和Activity context的区别
  19. centos怎么卸载mysql
  20. 看ChatGPT这形势,留给我们开发人员的时间不多了

热门文章

  1. Fama-French五因子模型实用攻略
  2. 四阶龙格库塔matlab计算例题,四阶龙格库塔法matlab实现
  3. 有限元微分方程求解方法,能量原理,瑞利里兹法,伽辽金法(曾攀有限元分析)
  4. BCH编码——c语言代码
  5. 【2】基于深度神经网络的脑电睡眠分期方法研究(标签导入)
  6. python,opencv利用自适应阈值分割法实现微滴图像分割并计数
  7. 费曼先生 找数学家“麻烦”
  8. 汉字计算机编码是谁发明的,神奇的汉字编码,了解一下
  9. C++面试宝典(纯干货)
  10. Epson Perfection V370 Photo图片扫描自动控制