得到windows系统图标的解决方案(转)
来源:互联网 发布:寻梦环游记 知乎 编辑:程序博客网 时间:2024/05/16 23:45
如果想得到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 这些图标可能并没有使用或不能通过注册表修改
- 得到windows系统图标的解决方案(转)
- 得到windows系统图标的解决方案(转)
- 得到windows系统图标的解决方案
- 得到windows系统图标的解决方案
- 得到windows系统图标的解决方案
- java 如何得到文件的系统图标
- Windows任务栏空白图标的解决方案
- 一种清除windows通知区域“僵尸”图标的方案——XP系统解决方案
- 一种清除windows通知区域“僵尸”图标的方案——Windows7系统解决方案
- MAC系统图标不显示的解决方案
- Windows 系统使用的各种图标、光标
- QT 图标 windows系统
- windows 系统覆盖 linux 系统的解决方案
- Windows 下 SVN 图标无法正常显示的解决方案
- windows上svn图标不显示的解决方案
- win8系统下应用图标变白的解决方案
- [转]svn图标不显示的解决方案
- windows系统中得到精确到微妙的时间
- MyEclipse开发SSH(Struts+Spring+Hibernate)入门
- 使用UDPClient 编写聊天程序
- 网站注入与防范的方法
- 网络协议分析软件Sniffer Pro 4.7.5 破解版
- MFC类的层析
- 得到windows系统图标的解决方案(转)
- ixp425上QoS开发
- 互斥量
- cron/tmp.XXXXAqnFoW: No space left on device
- Android 校内头像同步开发笔记
- DirectShow .Net 实现视频
- PB好不好学啊
- SQL查询效率-100w数据查询只要1秒
- XML CDATA的作用