Icon资源详解[1]
本文分享&备忘最近了解到的icon资源在windows平台下相关的一部分知识,所有测试代码都尽可能的依赖win32 API实现。更全面的知识,参考文末列出的”参考资料“。
一、Icon文件的组成
typedef struct
{WORD idReserved; // Reserved (must be 0)WORD idType; // Resource Type (1 for icons)WORD idCount; // How many images?ICONDIRENTRY idEntries[1]; // An entry for each image (idCount of 'em)
} ICONDIR, *LPICONDIR;
typedef struct
{BYTE bWidth; // Width, in pixels, of the imageBYTE bHeight; // Height, in pixels, of the imageBYTE bColorCount; // Number of colors in image (0 if >=8bpp)BYTE bReserved; // Reserved ( must be 0)WORD wPlanes; // Color PlanesWORD wBitCount; // Bits per pixelDWORD dwBytesInRes; // How many bytes in this resource?DWORD dwImageOffset; // Where in the file is this image?
} ICONDIRENTRY, *LPICONDIRENTRY;
typdef struct
{BITMAPINFOHEADER icHeader; // DIB headerRGBQUAD icColors[1]; // Color tableBYTE icXOR[1]; // DIB bits for XOR maskBYTE icAND[1]; // DIB bits for AND mask
} ICONIMAGE, *LPICONIMAGE;
icon中含有一张png图片,文件头内容(前0x15字节是icon文件头 + ICONDIRENTRY 的内容):
二、Icon在windows中的显示
三、从PE文件中提取icon资源
//获取exe的32 * 32 iconSHFILEINFO sfi;ZeroMemory(&sfi, sizeof(SHFILEINFO));::SHGetFileInfo(L"D:\\a.exe", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_LARGEICON);HICON icon_handle = sfi.hIcon;
//获取*.rmvb文件类型的32 * 32 iconSHFILEINFO sfi;ZeroMemory(&sfi, sizeof(SHFILEINFO));::SHGetFileInfo(L"*.rmvb", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES);HICON icon_handle = sfi.hIcon;
//获取48 * 48 或者 256 * 256 pixels iconSHFILEINFO sfi;ZeroMemory(&sfi, sizeof(SHFILEINFO));::SHGetFileInfo(L"D:\\b.exe", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX);HIMAGELIST* imageList = NULL;//SHIL_EXTRALARGE获取48 * 48的图标, SHIL_JUMBO 获取256 * 256的图标。HRESULT hResult = ::SHGetImageList(SHIL_EXTRALARGE , IID_IImageList, (void**)&imageList);HICON icon_handle = NULL;if (hResult == S_OK){hResult = ((IImageList*)imageList)->GetIcon(sfi.iIcon, ILD_NORMAL, &icon_handle);}
四、参考资料
转载于:https://www.cnblogs.com/cswuyg/p/3603707.html
Icon资源详解[1]相关推荐
- VS2010-MFC(菜单:VS2010菜单资源详解)
转自:http://www.jizhuomi.com/software/210.html 上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很 ...
- VMWare虚拟机处理器数量与每个处理器内核数量概念,以及分配CPU资源详解
VMWare虚拟机处理器数量与每个处理器内核数量概念,以及分配CPU资源详解 概念 CPU的物理核心和超线程 CPU的睿频机制 总结 概念 处理器数量:虚拟机上的CPU个数(上图中的插槽数,是机器主板 ...
- gateway资源详解
istio课程发布:https://edu.csdn.net/course/detail/29911 这是我目前见过最详细,最有深度的istio课程 学习目标 什么是gateway 在Kubernet ...
- VirtualService资源详解
** istio课程发布:https://edu.csdn.net/course/detail/29911 这是我目前见过最详细,最有深度的istio课程 ** VirtualService资源详解 ...
- stm32存储资源详解
战舰STM32F103ZET6开发板 ZET6芯片 该芯片内部自带了64k字节的SRAM,以及512K的内部FLASH IROM1=0x80000=512K 和IRAM1=0X10000=64k的大小 ...
- 【愚公系列】2022年08月 微信小程序-icon图标详解
文章目录 前言 一.自带图标 二.实现图标的五种方案 1.图片 2.精灵图 3.CSS绘图 4.矢量字体 4.1 使用步骤 5.SVG格式 前言 在小程序中经常会用到各种各样的图标,如果这些图标都使用 ...
- 静态资源详解和帮助文档的使用
1.静态:(static 修饰变量,方法) 概述:静态就是static关键字修饰的变量或方法 static是一个关键字,静止的,在java中表示资源共享的. 为什么要使用静态?: 1.例子:人人都有国 ...
- k8s、Deployment多副本资源详解、SERVICE通信、案例一nginx端口暴漏、案例二tomcat端口暴漏、案例三jenkins端口暴漏
文章目录 案例一 创建SERVICE 案例一nginx端口暴露 案例二tomcat端口暴露 案例三jenkins端口暴漏 使用yaml创建Deployment k8s deployment资源创建流程 ...
- Spartan6系列之时钟资源详解
本文转自:https://www.cnblogs.com/dhyc/p/3968729.html,感谢作者 1. 时钟资源概述 时钟设施提供了一系列的低电容.低抖动的互联线,这些互联线非常适合于传 ...
最新文章
- OCS2007安装配置指南
- 创新工场2018年夏令营DeepCamp第一套解答笔记
- ROS 总结(一):ROS系统框架
- slf4j 和 log4基础入门(Maven配置)
- 常用正则表达 (转)
- Java中常用的类,包,接口
- ExtJS4之helloworld
- 下滑加载更多js_vue.js怎么实现滑动到底部加载更多数据效果?
- 你真的理解反向传播吗?面试必备
- 绝对定向 c++_【007】Linux重定向、管道符及环境变量(看这一文就够了)
- php 读xml的两种方式
- 网易整合邮箱和博客 可通过邮件更新博客日志
- python多重继承super父类参数_Python super()函数使用及多重继承
- python老齐_python-basic
- 五大黑科技资源网站,你想要的这里都有
- ipad python编程软件_7款学习Python编程的iPhone/iPad应用
- 让Fireball CodeEditor控件支持中文
- python雨课堂答案_雨课堂和微助教的比较分析
- MathType的配置问题;将word中的公式转换为mathtype格式失败,缺少OMML2MML.XSL
- 马尔科夫链细致平衡条件