Как показать значок сетевой папки в списке? тот, у которого есть зеленая трубка под папкой, у меня есть код, который отлично работает с файлами и папками, но при посещении другого компьютера через сеть я не вижу сетевых папок, которые похожи на этот.Показать значок папки сети в списке просмотра VB.NET
что я должен добавить?
вот мой код: это, как отобразить значок в ListView
Dim fPath As String = Form2.TextBox1.Text
Dim di = New DirectoryInfo(fPath)
' store imagelist index for known/found file types
Dim exts As New Dictionary(Of String, Int32)
If di.Exists = True Then
Dim img As Image
Dim lvi As ListViewItem
For Each d In di.EnumerateDirectories("*.*", SearchOption.TopDirectoryOnly)
lvi = New ListViewItem(d.Name)
lvi.SubItems.Add("")
lvi.SubItems.Add(d.CreationTime.Date)
ListView1.Items.Add(lvi)
img = NativeMethods.GetShellIcon(d.FullName)
ImageList1.Images.Add(img)
lvi.ImageIndex = ImageList1.Images.Count - 1
Next
это, как я получаю иконки из Shell32.
Partial Public Class NativeMethods
Private Const MAX_PATH As Integer = 256
Private Const NAMESIZE As Integer = 80
Private Const SHGFI_ICON As Int32 = &H100
<StructLayout(LayoutKind.Sequential)>
Private Structure SHFILEINFO
Public hIcon As IntPtr
Public iIcon As Integer
Public dwAttributes As Integer
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAX_PATH)>
Public szDisplayName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=NAMESIZE)>
Public szTypeName As String
End Structure
<DllImport("Shell32.dll")>
Private Shared Function SHGetFileInfo(ByVal pszPath As String,
ByVal dwFileAttributes As Integer,
ByRef psfi As SHFILEINFO,
ByVal cbFileInfo As Integer,
ByVal uFlags As Integer) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True)>
Private Shared Function DestroyIcon(ByVal hIcon As IntPtr) As Boolean
End Function
Public Shared Function GetShellIcon(ByVal path As String) As Bitmap
Dim shfi As SHFILEINFO = New SHFILEINFO()
Dim ret As IntPtr = SHGetFileInfo(path, 0, shfi, Marshal.SizeOf(shfi), SHGFI_ICON)
If ret <> IntPtr.Zero Then
Dim bmp As Bitmap = System.Drawing.Icon.FromHandle(shfi.hIcon).ToBitmap
DestroyIcon(shfi.hIcon)
Return bmp
Else
Return Nothing
End If
End Function
End Class
Действительно, значки 'moricons.dll' очень старые, DLL не обновлялась со времени 16-разрядных Windows дней. Но вы можете найти множество новых значков, используемых современными версиями оболочки в 'imageres.dll'. –
Да, я знал, что морионы были очень (очень) старыми, мне было интересно, есть ли более новая версия.Я не знал о 'imageres.dll', спасибо! – Plutonix
Что касается кода для первой функции, я не уверен, почему вы беспокоитесь об исключениях, но если бы функции «FromHandle» или «ToBitmap» были выброшены, вы пропустили бы дескриптор значка. Вам нужно будет вызвать 'DestroyIcon' в блоке' finally'. –