有一天,我的程序在任务栏的应用程序中看起来是这样的

很奇怪,我的图标明明不是这样的,在资源管理器的文件夹里面,我的图标能够正常显示,在桌面的任务栏里,也能正常的显示,唯独在任务管理器里显示不正常。虽然不是什么大问题,但是如果是一个产品发布出去,会让人觉得很不专业,会产生一定的负面影响。 这个图标有点像是程序没有图标,使用的是系统缺省的图标,或者是程序无法响应的时候显示的图标。 应用程序图标是个很重要的UI元素,在很多地方会显示。这些位置大概可以分为两类:

  • 静态显示,就是程序没有运行。比如资源管理器的文件夹里、桌面快捷方式、开始菜单等。
  • 动态显示,就是程序运行后。比如:桌面任务栏、任务管理器、程序窗口标题栏等。

静态显示,由于程序没有运行,所以操作系统只能从文件信息中获取应用程序的图标。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图标:有一些你未必知道的东西相关推荐

  1. Windows图标-Icon文件格式分析

    Windows图标-Icon文件格式分析 最近想做个随时间变化显示为时间的秒数的动态变化图标,查找了很多资料,基本都是使用BitBlt+BuildIcon或CreateIcon等API函数来生成图标, ...

  2. linux 更新 图标缓存,Windows图标显示错误解决方法(清理图标缓存BAT脚本)

    Windows图标显示错误解决方法(清理图标缓存BAT脚本) 作者:佚名 来源:网络整理 2015-3-26 使用Windows过程中经常会遇到程序图标显示异常,重启也无法解决:其实这个是图标缓存出现 ...

  3. 【批处理】一键重构Windows图标缓存------解决win10部分图标加载问题

    一键重构Windows图标缓存------解决win10部分图标加载问题 前言 注意事项 批处理代码 前言 本批处理用于解决 Windows 10 资源管理器图标显示缺失问题 注意事项 图标丢失非偶然 ...

  4. CSS做的Windows图标

    ® 纯HTML/CSS做的Windows图标  #windows .canvas { background: #fff; } #windows .icon { left:193px; position ...

  5. 在Delphi中显示Windows图标

    栏目刊登了一篇<提取图标的Delphi控件>的文章,所介绍的方法可以用于提取包含在文件中的图标,但对于本身没有包含图标的文件却无法像Windows的"资源管理器"那样显 ...

  6. 仿古Windows图标

    仿古Windows图标

  7. java web 中 读取windows图标并显示

    java web中读取windows对应文件名的 系统图标 ....显示 1.获取系统图标工具类 package utils;  import java.awt.Graphics;  import j ...

  8. Windows图标显示异常解决方法。桌面图标异常,开始菜单图标异常,任务栏图标异常。图标缓存位置。

    用着用着,图标就突然显示异常,变成这个样子了. 其实就是图标缓存出问题了. 解决办法: 在C:\Users\Administrator\AppData\Local里有个IconCache.db图标缓存 ...

  9. 【原创】Windows图标助手v2.0

    软件大小:4.12M 软件类别:国产软件/系统美化 软件授权:免费版 软件语言:简体中文 应用平台:Windows 推荐等级:★★★★★ 修改时间: 2019年4月6日, 13:14:15 MD5: ...

最新文章

  1. android 模拟器 device disconnect,Jenkins上的Android模拟器错误:设备离线
  2. centos6.5安装maven
  3. OpenCv2 学习笔记(1) Mat创建、复制、释放
  4. thinkphp3 php jwt,thinkphp框架使用JWTtoken的方法详解
  5. 如何关闭默认浏览器检查
  6. POJ 1850 Code
  7. Python中的函数(调用、参数、返回值、变量的作用域)
  8. 剑指offer面试题[19]-二叉树的镜像
  9. 《创业时,我们在知乎聊什么》- 书摘
  10. 蓝湖+Vue.js+SosoApi+Spring Cloud+Rancher——项目架构总结介绍
  11. 微信外卖点餐系统开发教程
  12. VMware安装Fedora 35 Workstation及使用体验
  13. 2015到3020计算机参考文献,同等学力相关论文范文素材,与计算机网络参考文献2016年相关硕士毕业论文...
  14. db,dbm,w,dbw,mw的换算关系
  15. echo /proc/vm/drop_caches
  16. Android云手机平台搭建-2020圈钱热潮
  17. 个人博客建设——Hexo主题icarus的_config.icarus.yml配置参数注释
  18. 资源、角色、用户、岗位的关系(工作中用到的)
  19. 小程序开发——页面背景色设置
  20. 【kafka】kafka 消费数据的时候 报错 (Re-) join group

热门文章

  1. go build 编译报错 missing go.sum entry for module providing package
  2. trinosql_prestosql问题
  3. OP_REQUIRES failed at conv_ops.cc:386 : Resource exhausted: OOM when allocating tensor with shape..
  4. python 正则括号的使用及踩坑
  5. Java使用itext生成Pdf
  6. 前后端分离必备工具:Swagger快速搞定(整合SpringBoot详细教程)
  7. EDA电子设计技术与应用
  8. AI中pass架构设计优化
  9. NVIDIA GPU上的Tensor线性代数
  10. Harmony生命周期