获取Dll\EXE内图标ID 公开

分类
点赞
暂无
更多信息
分享人 瞑空凌
分享时间 2024-11-18 16:50
最后更新 2024-11-19 17:01
修订版本 1
子程序大小 5.2 KB
Quicker版本 1.43.47.0

介绍

读取内置资源ID从而在动作使用_注意文件路径不得带有引号

找了好多天,问了GPT,N遍,结果才发现自己找错了类型
不是RT_ICON 而是RT_GROUP_ICON

使用Resource Hacker这个工具打开看才知道找错了


图标在 Windows 10 1903 中不再imageres.dll - 4kb 文件 - 超级用户

Windows 10及以上版本的系统已经将图标资源从 imageres.dll 文件中移除,并将其存储在 C:\Windows\SystemResources 目录下的 .mun 文件中。
在 Windows 10 和 Windows 11 中,系统不再将图标资源嵌入到 imageres.dll 文件中,而是将这些资源保存在 .mun 文件中
在 Windows 10 和 Windows 11 中,系统已经将图标资源从 dll 文件中移除,不再将图标资源嵌入到 dll 文件,而是将这些资源保存在 C:\Windows\SystemResources 目录下的 .mun 文件中。

不过不影响使用api读取,应该是自动跳转了。

测试好几天才发现,quicker的C#模块使用此 EnumResourceNames API 获取图标组编号时,回调函数 EnumResNameProc 内不能把指针转换为其他类型,一旦转换就无法获取,而且 EnumResourceNames 也会返回 false 必须先内部获取后,在外面转化。(测试中exe程序内的图标不影响直接转换,反而是系统图标文件dll会这样...).....测试发现,因为ID中有字符串,而字符串ID的指针数字很大,加上指针是64位,而我转化的数字类型是32位,因此算术溢出导致失败

参考辅助:
Winuser.h) (资源类型 - Win32 apps | Microsoft Learn

LoadLibraryExA 函数 (libloaderapi.h) - Win32 apps | Microsoft Learn

EnumResourceNames返回Windows 998 (对内存位置的无效访问)-腾讯云开发者社区-腾讯云

其余部分直接问的AI

子程序的参数

输入
文件路径 dll/exe文件的路径 Text
输出
图标ID列表 List

最近更新

修订版本 更新时间 更新说明
1 2024-11-19 17:01 修复无法获取的bug
0 2024-11-18 16:50

最近讨论

暂无讨论