乘简 发表于 2017-11-29 16:45:25

VB 获取任意文件默认图标

Private Type SHFILEINFO
    hIcon As Long                     'out: icon
    iIcon As Long                     'out: icon index
    dwAttributes As Long                'out: SFGAO_ flags
    szDisplayName As String * 260       'out: display name (or path)
    szTypeName As String * 80         'out: type name
End Type
Public Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
Public Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long

Private Function 获取文件类型图标(t3 As String) As Long
    Dim FI As SHFILEINFO
    Dim ts As String
   
    ts = App.Path & "tmp." & t3   '自动生成临时文件路径与文件名
    Open ts For Binary As #1    '创建文件
    Close #1                  '关闭文件,此时产生空文件
   
    SHGetFileInfo ts, 0, FI, Len(FI), &H100   '获取类型图标
   
    Kill ts                     '删除文件
   
    'DrawIcon Picture1.hdc, 0, 0, FI.hIcon'可以用此函数显示出来
    获取文件类型图标 = FI.hIcon             '返回句柄,接下来可以用DrawIcon来显示
End Function

乘简 发表于 2017-11-29 16:55:12

有一个手误,里面的Path改为app.path & "\tmp." & t3,这里的t3为扩展名

0xAA55 发表于 2017-12-4 07:05:02

乘简 发表于 2017-11-29 16:55
有一个手误,里面的Path改为app.path & "\tmp." & t3,这里的t3为扩展名

然而你并没有把DeleteObject也声明了。。这个图标是需要销毁的。

雨天 发表于 2020-7-2 19:14:03

不错好东西

大宝 发表于 2020-7-9 17:20:21

来支持一下

东东哥 发表于 2021-4-10 16:45:06

这个Kill ts,我以为把文件也删除了。
页: [1]
查看完整版本: VB 获取任意文件默认图标