Wine 如何為開始菜單條目生成圖像文件?
著眼於從 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
最終,
Icon
密鑰引起了我的注意,我發現它根據Icon Theme Specification解決了。到處尋找,我找到了~/local/share/icons/hicolor/*/apps/
包含這些圖示文件的目錄(每個文件夾都包含3C17_foobar2000.0.png
),我再次假設是 Wine 創建的。我的問題是 Wine 是如何從應用程序(或快捷方式文件)生成這些圖像文件的?
Wine 包含一個
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
。