着眼于将图标(ICO 文件)的所有尺寸提取为 PNG 图像来自 EXE 文件,我注意到 Wine 似乎会自动执行此操作。
安装后foobar2000,Wine(我推测)在 处创建了一个桌面条目~/.local/share/applications/wine/Programs/foobar2000.desktop
,包含以下内容:
[Desktop Entry]
Name=foobar2000
Exec=env WINEPREFIX="$HOME/.wine" wine C:\\\\windows\\\\command\\\\start.exe /Unix "$HOME/.wine/dosdevices/c:/users/Public/Start\\ Menu/Programs/foobar2000.lnk"
Type=Application
StartupNotify=true
Comment=Play, organize and tag your music.
Path=$HOME/.wine/dosdevices/c:/Program Files (x86)/foobar2000
Icon=3C17_foobar2000.0
最终,Icon
钥匙引起了我的注意,我发现它是根据图标主题规范。四处搜寻,我找到了~/local/share/icons/hicolor/*/apps/
包含这些图标文件的目录(每个文件夹包含3C17_foobar2000.0.png
),我推测这也是 Wine 创建的。
我的问题是 Wine 是如何从应用程序(或快捷方式文件)生成这些图像文件的?
答案1
葡萄酒包括winemenubuilder
程序负责处理这个问题:它采用 Windows 快捷方式,并创建一个匹配的 FDO (FreeDesktop.Org).desktop
文件。图标提取是其中的一部分,由open_module_icon
和 相关函数处理。要提取图标,winemenubuilder
找到与快捷方式对应的可执行文件(如果需要,可以选择等待它被创建),并使用 Wine 的功能加载它包含的资源LoadResource
,找到图标,并将它们转换为适当的图像格式。
wine winemenubuilder /path/to/link.lnk
会将链接转换为.desktop
文件,在 中~/.local/share/applications/wine/Programs
,并提取可用图标,转换它们,并将它们存储在 的相应子目录中~/.local/share/icons
。 (我认为/path/to/link.lnk
必须可以使用 Wine 的驱动器映射进行访问;它可以很好地处理.lnk
Wine 中安装的文件。)
wine winemenubuilder -t /path/to/link.lnk /path/to/icon.png
link.lnk
将提取to指向的可执行文件中的第一个图标icon.png
。