找了好多天,问了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
修订版本 | 更新时间 | 更新说明 |
---|---|---|
1 | 2天14小时前 | 修复无法获取的bug |
0 | 3天14小时前 |