By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,041 Members | 1,018 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,041 IT Pros & Developers. It's quick & easy.

How get file sistem icon in .NET (like SHGetFileInfo)?

P: n/a
Hi
In Windows every file have yours icon, so:
how I get them ( Extension and Icon) and
save in a imageList for use later in a ListView?

In VB6 was SHGetFileInfo.

In VB.NET?

How I can obtain a CDROM letters? (D:/, E:/ ecc.)
Nov 20 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
* "Giuseppe Pezzella" <gp*******@yahoo.com> scripsit:
In Windows every file have yours icon, so:

how I*get them ( Extension and Icon) and

save in*a imageList for use later in a ListView?

*

In VB6*was SHGetFileInfo.*
It's the same function, but declares need to be updated.

<URL:http://vbaccelerator.com/article.asp?id=4302>
How I can obtain a CDROM letters? (D:/, E:/ ecc.)


P/invoke:

'GetDriveType'

Sample:

<URL:http://www.google.ch/groups?selm=OiKxMMizCHA.1776%40TK2MSFTNGP09>

- or -

WMI:

<URL:http://dotnet.mvps.org/dotnet/code/filesystem/>
-> "Laufwerke und ihren Typ ermitteln"

--
Herfried K. Wagner [MVP]
<URL:http://dotnet.mvps.org/>
Nov 20 '05 #2

P: n/a
In VB6 was SHGetFileInfo.

In VB.NET?
SHGetFileInfo

How I can obtain a CDROM letters? (D:/, E:/ ecc.)


In v1.x, you use the GetLogicalDrives and GetDriveType Win32 APIs (or
perhaps WMI). In 2.0 there's a System.IO.DriveInfo class.

Mattias

--
Mattias Sjögren [MVP] mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.
Nov 20 '05 #3

P: n/a
Hi,

Use shgetfileinfo to get them. Here a listview control to the form and name it lv. Here is an example.

Private Function getLocalIcons(ByVal szFolderPath As String)

Dim dirInfo As New System.IO.DirectoryInfo(szFolderPath)

Dim di As System.IO.DirectoryInfo

Dim fi As System.IO.FileInfo

Dim lvitem As ListViewItem

Dim hIcon As Icon

Dim cIcon As New clsGetIcon

Dim htIcons As New Hashtable

Dim intIndex As Integer

imlIcon.Images.Clear()

lv.Items.Clear()

lv.SmallImageList = imlIcon

For Each di In dirInfo.GetDirectories()

lvitem = lv.Items.Add(di.Name)

hIcon = cIcon.getIcon(di.FullName)

If htIcons.ContainsKey(hIcon) Then

intIndex = htIcons(hIcon)

Else

imlIcon.Images.Add(hIcon.ToBitmap)

intIndex = imlIcon.Images.Count - 1

End If

lvitem.ImageIndex = intIndex

Next

For Each fi In dirInfo.GetFiles()

lvitem = lv.Items.Add(fi.Name)

hIcon = cIcon.getIcon(fi.FullName)

If htIcons.ContainsKey(hIcon) Then

intIndex = htIcons(hIcon)

Else

imlIcon.Images.Add(hIcon.ToBitmap)

intIndex = imlIcon.Images.Count - 1

End If

lvitem.ImageIndex = intIndex

Next

End Function

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

lv.SuspendLayout()

getLocalIcons("C:\")

lv.ResumeLayout()

End Sub

The helper class.

Imports System.Runtime.InteropServices

Public Class clsGetIcon

Public Structure SHFILEINFO

Dim hIcon As IntPtr

Dim iIcon As Integer

Dim dwAttributes As Integer

<VBFixedString(260), System.Runtime.InteropServices.MarshalAs(System.Ru ntime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=260)> Public szDisplayName As String

'String that contains the name of the file as it appears in the Microsoft® Windows® Shell, or the path and file name of the file that contains the icon representing the file.

<VBFixedString(80), System.Runtime.InteropServices.MarshalAs(System.Ru ntime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=80)> Public szTypeName As String

End Structure
Private Declare Auto Function SHGetFileInfo Lib "shell32" (ByVal pszPath As String, _

ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFO, _

ByVal cbFileInfo As Integer, ByVal uFlags As Integer) As Integer

Private Const SHGFI_ICON As Integer = &H100

Private Const SHGFI_SMALLICON As Integer = &H1 'Small icon

Private Const SHGFI_TYPENAME As Integer = &H400 ' get type name

Public Function getIcon(ByVal szFilename As String) As Icon

Try

Dim aSHFileInfo As New SHFILEINFO

Dim cbFileInfo As Integer = _

Marshal.SizeOf(aSHFileInfo)

Dim uflags As Integer = SHGFI_ICON Or SHGFI_SMALLICON

SHGetFileInfo(szFilename, 0, aSHFileInfo, cbFileInfo, uflags)

Dim myIcon As Icon

myIcon = Icon.FromHandle(aSHFileInfo.hIcon)

aSHFileInfo.szTypeName = Space(255)

SHGetFileInfo(szFilename, 0, aSHFileInfo, cbFileInfo, SHGFI_TYPENAME)

Trace.WriteLine(aSHFileInfo.szTypeName)

Return myIcon

Catch ex As Exception

Debug.WriteLine(ex.ToString)

Return Nothing

End Try

End Function

End Class

Ken

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

"Giuseppe Pezzella" <gp*******@yahoo.com> wrote in message news:Bo*****************@news3.tin.it...
Hi
In Windows every file have yours icon, so:
how I get them ( Extension and Icon) and
save in a imageList for use later in a ListView?

In VB6 was SHGetFileInfo.

In VB.NET?

How I can obtain a CDROM letters? (D:/, E:/ ecc.)
Nov 20 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.