zoukankan      html  css  js  c++  java
  • 得到windows系统图标的解决方案

    如果想得到windows中我的电脑或者网络邻居等系统图标可以有如下解决办法。

    方案一
    用图标提取软件从c:/winnt/system32/SHELL32.dll或者C:/WINNT/Explorer.exe中提取出来然后加入到自己的程序中(路径随操作系统和安装目录不同而变化)这种方法的缺点是不同的操作系统的系统图标有一些变化,比如说2003和2000的系统图标就有很大变化,如果你提取的是2000的图标,应用程序如果在2003下运行可能看起来有一些别扭。

    方案二
    同样是利用c:/winnt/system32/SHELL32文件来提取,但是这次是利用注册表和windows的函数来完成。代码如下:
    HICON CTestDlg::GetShellIcon(int nIndex) 
    {
    HICON hIcon=NULL; 
    HKEY hkeyShellIcons;

     

    //打开注册表,读相应的图标项目
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE//Microsoft//Windows//CurrentVersion//Explorer//Shell I cons", 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; 
    }
    这种方法克服了第一种方法使用不灵活的缺点但是代码量比较大。(index目录在最后列出)

    方案三
    利用shell函数SHGetSpecialFolderLocation和SHGetFileInfo。代码如下:

    LPITEMIDLIST lpItemIDList;
    SHFILEINFO shinfo;
    SHGetSpecialFolderLocation (this->m_hWnd, CSIDL_NETWORK, &lpItemIDList);
    SHGetFileInfo( (LPCTSTR)lpItemIDList,
    NULL,
    &shinfo,
    sizeof(shinfo),
    SHGFI_SYSICONINDEX | SHGFI_DISPLAYNAME | SHGFI_ICON| SHGFI_SMALLICON|SHGFI_PIDL);
    这是shinfo中的icon和hicon保存了得到的icon的值。
    这种方法既有灵活性,代码量也比较少,推荐使用。在SHGetSpecialFolderLocation中的第二个参数是想得到的图片的CSIDL值。




    【附表1:nindex值说明】 
    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 图标 
    .
    .
    .
    .49

    后面标有符号的说明有特殊用法: 
    * 这些图标可以在注册表的其他地方的设置。
    t 这些图标必须是空白背景。 
    s 这些图标将用在开始菜单上。 
    u 这些图标可能并没有使用或不能通过注册表修改

  • 相关阅读:
    全面了解 NOSQL
    金融业容灾技术分析
    银行业务知识(转)
    结合工作的业务连续性实践
    金融企业架构
    window 下拉取github项目失败 (Permission denied (publickey))
    vsftpd 配置文件
    nginx下配置虚拟主机
    linux 下安装ftp 并远程连接
    find_in_set
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318739.html
Copyright © 2011-2022 走看看