写应用程序,如果想使用Windows下的图标,可以使用Visual Studio中的图标,比如VS2008的ImageLibrary(笔者已经打包上传到CSDN),也可以使用Windows系统自带的图标。

Windows系统自带了不少高质量的图标资源,只需要将其提取出来即可使用。

在Windows 95到Windows 10 1903之前的版本,都可以直接在dll中提取系统图标,比如最常用的图标都在shell32.dll中。

一、使用IconsExtract提取

可以使用IconsExtract,它是nirsoft开发的软件,该公司开发了许多工具软件,可以去官网查看,http://launcher.nirsoft.net/utilities_list.html有一个列表。

下图是Win10下使用IconsExtract列出的shell32.dll中的图标:


如果想要提取(导出)图标,选中要导出的图标,可以多选,在右键弹出菜单中选择“Save Selected Icons”。

二、使用ResourceHacker提取

ResourceHacker也可以提取图标,它的功能强大之处在于可以替换资源和编译资源。对于提取图标,但它一次只能提取一个图标,如果要提取大量图标,很繁琐。同时它只能操作dll文件本身嵌入的资源,对Win10 1903及之后版本中的shell32.dll查看不了图标资源。

三、使用7zip解压缩DLL中的资源

其实,Windows下不管是EXE文件,还是DLL文件它都是一个ZIP压缩文件,都可以使用ZIP解压缩来查看内容。比如使用7zip来查看ResourceHacker.exe中的内容:

查看shell32.dll的内容:

其中的.rsrc就是内嵌的资源文件所在目录。ICON图标文件就在其中:

但是在Win10 1903及之后版本,shell32.dll中并不包括图标资源了,它被分离到了C:\Windows\SystemResources\下的同名mun文件中,即shell32.dll.mun

所以直接解压shell32.dll是无法提取图标文件的,需要使用7zip解压C:\Windows\SystemResources\shell32.dll.mun

下图是解压出来的文件:

四、号外

使用VC++创建Windows桌面程序读取并显示图标。

#include <map>
#include <vector>std::map<HICON,int> mapIcon;
std::vector<HICON> vctIcon;
HMODULE hShell32;void DebugError(DWORD errorCode)
{LPVOID lpMsgBuf;FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf, 0, NULL);OutputDebugString((LPTSTR)lpMsgBuf);LocalFree(lpMsgBuf);
}int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR    lpCmdLine,_In_ int       nCmdShow)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: 在此处放置代码。DWORD errorCode = 0;HMODULE hShell32 = LoadLibrary(_T("shell32.dll"));if (hShell32 == nullptr){errorCode = GetLastError();DebugError(errorCode);return FALSE;}// 由于资源号达到80000+,所以取100000for (int i = 1; i < 100000; ++i){HICON hIcon = (HICON)LoadImage(hShell32, MAKEINTRESOURCE(i), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);if (hIcon != nullptr){mapIcon[hIcon] = i;vctIcon.push_back(hIcon);}}// 初始化全局字符串LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadStringW(hInstance, IDC_WINDOWSPROJECT1, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化:if (!InitInstance (hInstance, SW_SHOWMAXIMIZED)){FreeLibrary(hShell32);return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINDOWSPROJECT1));MSG msg;// 主消息循环:while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam;
}void draw(HDC hdc)
{TCHAR buf[16];int x = 0, y = 0;DWORD maxY = 0;ICONINFOEX info;info.cbSize = sizeof(info);for (int i = 0; i < vctIcon.size(); ++i){if (GetIconInfoEx(vctIcon[i], &info)){if (!info.fIcon)continue;DrawIcon(hdc, x, y, vctIcon[i]);int n = _stprintf_s(buf, ARRAYSIZE(buf), _T("%d"), mapIcon[vctIcon[i]]);TextOut(hdc, x, y + info.yHotspot * 2 + 2, buf, n);x += info.xHotspot * 3 + 2;if (info.yHotspot > maxY)maxY = info.yHotspot;if (x >= 1900) {y += maxY * 3 + 4;x = 0;}}}
}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_COMMAND:{int wmId = LOWORD(wParam);// 分析菜单选择:switch (wmId){case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}}break;case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...draw(hdc);            EndPaint(hWnd, &ps);}break;case WM_DESTROY:for (int i = 0; i < vctIcon.size(); ++i){DestroyIcon(vctIcon[i]);}FreeLibrary(hShell32);PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}

执行结果:

提取Windows中系统自带的图标资源相关推荐

  1. win7计算机个性化,打造个性化Windows 7系统之win7个性化图标

    微软Windows 7操作系统不仅仅在桌面背景和主题方面有了自己个性化的设置,在文件夹外观方面也有了很大程度的改进,让我们可以大刀阔斧的修改文件夹,让文件夹也彰显你的个性气息.不知道怎么操作?没关系, ...

  2. Windows Vista系统自带刻录功能简析

    Windows Vista系统自带刻录功能简析 我们知道Windows XP系统自带CD刻录功能,但遗憾的是功能较简陋,且无法支持DVD刻录.在微软最新推出的Windows Vista操作系统中,自带 ...

  3. 好系统教你如何在Windows中更改文件夹的图标

    如何在Windows中更改文件夹的图标 浏览到要更改其图标的文件夹的位置,或创建一个新文件夹. 右键单击该文件夹,然后从出现的下拉菜单底部选择"属性". 在文件夹属性菜单中,选择自 ...

  4. Windows XP 系统自带扑克牌资源动态链接库cards.dll逆向分析笔记

    Windows XP 系统自带扑克牌资源动态链接库cards.dll逆向分析笔记 使用工具:IDA Pro, Resource Hacker 0. 前言 cards.dll是Windows系统目录下的 ...

  5. Windows之系统自带截屏快捷键

    Windows之系统自带截屏快捷键 现在我们都习惯了使用QQ截屏,但是有时候电脑没有网络,也就意味着无法登陆QQ,在这个时候再有截屏的需求时,我们就束手无策了. 截取全屏 现在我说以个Windows系 ...

  6. XP系统计算机小游戏,Windows XP系统自带的小游戏如何恢复

    不小心删除了Windows XP系统自带的小游戏,该如何恢复呢?下面给出的解决方法,希望给遇到这方面问题的朋友带来帮助! 控制面板-添加删除程序-添加/删除WINDOWS组建-双击附件和工具-游戏前打 ...

  7. android系统旁边有一个锁,Android中系统自带锁WalkLock与KeyguardLock用法实例详解

    本文实例讲述了Android中系统自带锁WalkLock与KeyguardLock用法.分享给大家供大家参考,具体如下: WalkLock - 顾名思义 唤醒锁 点亮屏幕用的 KeyguardLock ...

  8. Windows XP系统自带工具应用详解(内容比较老,但还算实用)

    为了让自己的电脑发挥更多的功用,有不少用户都遵循"要想马儿跑得快,就得给它多吃草"的原则,在电脑中"装填"了许多第三方软件.在安装的众多软件中,其中有一些根本无 ...

  9. Windows 10系统自带Virtual Private Network客户端配置连接L2TP服务器_2

    应用场景:  由于工作需要,有时候在外网情况下要可以直接访问到公司内部资源,方便办公.所以需要搭建一种VPN,这里我选择L2TP VPN的PC到站点模式,可以从终端提供接入公司内部网络的安全隧道.如果 ...

  10. Windows 10 系统自带搜索功能详解

    原标题:在 Windows 10 上高效搜文件,自带搜索功能其实就够了 快速搜索和效率启动,是大多数用户的刚需,为此也诞生了一大波启动器应用,如 macOS 平台的 Alfred.LaunchBar, ...

最新文章

  1. R语言ggplot2可视化在时间序列上标注出重点区域实战(突出特定的时间范围):highlight specific time ranges
  2. 针对CMS中的tag标签理解
  3. C# 多线程编程 ThreadStart ParameterizedThreadStart
  4. 电子邮件地址抓取工具
  5. 游戏动词和宾语设计案例精选
  6. 局域网互传文件工具_如何在 iOS、Android、macOS、Windows 之间快速文件互传?
  7. 100道MySQL数据库经典面试题解析(有空必看)
  8. response.setContentType()与response.setHeader()
  9. 详解train_test_split()函数(官方文档有点不说人话)
  10. NLP学院网:李斌NLP关键执行:由谁去给猫挂铃铛?
  11. 天然替代甜味剂行业调研报告 - 市场现状分析与发展前景预测
  12. 苹果公司战略管理分析
  13. TP5 格式化时间戳
  14. oracle宕机,startup报错ora03113
  15. 天津高一学业水平测试计算机,2019年1月天津高中学业水平考试标准
  16. 笔记:计算机公共基础知识学习内容——线性结构与非线性结构
  17. comsol非线性求解器不收敛调试问题
  18. 常见的5个SQL面试问题
  19. 补丁的原理什么?为什么打上补丁可以用新的功能?
  20. 联想拯救者R7000+加装SSD+原D盘信息复制分区到新SSD

热门文章

  1. c语言中与控制语句相关的12个关键字,1.1 C语言中的32个关键字,9种控制语句,34中运算符...
  2. simulink子系统和库
  3. OpenJudge计算概论-寻找山顶
  4. 商人宝办公室环境分享
  5. RK3288 -- 关于 HDMI 音频输出的两种配置
  6. 银翼杀手2049——依稀可见的存储未来
  7. 北京皮纹智力测量与台湾皮纹智能测试的区别
  8. 汗,深圳乞丐暴强的营销能力
  9. 《软技能·代码之外的生存指南》读书笔记 ——理财
  10. Matlab R2018b使用搜狗输入法卡顿问题及其解决方法