Windows图标:有一些你未必知道的东西
有一天,我的程序在任务栏的应用程序中看起来是这样的
- 静态显示,就是程序没有运行。比如资源管理器的文件夹里、桌面快捷方式、开始菜单等。
- 动态显示,就是程序运行后。比如:桌面任务栏、任务管理器、程序窗口标题栏等。
静态显示,由于程序没有运行,所以操作系统只能从文件信息中获取应用程序的图标。Windows程序有一个资源区,将资源以二进制的形式存放在文件中,而且exe可执行文件是一个格式化的文件,具有一定的格式,windows当然知道资源的位置,它从资源中找到图标资源,并且显示出来。这个功能可以使用SHGetFileInfo函数来实现。将任何一个其它文件,比如txt文件修改为exe扩展名,windows资源管理器也会尝试去查找图标资源,当然是找不到啦,所以一般都会显示系统缺省的图标,如上图显示的图标。所以很多dos程序,在windows里都显示缺省的图标。 动态显示,程序已经运行,可以接受窗口消息。而且桌面任务栏、任务管理器这两个地方,显示的是顶层窗口。每个窗口可以显示不同的图标和标题,所以这两个地方不可能是读取文件信息来获取图标显示。很显然,标题可以通过GetWindowText跨进程来获取。那么窗口图标呢?窗口图标也可以有很多方式跨进程获取。比如给窗口发送WM_GETICON,通过GetClassLong获取窗口类图标。也就是说,桌面和任务管理器这两个程序,可能是通过这些方式来获取图标进行显示。 也就是说,静态显示,显示的是应用程序图标;动态显示,显示的是窗口的图标。 我的程序在任务管理器里显示不正常,那应该是窗口的图标显示不正常。于是我尝试任务管理器可能采用的获取图标方式,逐一检查我的程序。WM_GETICON消息一般都是缺省处理,应该没问题。GetClassLong是获取窗口类信息,所以我检查我的窗口注册代码,发现没有设置窗口类图标。(由于采用了UI界面库,里面注册了一些缺省的窗口类,都是没有设置图标的,这个UI库,所有的UI都是自绘的,标题栏也不是真正的windows标题栏,是自己绘制的图标和标题,所以窗口显示图标正常)。 将窗口类图标补上后,任务管理器里显示正常。 虽然是个小问题,但是如果思路不正确,哪怕是有多年开发经验的老手,也可能会花费比较久的时间才能解决。尤其是现在大量使用各种库,各种框架,很多新人连注册窗口类都不知道。。。。 其实Windows图标还是很值得花点时间去全面了解一下,有一些关于Windows图标的技术实现还是比较有趣: 1、快捷方式是如何实现的? 2、图标上的数字是如何实现的?有些程序会在桌面应用程序图标上显示一个数字,比如软件管理程序,会以这种方式告诉你有几款软件有更新,用户体验非常好。 3、svn是如何在改变图标的?svn会改变文件夹,文件的图标,就是在原有图标上添加一些信息,比如更改后的、签出的。。 4、QQ推出的新功能,将经常聊天的人的头像弄到桌面上,点击就可以启动QQ进行聊天。
转载于:https://www.cnblogs.com/snake-hand/archive/2012/08/22/2650988.html
Windows图标:有一些你未必知道的东西相关推荐
- Windows图标-Icon文件格式分析
Windows图标-Icon文件格式分析 最近想做个随时间变化显示为时间的秒数的动态变化图标,查找了很多资料,基本都是使用BitBlt+BuildIcon或CreateIcon等API函数来生成图标, ...
- linux 更新 图标缓存,Windows图标显示错误解决方法(清理图标缓存BAT脚本)
Windows图标显示错误解决方法(清理图标缓存BAT脚本) 作者:佚名 来源:网络整理 2015-3-26 使用Windows过程中经常会遇到程序图标显示异常,重启也无法解决:其实这个是图标缓存出现 ...
- 【批处理】一键重构Windows图标缓存------解决win10部分图标加载问题
一键重构Windows图标缓存------解决win10部分图标加载问题 前言 注意事项 批处理代码 前言 本批处理用于解决 Windows 10 资源管理器图标显示缺失问题 注意事项 图标丢失非偶然 ...
- CSS做的Windows图标
® 纯HTML/CSS做的Windows图标 #windows .canvas { background: #fff; } #windows .icon { left:193px; position ...
- 在Delphi中显示Windows图标
栏目刊登了一篇<提取图标的Delphi控件>的文章,所介绍的方法可以用于提取包含在文件中的图标,但对于本身没有包含图标的文件却无法像Windows的"资源管理器"那样显 ...
- 仿古Windows图标
仿古Windows图标
- java web 中 读取windows图标并显示
java web中读取windows对应文件名的 系统图标 ....显示 1.获取系统图标工具类 package utils; import java.awt.Graphics; import j ...
- Windows图标显示异常解决方法。桌面图标异常,开始菜单图标异常,任务栏图标异常。图标缓存位置。
用着用着,图标就突然显示异常,变成这个样子了. 其实就是图标缓存出问题了. 解决办法: 在C:\Users\Administrator\AppData\Local里有个IconCache.db图标缓存 ...
- 【原创】Windows图标助手v2.0
软件大小:4.12M 软件类别:国产软件/系统美化 软件授权:免费版 软件语言:简体中文 应用平台:Windows 推荐等级:★★★★★ 修改时间: 2019年4月6日, 13:14:15 MD5: ...
最新文章
- android 模拟器 device disconnect,Jenkins上的Android模拟器错误:设备离线
- centos6.5安装maven
- OpenCv2 学习笔记(1) Mat创建、复制、释放
- thinkphp3 php jwt,thinkphp框架使用JWTtoken的方法详解
- 如何关闭默认浏览器检查
- POJ 1850 Code
- Python中的函数(调用、参数、返回值、变量的作用域)
- 剑指offer面试题[19]-二叉树的镜像
- 《创业时,我们在知乎聊什么》- 书摘
- 蓝湖+Vue.js+SosoApi+Spring Cloud+Rancher——项目架构总结介绍
- 微信外卖点餐系统开发教程
- VMware安装Fedora 35 Workstation及使用体验
- 2015到3020计算机参考文献,同等学力相关论文范文素材,与计算机网络参考文献2016年相关硕士毕业论文...
- db,dbm,w,dbw,mw的换算关系
- echo /proc/vm/drop_caches
- Android云手机平台搭建-2020圈钱热潮
- 个人博客建设——Hexo主题icarus的_config.icarus.yml配置参数注释
- 资源、角色、用户、岗位的关系(工作中用到的)
- 小程序开发——页面背景色设置
- 【kafka】kafka 消费数据的时候 报错 (Re-) join group
热门文章
- go build 编译报错 missing go.sum entry for module providing package
- trinosql_prestosql问题
- OP_REQUIRES failed at conv_ops.cc:386 : Resource exhausted: OOM when allocating tensor with shape..
- python 正则括号的使用及踩坑
- Java使用itext生成Pdf
- 前后端分离必备工具:Swagger快速搞定(整合SpringBoot详细教程)
- EDA电子设计技术与应用
- AI中pass架构设计优化
- NVIDIA GPU上的Tensor线性代数
- Harmony生命周期