ExtractIconEx("Explorer.exe", 3, NULL, &hIcon, 1); //获得桌面图标
ExtractIconEx("Explorer.exe", 0, NULL, &hIcon, 1); //获得我的电脑图标
ExtractIconEx("Explorer.exe", 1, NULL, &hIcon, 1); //获得文件搜索图标
ExtractIconEx("Explorer.exe", 2, NULL, &hIcon, 1); //获得打印机图标
ExtractIconEx("Explorer.exe", 6, NULL, &hIcon, 1); //获得回收站图标
ExtractIconEx("Explorer.exe", 13, NULL, &hIcon, 1); //获得关闭文件夹图标
ExtractIconEx("Shell32.dll", 4, NULL, &hIcon, 1); //获得打开文件夹图标
ExtractIconEx("Shell32.dll", 20, NULL, &hIcon, 1); //获得回收站图标
// 功能:
// 得到系统图标,诸如文件夹,桌面图标
// 参数:
// int nIndex 指定图标的索引,可取如下值
// . 0 默认图标
// . 1 默认的 .doc 图标 *
// . 2 可执行文件图标
// . 3 关闭的文件夹图标
// . 4 打开的文件夹图标
// . 5 5.25 ' 驱动器图标
// . 6 3.5 ' 驱动器图标
// . 7 可移动的驱动器图标
// . 8 硬盘驱动器图标
// . 9 网络驱动器图标
// . 10 断开的网络驱动器图标
// . 11 CD-ROM驱动器图标
// . 12 RAM驱动器图标
// . 13 整个网络图标
// . 14 网络连接图标 u
// . 15 网络工作站图标
// . 16 本地打印机图标 *
// . 17 网络图标 u
// . 18 网络工作组图标 u
// . 19 程序组图标 s
// . 20 文档图标 s
// . 21 设置图标 s
// . 22 查找图标 s
// . 23 帮助图标 s
// . 24 运行图标 s
// . 25 睡眠图标 s
// . 26 Docking Station 图标u
// . 27 关机图标 s
// . 28 共享图标 t
// . 29 快捷方式的箭头图标 t
// . 30 大箭头图标 u
// . 31 空回收站图标 *
// . 32 满的回收站图标 *
// . 33 拨号网络图标 *
// . 34 桌面图标
// . 35 控制台图标 *
// . 36 程序组图标 s
// . 37 打印机文件夹图标 *
// . 38 字体文件夹图标 *
// . 39 Windows旗帜图标 *
// . 40 Audio CD 图标
// 后面标有符号的说明有特殊用法:
// * 这些图标可以在注册表的其他地方的设置。
// t 这些图标必须是空白背景。
// s 这些图标将用在开始菜单上。
// u 这些图标可能并没有使用或不能通过注册表修改
// 返回
// 图标的句柄,失败返回NULL
HICON CTreeTestDlg::GetShellIcon(int nIndex)
{
HICON hIcon=NULL;
HKEY hkeyShellIcons;
//打开注册表,读相应的图标项目
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE//Microsoft//Windows//CurrentVersion//Explorer//Shell Icons", 0, KEY_READ, &hkeyShellIcons)==ERROR_SUCCESS)
{
char szBuffer[MAX_PATH];
DWORD dwSize=MAX_PATH;
char szIndex[4];
sprintf(szIndex, "%d ",nIndex);
if(RegQueryValueEx(hkeyShellIcons,szIndex,NULL,NULL,(LPBYTE)szBuffer,&dwSize)==ERROR_SUCCESS)
{
CString strFile,strIndex;
AfxExtractSubString(strFile,szBuffer,0, ', ');
AfxExtractSubString(strIndex,szBuffer,1, ', ');
ExtractIconEx(strFile,atoi(strIndex),NULL,&hIcon,1);
}
RegCloseKey(hkeyShellIcons);
}
//如果以上操作没有成功,直接到动态库中导出
if(!hIcon)
ExtractIconEx( "SHELL32.DLL", nIndex, NULL, &hIcon, 1);
return hIcon;
}