设为首页 加入收藏

TOP

windows应用程序icon缓存、查看图标、icon制作方法(一)
2023-08-26 21:09:44 】 浏览:245
Tags:windows 应用程 icon 缓存 查看图 方法

windows程序图标缓存

在vs中替换c++程序的图标后,需要重新编译,但是很多情况下都不会刷新,还是看到老的图标,只能重启电脑才能看到新的图标。

通过ChatGPT得到相关的回答如下:

如果在 Windows 上更换了可执行文件 (.exe) 的图标,但是在图标文件已经更改的情况下仍然显示旧的图标,可能是因为 Windows 缓存了旧的图标。为了解决这个问题,可以尝试以下步骤:

  1. 从可执行文件的图标属性中删除图标,保存并关闭。

  2. 重新打开文件的属性对话框,选择 "更改图标"。

  3. 选择一个新的图标并保存更改。

  4. 如果图标仍然没有更改,请尝试重启 Windows Explorer 进程。可以在任务管理器中找到 "Windows Explorer" 进程,右键单击并选择 "重启"。

  5. 如果问题仍然存在,尝试清除 Windows 图标缓存。可以按照上一个问题中提到的步骤进行操作。 一般情况下,以上步骤应该可以解决更换图标后仍然显示旧图标的问题。

但是以上方法都相对比较麻烦,那么有没有更好的方法来确认图标是否更换成功呢?


IconViewer

下载地址:Download IconViewer - MajorGeeks


使用方法

下载安装后,需要重启电脑才能生效,注意一定要重启电脑才能生效。

选择exe - 鼠标右键 - 属性 - 会增加一栏 icon,显示exe的图标。

image-20230731110516755


icon制作方法

windows应用程序的图标文件制作

原理:把不同尺寸的png合在一个ico文件中

下载Greenfish Icon Editor Pro 4.2,与老版本的操作方式类似,有多个图层,注意不同的尺寸只需要一个图层即可。

可以保存工程为模版,下次从模版中修改即可。


python脚本提取icon

从网上找到一段python脚本提取exe程序的图标,python2与3理论上都可以使用。

# -*- coding: GB18030 -*-

import os
import sys
import string
import pefile
import hashlib
import struct

def get_ico(argv_dic, group_dic):
    totalData, lastData, lastIconId = '', None, -1
    if group_dic[0]:
        resIcons = filter(lambda x: x.id==pefile.RESOURCE_TYPE['RT_ICON'], argv_dic['peobj'].DIRECTORY_ENTRY_RESOURCE.entries)       
        idCount = struct.unpack('H', group_dic[0][4:6])[0]      
        iconIds = set([struct.unpack('H', group_dic[0][i*14+18:i*14+20])[0] for i in xrange(idCount)])
        iconIdMap = dict([(struct.unpack('H', group_dic[0][i*14+18:i*14+20])[0], i) for i in xrange(idCount)])
        for resIcon in resIcons:
            if resIcon and hasattr(resIcon, 'directory'):
                for resId in resIcon.directory.entries:
                    if resId.id in iconIds:
                        lastIconId = resId.id
                    if hasattr(resId, 'directory'):
                        for resLang in resId.directory.entries:
                            lastData = argv_dic['peobj'].get_data(resLang.data.struct.OffsetToData, resLang.data.struct.Size)
                            if iconIdMap.has_key(resId.id) == False:
                                continue
                            iconIdx = iconIdMap[resId.id]
                            iconHeader = '\x00\x00\x01\x00\x01\x00' + group_dic[0][6 + iconIdx * 14:6 + iconIdx * 14 + 12] + '\x16\x00\x00\x00'
                            lastData = iconHeader + lastData   
                            totalData = totalData + lastData
                            
                    else:
                        lastData = argv_dic['peobj'].get_data(resId.data.struct.OffsetToData, resId.data.struct.Size)
                        iconIdx = iconIdMap[resId.id]
                        iconHeader = '\x00\x00\x01\x00\x01\x00' + group_dic[0][6 + iconIdx * 14:6 + iconIdx * 14 + 12] + '\x16\x00\x00\x00'
                        lastData = iconHeader + lastData
                        totalData = totalData + lastData

        md5obj = hashlib.md5()
        md5obj.update(totalData)
        path_filter = os.path.join(argv_dic['outdir'], md5obj.hexdigest())
        if os.path.exists(path_filter) == False:
            os.mkdir(path_filter)
            if argv_dic['if_makeico'] != 0:
                os.mkdir(os.path.join(path_filter, "ico")) 
                for resIcon in resIcons:
                    if resIcon and hasattr(resIcon, 'directory'):
                        for resId in resIcon.directory.entries:
                            if resId.id in iconIds:
                                lastIconId = resId.id
                            if hasattr(resId, 'directory'):
                                for resLang in resId.directory.entries:
                                    lastData = argv_dic['peobj'].get_data(resLang.data.struct.OffsetToData, resLang.data.struct.Size)
                                    if iconIdMap.has_key(resId.id) == False:
                                        continue
                                    iconIdx = iconIdMap[resId.id]
                                    iconHeader = '\x00\x00\x01\x00\x01\x00' + group_dic[0][6 + iconIdx * 14:6 + iconIdx * 14 + 12] + '\x16\x00\x00\x00'
                                    lastData = iconHeader + lastData
                                    
                                    md5obj = hashlib.md5()
                                    md5obj.update(lastData[22:])
                                    file_ico = open(os.path.join(path_filter, &quo
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇IIS 配置集中式证书模块实现网站.. 下一篇FRP配置外网远程桌面

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目