精易论坛

标题: 获取文件图标 [打印本页]

作者: 墓志铭    时间: 2021-9-4 22:42
标题: 获取文件图标
功能类似: 提取资源文件图标 (, , , )
但是貌似这个函数不能黑月编译?不知道,反正我试了不行

获取的文件是icon结构的

利用了这个api
SHGetFileInfo

来获取文件的图标,不只是exe文件,任何文件的图标都能获得,甚至文件夹



功能等效于精易模块的文件_取图标 (, , , , )
但是代码量更少,所以更快。


默认大小是32*32可以自己试着改
  
子程序名返回值类型公开备 注
获取ico图标字节集 
参数名类 型参考可空数组备 注
文件路径文本型
变量名类 型静态数组备 注
hIco整数型 
img字节集 
场景句柄1整数型 
位图句柄1整数型 
位图数据字节集 
屏幕设备句柄整数型 
位图句柄整数型 
场景句柄整数型 
位图指针整数型 
旧位图句柄整数型 
数组整数型 
sInfo整数型1
CoInitialize (0)
SHGetFileInfo (文件路径, 128, sInfo, 0, 256)
hIco = sInfo [1]
CoUninitialize ()
屏幕设备句柄 = GetDC (0)
场景句柄1 = CreateCompatibleDC (屏幕设备句柄)
位图句柄1 = CreateCompatibleBitmap (屏幕设备句柄, 32, 32)
SelectObject (场景句柄1, 位图句柄1)
DrawIconEx (场景句柄1, 0, 0, hIco, 32, 32, 0, 0, 3)
位图数据 = { 40, 0, 0, 0, 32, 0, 0, 0, 32, 0, 0, 0, 1, 0, 32 }取空白字节集 (4121)
场景句柄 = CreateCompatibleDC (场景句柄1)
位图句柄 = CreateDIBSection1 (场景句柄, 位图数据, 0, 位图指针, 0, 0)
旧位图句柄 = SelectObject (场景句柄, 位图句柄)
BitBlt (场景句柄, 0, 0, 32, 32, 场景句柄1, 0, 0, 13369376)
RtlMoveMemory (lstrcpynA (位图数据, 位图数据, 0) + 40, 位图指针, 4096)
ReleaseDC (0, 屏幕设备句柄)
DeleteDC (场景句柄1)
DeleteDC (场景句柄)
DeleteObject (旧位图句柄)
DeleteObject (位图句柄1)
DeleteObject (位图句柄)
img = { 0, 0, 1, 0, 1, 0, 32, 32, 0, 0, 1, 0, 32, 0, 168, 16, 0, 0, 22, 0, 0, 0, 40, 0, 0, 0, 32, 0, 0, 0, 64, 0, 0, 0, 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 14, 0, 0, 196, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }取字节集右边 (位图数据, 4096)取空白字节集 (128)
返回 (img)
DLL命令名返回值类型公开备 注
SHGetFileInfo整数型 ,
DLL库文件名:
 
在DLL库中对应命令名:
SHGetFileInfo
参数名类 型传址数组备 注
pszPath文本型
dwFileAttributes整数型
psfi整数型
cbFileInfo整数型
uFlags整数型
DLL命令名返回值类型公开备 注
lstrcpynA整数型 , 将源字符串中指定数量的字符复制到目标字符串中。此方法为将如果将iMaxLength设置为0,则通过此方法可以取到lpString1的地址。
DLL库文件名:
kernel32
在DLL库中对应命令名:
lstrcpynA
参数名类 型传址数组备 注
lpString1字节集目标字符串
lpString2字节集源字符串
iMaxLength整数型复制的长度


获取文件图标.e (140.26 KB, 下载次数: 122)

1.bmp (569.84 KB, 下载次数: 4)

1.bmp

作者: 汉族    时间: 2021-9-5 00:22
前排一下
作者: singlecolor    时间: 2021-9-5 03:05

作者: 君九    时间: 2021-9-5 08:32

作者: Conquer    时间: 2021-9-5 15:11

作者: zhaode2888    时间: 2021-9-6 15:24
支持开源
作者: 懒人定制软件    时间: 2021-9-8 01:02
  感谢发布原创作品,一定好好学习,天天向上
作者: 易辈子    时间: 2021-9-9 18:46
你确定能行?
错误(10003): 指定Dll命令名称“CoInitialize”未找到。
作者: 小风明SS    时间: 2021-9-9 21:12
不行啊,一调用就程序就崩溃
作者: 墓志铭    时间: 2021-9-14 23:48
易辈子 发表于 2021-9-9 18:46
你确定能行?
错误(10003): 指定Dll命令名称“CoInitialize”未找到。

缺哪个api就加哪个api呗,实在不行直接运行那个源码呗
作者: 墓志铭    时间: 2021-9-14 23:48
小风明SS 发表于 2021-9-9 21:12
不行啊,一调用就程序就崩溃

咋会啊,我这没问题
作者: qe147258    时间: 2021-10-15 20:59
6666666666666666666666666666
作者: 刘鑫1994    时间: 2021-11-18 21:42
错误(10003): 指定Dll命令名称“CoInitialize”未找到。
作者: wangkaitao6666    时间: 2022-2-23 09:17
谢谢 楼主分享
作者: gdwlwl    时间: 2022-3-21 20:59
谢谢分享
作者: gdwlwl    时间: 2022-3-21 21:11
啥都缺
作者: fxiaodi    时间: 2022-4-21 07:01
谢谢分享
作者: yingle    时间: 2022-6-13 09:03
支持开源~!感谢分享
作者: faka23    时间: 2022-10-29 16:15
来获取文件的图标,不只是exe文件,任何文件的图标都能获得,甚至文件夹
作者: 胡小星    时间: 2023-7-16 18:24
能用到是能用,但是批量获取图标会闪退。。精易模块里面的文件_取图标没有这个问题。
作者: caohu1987    时间: 2024-5-7 15:42
好像有问题
作者: wsysyb    时间: 2024-5-20 16:36
谢谢分享
作者: 在看风云    时间: 2024-12-30 22:47
111111111111111111111111
作者: 在看风云    时间: 2025-4-26 10:16
言言言言言言言言言言言




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4