Shell编程问题:如何获得显示桌面,我的电脑,网上邻居等的图标

解决方案 »

  1.   

    c:\winnt\system32\SHELL32.dll
    去抓吧
      

  2.   

    只是要图标还不简单,在C:\WINNT\Explorer.exe里以resouce方式打开..
      

  3.   

    // 功能:
    // 得到系统图标,诸如文件夹,桌面图标
    // 参数:
    // 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 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;