从Windows .lnk(快捷方式)文件中提取图标

我需要从 Windows快捷方式(.lnk)文件提取图标(或找到图标文件,如果它只是由快捷方式指向).

我不是要求从exe,dll等中提取图标.当我运行安装程序时,会创建有问题的快捷方式.并且快捷方式显示的图标不包含在快捷方式指向的.exe中.据推测,该图标嵌入在.lnk文件中,或者.lnk文件包含指向此图标所在位置的指针.但是我找到的所有工具都没有解决这个问题 – 他们都只是去了.exe.

非常感谢!

主题提供了有关 data contained in a .lnk file的有趣信息

sSHGetFileInfoss功能应该能够提取图标文件.

记录here,用于lnk文件

Path2Link := 'C:\Stuff\TBear S Saver.lnk';
SHGetFileInfo(PChar(Path2Link),ShInfo1,SizeOf(TSHFILEINFO),SHGFI_ICON);
// this ShInfo1.hIcon will have the Icon Handle for the Link Icon with
// the small ShortCut arrow added}

从第一个链接开始,您可以在c#中构建这样的实用程序,您可以在其中声明此函数

[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(
   string pszPath,uint dwFileAttributes,ref SHFILEINFO psfi,uint cbSizefileInfo,uint uFlags);

您还可以在autoit script language中构建一个实用程序,您可以在其中使用如下所示的函数

Func _ShellGetAssocIcon(Const $szFile,Const $IconFlags = 0)
    Local $tFileInfo = DllStructCreate($tagSHFILEINFO)
    If @error Then
        Return SetError(1,@extended,0)
    EndIf

    Local $Ret = DllCall("shell32.dll","int","SHGetFileInfo","str",$szFile,"dword",_
        "ptr",DllStructGetPtr($tFileInfo),"uint",DllStructGetSize($tFileInfo),BitOr($SHGFI_ICON,$IconFlags))
    MsgBox(0,@error)
    Return DllStructGetData($tFileInfo,"hIcon")
EndFunc

相关文章

Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...
Windows文件操作基础代码 Windows下对文件进行操作使用的一段...
Winpcap基础代码 使用Winpcap进行网络数据的截获和发送都需要...
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看...