vb怎样读取一个文件的图标(任意文件)??

firendlys 2010-10-05 07:06:34
这个图标是在文件夹中看到的图标,任意格式的文件.
具体来说,
如果是exe,那么就直接读取这个exe的图标
如果是快捷方式,就读取快捷方式指向的文件的图标(指向的文件可能是快捷方式,也可能是exe).
如果是其他文件,就读取相应的关联程序的图标(即,txt,就读取记事本的图标,doc就读取word的图标,依次类推)...

简单来说,就是读取 在windows资源管理器中看到的 那个文件的图标..
(我暂时只知道exe可以用extracticon , drawicon 2个函数来读取,但除exe外的其他文件不知道怎样读..)
...全文
238 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独剑_LPZ 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 firendlys 的回复:]
汗```不小心,点错了,分给错人了...怎么办??
[/Quote]
[Quote=引用 9 楼 fzx4936 的回复:]
分给谁都无所谓啊 主要是能解决搂主的问题就好 而且楼主也认可这个问题值这个分数就好
[/Quote]
好人呀,lz可以再开一帖,分给fzx4936即可
fzx4936 2010-10-08
  • 打赏
  • 举报
回复
分给谁都无所谓啊 主要是能解决搂主的问题就好 而且楼主也认可这个问题值这个分数就好
firendlys 2010-10-07
  • 打赏
  • 举报
回复
汗```不小心,点错了,分给错人了...怎么办??
ao5212 2010-10-07
  • 打赏
  • 举报
回复
学习中……
孤独剑_LPZ 2010-10-07
  • 打赏
  • 举报
回复
4楼的方法更好
孤独剑_LPZ 2010-10-07
  • 打赏
  • 举报
回复
一般要用到的api有:OleCreatePictureIndirect,ExtractIconEx,DestroyIcon
网上有例子
fzx4936 2010-10-07
  • 打赏
  • 举报
回复

'ImageList
Private Const MAX_PATH = 260
Private Const SHGFI_DISPLAYNAME = &H200 ' get display name
Private Const SHGFI_EXETYPE = &H2000 ' return exe type
Private Const SHGFI_LARGEICON = &H0 ' get large icon
Private Const SHGFI_SHELLICONSIZE = &H4 ' get shell size icon
Private Const SHGFI_SMALLICON = &H1 ' get small icon
Private Const SHGFI_SYSICONINDEX = &H4000 ' get system icondex
Private Const SHGFI_TYPENAME = &H400 ' get type name
Private Const ILD_BLEND50 = &H4
Private Const ILD_BLEND25 = &H2
Private Const ILD_TRANSPARENT = &H1
Private Const CLR_NONE = &HFFFFFFFF
Private Const CLR_DEFAULT = &HFF000000
Private Type SHFILEINFO
hIcon As Long ' : icon
iIcon As Long ' : icondex
dwAttributes As Long ' : SFGAO_ flags
szDisplayName As String * MAX_PATH ' : display name (or path)
szTypeName As String * 80 ' : type name
End Type
Private 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
Private Declare Function ImageList_Draw Lib "comctl32.dll" (ByVal himl As Long, ByVal i As Long, ByVal hdcDst As Long, ByVal x As Long, ByVal y As Long, ByVal fStyle As Long) As Long
Private Declare Function ImageList_DrawEx Lib "comctl32.dll" (ByVal himl As Long, ByVal i As Long, ByVal hdcDst As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal rgbBk As Long, ByVal rgbFg As Long, ByVal fStyle As Long) As Long
Private Sub Form_Load()

Dim hImage As Long, udtFI As SHFILEINFO
'set the graphics mode of form1 to persistent
Me.AutoRedraw = True
'get the handle of the system image list that contains the large icon images
hImage = SHGetFileInfo("c:\thefile.tst", ByVal 0&, udtFI, Len(udtFI), SHGFI_SYSICONINDEX Or SHGFI_LARGEICON)
'draw the icon (normal)
ImageList_Draw hImage, udtFI.iIcon, Me.hDC, 0, 0, ILD_TRANSPARENT
'draw the icon (blended)
ImageList_DrawEx hImage, udtFI.iIcon, Me.hDC, 32, 0, 32, 32, CLR_NONE, CLR_DEFAULT, ILD_BLEND50
End Sub
firendlys 2010-10-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fzx4936 的回复:]
这个问题可不只值20哦
加到100我就告诉你
[/Quote]

先说答案,满意了,再加到100分,以免分数浪费...
嗯,为表诚意,先加到50分...
fzx4936 2010-10-05
  • 打赏
  • 举报
回复
这个问题可不只值20哦
加到100我就告诉你

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧