如何获取Virtmgmt.msc引用的VMHost.ico图标?
如何获取virtmgmt.msc引用的VMHost.ico图标?
问题背景
- 本地
C:\WINDOWS\System32\virtmgmt.msc为XML格式,其图标标签定义为:<Icon Index="0" File="VMHost.ico"> - 但通过Everything全盘搜索,包括
C:\WINDOWS\System32在内的所有目录均未找到VMHost.ico文件。 - 对比
C:\WINDOWS\system32\compmgmt.msc的图标标签使用完整路径:<Icon Index="2" File="%windir%\system32\mycomput.dll">
该文件存在,调用Win32 APIExtractAssociatedIcon传入完整路径和索引可成功获取HICON。
解决方案
1. 直接针对virtmgmt.msc调用API提取
无需纠结找不到VMHost.ico,该文件名是系统内部的资源映射标识,直接对virtmgmt.msc本身提取即可:
- 使用Win32 API
ExtractIconEx,传入路径C:\WINDOWS\System32\virtmgmt.msc和索引0,直接获取对应HICON。 - 或调用
SHGetFileInfo,指定SHGFI_ICON参数搭配SHGFI_SMALLICON/SHGFI_LARGEICON,也能提取该msc文件关联的图标。
2. 从同名系统库中定位资源
VMHost.ico对应的图标实际存储在virtmgmt.dll中(与msc文件同名的系统动态库):
- 用Resource Hacker等资源查看工具打开
C:\WINDOWS\System32\virtmgmt.dll - 查看图标资源列表,索引0的图标即为目标图标
- 直接导出该资源保存为ICO文件
3. PowerShell快速导出
无需编写复杂代码,用PowerShell一行命令即可导出:
$icon = [System.Drawing.Icon]::ExtractAssociatedIcon("C:\WINDOWS\System32\virtmgmt.msc") $icon.Save("C:\temp\VMHost.ico")
执行后可在指定路径得到导出的VMHost.ico文件。
内容的提问来源于stack exchange,提问作者gigi
相关产品推荐
相关产品推荐

