我正在尝试加载资源管理器显示的默认HICON:
一个打开的文件夹
一个没有自己的嵌入式默认图标的exe.这也可以在Vista上调用的"添加/删除程序"或"程序和功能"中看到.
你知道在哪里找到这些吗?我认为文件夹图标可能位于explorer.exe的资源中.但不知道可以从哪里检索默认应用程序图标.
此外,您是否有任何可以将它们加载到HICON中的示例代码.
我真的需要这个在多个Windows操作系统上运行:2000,XP,Vista,2008
感谢你目前的帮助.我在Vista上看过Shell32.dll.我没有在其中看到与浏览器中的应用程序显示的默认图标相同的图标.我可能会错过它 - 有278个图标需要查看 - 它肯定在那里,还是有其他位置我应该看?
使用SHGetFileInfo API.
SHFILEINFO sfi; SecureZeroMemory(&sfi, sizeof sfi); SHGetFileInfo( _T("Doesn't matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi, sizeof sfi, SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
将为您提供文件夹图标的图标句柄.
要获取"打开"图标(即文件夹显示为打开的图标),还要将最后一个参数中的SHGFI_OPENICON传递给SHGetFileInfo().
[编辑]
忽略所有告诉你在注册表中找到答案的答案!因为它不能可靠地工作,如果它们被自定义/换肤,将显示错误的图标,并且可能在将来的Windows版本中不起作用.此外,如果您从系统dll/exes中提取图标,您可能会遇到法律问题,因为它们受版权保护.
Vista添加了SHGetStockIconInfo等NT6 +最好的方式.
存档显示可用图标的MSDN文档
在较旧的平台上,像Stefan这样的SHGetFileInfo说.
如果你想使用未记录的东西,系统映像列表中的前5个左右图标包括默认文件夹和应用程序图标(系统映像列表不在NT上共享,但由于某种原因,所有副本都获得前5个左右没有用SHGetFileInfo询问它们的图标)
这些默认图标默认来自shell32.dll,但可以在注册表中更改:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell图标