热情软件屋

 

怎样获得系统图标


编号:QA004556
建立日期: 2002年3月2日 最后修改日期:2002年3月2日
所属类别:

turtlevan:
    操作系统: Windows9X
    编程工具: VC++
    问题: 怎样获得系统图标,比如硬盘的图标,光盘的图标,各种文件类型的图标,打开的和关闭的文件夹的图标?就像资源管理器里那样?
    水平: 刚入门

回答:

    这些系统图标都保存在shell32.dll中。不过Windows在显示图标时先检查注册表:
    Hkey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons
    下的值,如果在这里发现了设置好的值,则使用这里设置的结果。例如:
    "3"="C:\\MyIcons.dll,7"
    表示将关闭的文件夹的图标修改为C:\MyIcons.dll中的第7个图标。
    象TweakUI等应用程序可以修改默认的系统图标,实际上就是在这里写入相应的值。
    


    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    


     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 这些图标可能并没有使用或不能通过注册表修改。 下面是一个简单的例子,用来读取系统图标: HICON CShellList::GetShellIcon( int nIndex ) { HICON hIcon = NULL; HKEY hkeyShellIcons; if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Icons"), 0, KEY_READ, &hkeyShellIcons) == ERROR_SUCCESS) { TCHAR szBuffer[ MAX_PATH * sizeof TCHAR]; DWORD dwSize = MAX_PATH * sizeof TCHAR; TCHAR szIndex[4]; wsprintf( szIndex, _T("%d"), nIndex ); if (RegQueryValueEx( hkeyShellIcons, szIndex, NULL, NULL, (LPBYTE)szBuffer, &dwSize) == ERROR_SUCCESS) { CString strFile, strIndex; AfxExtractSubString( strFile, szBuffer, 0, _T(',') ); AfxExtractSubString( strIndex, szBuffer, 1, _T(',') ); ExtractIconEx( strFile, atoi(strIndex), NULL, &hIcon, 1 ); } RegCloseKey( hkeyShellIcons ); } // Add folder images if (!hIcon) ExtractIconEx(_T("SHELL32.DLL"), nIndex, NULL, &hIcon, 1); return hIcon; } 还有一些图标可以在Hkey_Classes_Root\CLSID下面的键中设置,包括上面的15、17、31、32、33、35、37和38 。这些图标有: 1、我的计算机 HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ DefaultIcon\ 默认值 = explorer.exe,0 2、、网络邻居 HKEY_CLASSES_ROOT\CLSID\{208D2C60-3AEA-1069-A2D7-08002B30309D}\ DefaultIcon\ 默认值= shell32.dll,17 3、回收站 HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\ DefaultIcon\ 默认值= shell32.dll,32 空的默认值= shell32.dll,31 满的默认值= shell32.dll,32 4、收件箱 HKEY_CLASSES_ROOT\CLSID\{00020D75-0000-0000-C000-000000000046}\ DefaultIcon\ 默认值= c:\exchange\exchng32.exe 5、、Internet Explore Internet Explore 4.0以上: HKEY_CLASSES_ROOT\CLSID\{FBF23B42-E3F0-101B-8488-00AA003E56F8}\ DefaultIcon\ 默认值=C:\Program Files\Internet Explorer\iexplore.exe,-32528 Internet Explorer Version 3.x: HKEY_CLASSES_ROOT\CLSID\{FBF23B42-E3F0-101B-8488-00AA003E56F8}\ DefaultIcon\ 默认值= C:\Program Files\Internet Explorer\iexplore.exe,0"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio