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

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

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

我需要从一个windows快捷方式(.lnk)文件中提取图标(或者find图标文件,如果只是指向快捷方式)。

我不问从EXE的,DLL等提取图标。有问题的快捷方式创build时,我运行一个安装程序。 并且快捷方式显示的图标不包含在快捷方式指向的.exe文件中。 假定图标embedded在.lnk文件中,或者.lnk文件包含一个指向此图标所在位置的指针。 但是我find的所有工具都没有解决这个问题 – 他们都只是去了.exe。

非常感谢!

如果exe文件在Program files中,则在运行时更改任务栏图标

我在哪里可以findwindows 7 UX指南中build议的图标/animation?

如何以编程方式更改.bat文件的图标?

了解* nix图标的path

哪里可以find漂亮的外观和Vista外观相似的用户界面图标?

在linux可执行文件中embedded一个图标

全球favicon.ico和iOS图标

我怎样才能取代C#窗体可执行的应用程序图标?

在windows中更改desktop.ini不会自动更新文件夹图标

我如何以编程方式 *** 纵windows桌面图标位置?

此线程提供有关.lnk文件中包含的数据的有趣信息

sSHGetfileInfoss函数应该能够提取图标文件。

记录在这里 ,并用于lnk文件:

Path2link := 'C:StuffTBear 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脚本语言构建一个实用程序,在那里你可以使用这个声明:

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

使用Shell32方法访问链接:

String lnkPath = @"C:UsersPriceRDesktopMicrosoft Word 2010.lnk"; //--- run microsoft word var shl = new Shell32.Shell(); // Move this to class scope lnkPath = System.IO.Path.GetFullPath(lnkPath); var dir = shl.nameSpace(System.IO.Path.GetDirectoryname(lnkPath)); var itm = dir.Items().Item(System.IO.Path.Getfilename(lnkPath)); var lnk = (Shell32.ShelllinkObject)itm.Getlink; //lnk.GetIconLocation(out strIcon); String strIcon; lnk.GetIconLocation(out strIcon); Icon awIcon = Icon.ExtractAssociatedIcon(strIcon); this.button1.Text = ""; this.button1.Image = awIcon.ToBitmap();

您也可以自己解析.lnk文件,看到这个pdf或这篇文章的快捷方式文件格式的细节。

或者你可以使用这个问题的答案中提到的Shelllink类。

在2010年,微软终于发布了LNK文件格式的官方规范 。 当然,它比网络上的反向工程规范更精确,更详细。

为了完整起见,下面是shell链接和快捷方式的MSDN描述。

为此添加更多的资源,因为可以假定你不是应用程序的图标,也不是在左下角有快捷方式的图标:

以下是使用WinAPI的IShelllink解析LNK格式的方法

一个IShelllink定义

LNK格式,如果你不想使用IShelllink解析它

我用这个来获取没有添加快捷箭头迷你图标的图标作为图像:

using IWshRuntimelibrary;

Image ShortcutIcon = System.Drawing.Icon.ExtractAssociatedIcon(((IWshShortcut)new WshShell().CreateShortcut(file)).TargetPath).ToBitmap();

如果你想把它作为一个图标,而不是:

Icon ShortcutIcon = System.Drawing.Icon.ExtractAssociatedIcon(((IWshShortcut)new WshShell().CreateShortcut(file)).TargetPath);

总结

以上是内存溢出为你收集整理的从Windows .lnk(快捷方式)文件中提取图标全部内容,希望文章能够帮你解决从Windows .lnk(快捷方式)文件中提取图标所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1283208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存