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

3
我正在尝试从“开始菜单”文件夹中的所有快捷方式提取图标。到目前为止,我已经成功遍历了目录树,现在需要一些方法来提取每个快捷方式的图标。我尝试了互联网上建议的几种方法,但似乎都无法完全实现。 方法1:使用名为ResourcesExtract的程序通过os.system()从.lnk文件中提取图标。但很快我发现这对.lnk文件无效,只适用于.exe或.dll文件。
import os

os.system(f"resourcesextract.exe /source {shortcut}")

方法二:使用pywin32库相对容易地获取快捷方式的目标,然后使用ResourcesExtract从目标中提取图标文件。不幸的是,由于某些指向没有图标的.exe文件的快捷方式,这种方法只适用于部分程序。

import os
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")

target = shell.CreateShortCut(shortcut).TargetPath
os.system(f"resourcesextract.exe /source {target}")

方法三:使用pywin32获取图标目录。这仅适用于我需要它工作的约120个快捷方式中的大约300个。

import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")

icon, status = str(shell.CreateShortCut(shortcut).IconLocation).split(",")

我也找到了一种使用.NET框架的方法,但我不知道如何将其与Python接口起来,或者它是否会起作用。


有没有人知道一种从所有快捷方式中提取.lnk文件图标的在Python上可行的方法?


你可以使用pythonnet在.NET框架下运行它,但我不知道有什么工具可以从lnk文件中提取图标。 - undefined
1个回答

1
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
ShortCut = shell.CreateShortCut('example.lnk')
icon_location = ShortCut.IconLocation

它对我有效。


这个方法只适用于我需要提取的图标中大约四分之一,因为其余的.lnk文件都有嵌入的图标。这种方法只能用于具有外部图标文件的文件。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接