如何获取给定扩展名的图标.强制扩展名,我需要获取图标. [英] How to get the icon of a given extension. jus giving the extension i need to get the icon.?

查看:85
本文介绍了如何获取给定扩展名的图标.强制扩展名,我需要获取图标.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已将SHGetFileInfo和SHGFI_USEFILEATTRIBUTES用于uFlag
还会显示错误
任何想法都请.此代码在Internet中给出,可使用其扩展名从ftp获取文件的图标,但显示错误.
它显示错误传递给Icon的Win32句柄无效或类型错误".
看看代码是否错误

i''ve used SHGetFileInfo with SHGFI_USEFILEATTRIBUTES for uFlag
but also it shows error
any idea please.this code is given in internet to get the icon of a file from ftp using its extension but it shows error.
it shows error "Win32 handle that was passed to Icon is not valid or is the wrong type".
see whether the code is wrong

<StructLayout(LayoutKind.Sequential)> _
Public Structure SHFILEINFO
Public hIcon As IntPtr
Public iIcon As Integer
Public dwAttributes As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
Public szDisplayName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> _
Public szTypeName As String
End Structure

Public Declare Ansi Function SHGetFileInfo Lib "shell32.dll" (ByVal pszPath As String, _
ByVal dwFileAttributes As Form1.FileAttributes, ByRef psfi As SHFILEINFO, ByVal 
cbFileInfo As UInt32, _
ByVal uFlags As FileInformationFlags) As IntPtr

<Flags()> _
Public Enum FileAttributes As UInt32
FILE_ATTRIBUTE_ARCHIVE = &H20
FILE_ATTRIBUTE_COMPRESSED = &H800
<EditorBrowsable(EditorBrowsableState.
Never)> _
FILE_ATTRIBUTE_DEVICE = &H40
FILE_ATTRIBUTE_DIRECTORY = &H10
FILE_ATTRIBUTE_ENCRYPTED = &H4000
FILE_ATTRIBUTE_HIDDEN = &H2
FILE_ATTRIBUTE_NORMAL = &H80
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = &H2000
FILE_ATTRIBUTE_OFFLINE = &H1000
FILE_ATTRIBUTE_READONLY = &H1
FILE_ATTRIBUTE_REPARSE_POINT = &H400
FILE_ATTRIBUTE_SPARSE_FILE = &H200
FILE_ATTRIBUTE_SYSTEM = &H4
FILE_ATTRIBUTE_TEMPORARY = &H100
FILE_ATTRIBUTE_VIRTUAL = &H10000
End Enum

<Flags()> _
Public Enum FileInformationFlags As UInt32
<EditorBrowsable(EditorBrowsableState.
Advanced)> _
zeor = 0UI
SHGFI_ADDOVERLAYS = &H20UI
SHGFI_ATTR_SPECIFIED = &H20000UI
SHGFI_ATTRIBUTES = &H800UI
SHGFI_DISPLAYNAME = &H200UI
SHGFI_EXETYPE = &H2000UI
SHGFI_ICON = &H100UI
SHGFI_ICONLOCATION = &H1000UI
SHGFI_LARGEICON = &H0UI
SHGFI_LINKOVERLAY = &H8000UI
SHGFI_OPENICON = &H2UI
SHGFI_OVERLAYINDEX = &H40UI
SHGFI_PIDL = &H8UI
SHGFI_SELECTED = &H10000UI
SHGFI_SHELLICONSIZE = &H4UI
SHGFI_SMALLICON = &H1UI
SHGFI_SYSICONINDEX = &H4000UI
SHGFI_TYPENAME = &H400UI
SHGFI_USEFILEATTRIBUTES = &H10UI
End Enum

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
Dim hImgSmall As IntPtr
Dim hImgLarge As IntPtr
Dim fName As String
Dim shinfo As SHFILEINFO
shinfo = New SHFILEINFO()

'fName = st
'fName = s4(i) 'full file path
Dim st1 As String = st.Substring(st.LastIndexOf("."))
fName = Form2.FolderBrowserDialog1.SelectedPath + "\du" + st1
MsgBox(fName)
hImgLarge = SHGetFileInfo(fName, 
FileAttributes.FILE_ATTRIBUTE_NORMAL, shinfo, Marshal.SizeOf(shinfo),
FileInformationFlags.SHGFI_USEFILEATTR…

Dim myIcon As System.Drawing.Icon
myIcon = System.Drawing.Icon.
FromHandle(shinfo.hIcon)

m.PictureBox1.Image = myIcon.ToBitmap
m.PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub



编辑TR-请把您的代码放在< pre>



Edit TR - Please put you code in <pre> tags, it makes it easier to read.

推荐答案

答案很简单:

The answer is quite simple:

Dim sProg As String
Dim sFileExt As String = ".pdf"

tmp = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(sFileExt).GetValue("")
' Get the program that will open files with this extension
sProg = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(tmp).OpenSubKey("shell").OpenSubKey("open").OpenSubKey("command").GetValue("")

' strip the filename
If sProg.Substring(0, 1) = Chr(34) Then
    sProg = sProg.Substring(1, sProg.IndexOf(Chr(34), 2) - 1)
Else
    sProg = sProg.Substring(0, sProg.IndexOf(" ", 2))
End If
sProg = Replace(sProg, "%1", "")

' Extract the icon from the program

oIcon = System.Drawing.Icon.ExtractAssociatedIcon(sProg)


这篇关于如何获取给定扩展名的图标.强制扩展名,我需要获取图标.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆