Foxtable(狐表)用户栏目专家坐堂 → [求助] 获取文件对应的图标


  共有3689人关注过本帖树形打印复制链接

主题:[求助] 获取文件对应的图标

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/28 16:44:00 [显示全部帖子]

 查了一下资料,发觉原来直接用就可以了

 

Dim icon As Icon = System.Drawing.Icon.ExtractAssociatedIcon("d:\test.xls")

'直接使用icon


'Dim fileStream As new System.IO.FileStream("d:\test.ico", System.IO.FileMode.Create)
'icon.Save(fileStream)
'fileStream.Close()


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/28 17:00:00 [显示全部帖子]

根据后缀名得到的,参考

 

全局代码

 

<System.Runtime.InteropServices.DllImportAttribute("shell32.dll", EntryPoint := "ExtractIconExW", CallingConvention := System.Runtime.InteropServices.CallingConvention.StdCall)> _
Public Function ExtractIconExW(<System.Runtime.InteropServices.InAttribute> <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)> lpszFile As String, nIconIndex As Integer, ByRef phiconLarge As System.IntPtr, ByRef phiconSmall As System.IntPtr, nIcons As UInteger) As UInteger
End Function

 

------------

 

获取代码

 

Dim extsubkey = Registry.ClassesRoot.OpenSubKey(".xls")
'从注册表中读取扩展名相应的子键
If extsubkey IsNot Nothing Then
    Dim extdefaultvalue = DirectCast(extsubkey.GetValue(Nothing), String)
    '取出扩展名对应的文件类型名称
    Dim typesubkey = Registry.ClassesRoot.OpenSubKey(extdefaultvalue)
    '从注册表中读取文件类型名称的相应子键
    If typesubkey IsNot Nothing Then
        Dim description = DirectCast(typesubkey.GetValue(Nothing), String)
        '得到类型描述字符串
        Dim defaulticonsubkey = typesubkey.OpenSubKey("DefaultIcon")
        '取默认图标子键
        If defaulticonsubkey IsNot Nothing Then
            '得到图标来源字符串
            Dim defaulticon = DirectCast(defaulticonsubkey.GetValue(Nothing), String)
            '取出默认图标来源字符串
            Dim iconstringArray = defaulticon.Split(","C)
            Dim nIconIndex As Integer = 0
            If iconstringArray.Length > 1 Then
                Integer.TryParse(iconstringArray(1), nIconIndex)
            End If
            '得到图标
           
            Dim phiconLarge As new System.IntPtr
            Dim phiconSmall As new System.IntPtr
            ExtractIconExW(iconstringArray(0).Trim(""""C), nIconIndex, phiconLarge, phiconSmall, 1)
            Dim icon As icon = Icon.FromHandle(phiconLarge)
            Dim fileStream As new System.IO.FileStream("d:\test.ico", System.IO.FileMode.Create)
            icon.Save(fileStream)
            fileStream.Close()
        End If
    End If
End If

[此贴子已经被作者于2014-8-28 17:00:04编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/29 16:52:00 [显示全部帖子]

以下是引用lsy在2014-8-29 16:35:00的发言:

提取图标,是很方便。

 

怎么提取的图标,都这么丑呢?不像系统中的那么鲜活。

 

提取Icon保存为.ico格式,就是有偏差的,如果你要完整的,可以保存成图片

 

Dim icon As Icon = System.Drawing.Icon.ExtractAssociatedIcon("d:\test.xls")
icon.ToBitmap().save("d:\aaaaaa.ico")


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/29 17:12:00 [显示全部帖子]

以下是引用lsy在2014-8-29 17:09:00的发言:
提取不到,都是未知格式的图标。

 

什么意思?这个保存后不是ico格式,是图片格式。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/29 17:40:00 [显示全部帖子]

以下是引用rjh4078在2014-8-29 17:35:00的发言:

ftp上的文件可以获取吗?

 

ftp上的文件?

 

方法1:用后缀名的方式获取;

 

方法2:把文件下载,再获取。


 回到顶部