windows应用程序icon缓存、查看图标、icon制作方法

这篇具有很好参考价值的文章主要介绍了windows应用程序icon缓存、查看图标、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的图标。

windows应用程序icon缓存、查看图标、icon制作方法


icon制作方法

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

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

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

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


python脚本提取icon

从网上找到一段python脚本提取exe程序的图标,python2与3理论上都可以使用。文章来源地址https://www.toymoban.com/news/detail-629109.html

# -*- 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, "ico", md5obj.hexdigest() + ".ico"), "wb+")
                                    file_ico.write(lastData)
                                    file_ico.close()
                                    print("hash.md5(pe.resources[i].offset, pe.resources[i].length) == \""+md5obj.hexdigest()+ "\" or")
                                    
                            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
                                file_ico = open(os.path.join(path_filter, "ico", md5obj.hexdigest() + ".ico"), "wb+")
                                file_ico.write(lastData)
                                file_ico.close()
                                print("hash.md5(pe.resources[i].offset, pe.resources[i].length) == \""+md5obj.hexdigest()+ "\" or")
        argv_dic['peobj'].close()
        os.rename(argv_dic['path_sample'], os.path.join(path_filter, os.path.basename(argv_dic['path_sample']) + ".exe"))
        return True
    argv_dic['peobj'].close()

def scan_ico(path_sample, outdir, if_makeico):   
    peobj = pefile.PE(path_sample)
    group_dic = {}
    if hasattr(peobj, 'DIRECTORY_ENTRY_RESOURCE'):
        resGroupIcon = filter(lambda x: x.id==pefile.RESOURCE_TYPE['RT_GROUP_ICON'], peobj.DIRECTORY_ENTRY_RESOURCE.entries)
        if len(resGroupIcon) > 0:
            for i in range(len(resGroupIcon)):
                resGroupIcon = resGroupIcon[i]
                if hasattr(resGroupIcon, 'directory'):
                    for resId in resGroupIcon.directory.entries:
                        if hasattr(resId, 'directory'):
                            for resLang in resId.directory.entries:
                                group_dic[0] = peobj.get_data(resLang.data.struct.OffsetToData, resLang.data.struct.Size)
                                return get_ico({'peobj':peobj, 'outdir':outdir, 'path_sample':path_sample, 'if_makeico':if_makeico}, group_dic)
                        else:
                            group_dic[0] = peobj.get_data(resId.data.struct.OffsetToData, resId.data.struct.Size)
                            return get_ico({'peobj':peobj, 'outdir':outdir, 'path_sample':path_sample, 'if_makeico':if_makeico}, group_dic)
                else:
                    peobj.close()
        else:
            peobj.close()
    else:
        peobj.close()
    
def plan():
    #这里你可传参,我先帮你写死了
    if len(sys.argv) > 1:
        path_sample = sys.argv[1]
    if len(sys.argv) > 2:
        outdir = sys.argv[2] 
    if len(sys.argv) > 3:
        if_makeico = int(sys.argv[3])
    if_sucess = False
    try:
        path_sample = r"D:\xx\xx.exe"#也可以指定一个完整的路径
        outdir = "./"
        if_makeico = 1
        if_sucess = scan_ico(path_sample, outdir, if_makeico)
    except Exception,e:
        if str(e).find("Error") != -1:
            print path_sample + " scan ico failed."
        return
    if if_sucess != True:
        os.rename(path_sample, os.path.join(outdir, "no_find_ico", os.path.basename(path_sample) + ".exe"))

if __name__ == '__main__':
    plan() #任务开始

到了这里,关于windows应用程序icon缓存、查看图标、icon制作方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Deepin/UOS Linux 桌面自定义 IDEA/DataGrip 应用程序图标

    在 $HOME/Desktop 目录下编辑 vim jetbrains.intelij.idea.desktop vim jetbrains.datagrip.desktop 我们下期见,拜拜!

    2024年02月16日
    浏览(35)
  • 使用PyInstaller将pyqt应用转换为exe程序,并设置图标

    在PyInstaller中, -i 选项用于指定生成的可执行文件的图标文件。通过使用 -i 选项,可以将一个图标文件与生成的可执行文件关联起来,使得可执行文件在操作系统中显示指定的图标。 具体使用方法如下: 其中, 图标文件路径 是要指定的图标文件的路径,可以是ICO格式的图

    2024年02月14日
    浏览(43)
  • 查看ios 应用程序性能

    目录 摘要 前言 性能概括 CPU内存监控 内存监控 磁盘监控 网络监控 GPU fps 本篇博文将介绍一款重量级性能测试工具——克魔助手,针对iOS应用程序的性能监控进行详细介绍。通过克魔助手,开发者可以方便地查看应用程序的CPU、内存、GPU性能情况,以及网络监控和抓包等功能

    2024年02月03日
    浏览(48)
  • 【温故而知新】HTML5 应用程序缓存

    HTML5是HTML的最新版本,它引入了许多新的元素和功能,以适应现代网页开发的需求。以下是HTML5的一些主要特点: 新增语义元素 :HTML5引入了许多新的语义元素,如 header、footer、article、section 等,这些元素有助于提高网页的结构化和可访问性。 媒体支持 :HTML5引入了 audio 和

    2024年01月23日
    浏览(49)
  • 优化您的Spring应用程序:缓存注解的精要指南

    当我们构建和运行Spring应用程序时,通常面临一个共同的挑战:性能。无论是为了提供更快的响应时间、更高的并发处理能力,还是为了降低数据库或外部服务的负载,性能优化一直是开发人员和系统管理员的关注焦点。 在本篇博客中,我们将深入研究Spring的 @Cacheable 、 @

    2024年02月07日
    浏览(43)
  • 极速Python编程:利用缓存加速你的应用程序

    在软件开发中,缓存是一种常用的技术,用于提高系统性能和响应速度。Python提供了多种缓存技术和库,使我们能够轻松地实现缓存功能。本文将带您从入门到精通,逐步介绍Python中的缓存使用方法,并提供实例演示。 缓存基础知识 什么是缓存 缓存的工作原理 缓存的优势和

    2024年02月16日
    浏览(39)
  • 轻松搞定Spring集成缓存,让你的应用程序飞起来!

    主页传送门:📀 传送   Spring 提供了对缓存的支持,允许你将数据存储在缓存中以提高应用程序的性能。Spring 缓存抽象基于 Java Caching API,但提供了更简单的编程模型和更高级的功能。   Spring 集成缓存提供了一种方便的方式来使用缓存,从而提高应用程序的性能。Spr

    2024年02月07日
    浏览(49)
  • Caching the Application Engine Server 缓存应用程序引擎服务器

    Caching the Application Engine Server 缓存应用程序引擎服务器 Application Engine caches metadata just like the application server. This caching enhances performance because a program can refer to the local cache for any objects that it uses. 应用程序引擎会像应用程序服务器一样缓存元数据。这种缓存提高了性能,因为程序

    2024年02月19日
    浏览(47)
  • C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

    初步掌握Windows应用程序的设计方法。 掌握常用窗体控件的使用方法。 1、设计一个Windows应用程序,创建一个用于添加学生个人基本信息的窗体,窗体下方法同时滚动信息“天行健,君子以自强不息!”。   要示如下: 如图1所示,设计窗体界面控件的布局 图1 学生信息管理

    2024年02月10日
    浏览(59)
  • 微信小程序项目中使用icon图标

    效果: 步骤: 1、先让ui负责人把你的账号加入到项目中,加入到项目中后就可以在icon图标库中看到该项目 2、在小程序中使用 新建一个view,在上面加一个class,复制icon名字上去即可,注意格式,格式为iconfont icon名。 iconfont这个前缀不是固定的,根据icon名字来,icon的前缀为

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包