着眼于从 EXE 文件中将图标(ICO 文件)的所有大小提取为 PNG 图像,我注意到 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
Run Code Online (Sandbox Code Playgroud)
最终,这个Iconkey引起了我的注意,我发现它是根据图标主题规范解析的。四处搜寻,我找到了~/local/share/icons/hicolor/*/apps/包含这些图标文件的目录(每个文件夹包含3C17_foobar2000.0.png),我推测这也是 Wine 创建的。
我的问题是 Wine 是如何从应用程序(或快捷方式文件)生成这些图像文件的?
Wine 包含一个winemenubuilder程序来处理这个问题:它采用 Windows 快捷方式,并创建一个匹配的 FDO (FreeDesktop.Org).desktop文件。图标提取是其中的一部分,由open_module_icon和 相关函数处理。要提取图标,winemenubuilder找到与快捷方式对应的可执行文件(如果需要,可以选择等待它被创建),并使用 Wine\xe2\x80\x99s 函数加载它包含的资源LoadResource,找到图标,并将它们转换为适当的图标。图像格式。
wine winemenubuilder /path/to/link.lnk\nRun Code Online (Sandbox Code Playgroud)\n\n会将链接转换为.desktop文件,在 中~/.local/share/applications/wine/Programs,并提取可用图标,转换它们,并将它们存储在 的相应子目录中~/.local/share/icons。(我认为/path/to/link.lnk必须可以使用 Wine\xe2\x80\x99s 驱动器映射进行访问;它适用于.lnk已安装在 Wine 中的文件。)
wine winemenubuilder -t /path/to/link.lnk /path/to/icon.png\nRun Code Online (Sandbox Code Playgroud)\n\nlink.lnk将提取to指向的可执行文件中的第一个图标icon.png。
| 归档时间: |
|
| 查看次数: |
2835 次 |
| 最近记录: |