- Код: Выделить всё
GetDesktopFolder(ShellFolder)
GetSpecialFolderLocation(Me.Handle, CSIDL.DRIVES, pidl)
ImgList = GetFileInfo(pidl, &H0, FileInfo, _
Marshal.SizeOf(FileInfo), SHGFI.SMALLICON _
Or SHGFI.SYSICONINDEX Or SHGFI.PIDL)
SendMessage(MyTreeView.Handle, TVM_SETIMAGELIST, TVSIL_NORMAL, ImgList)
Dim RootNode As TreeNode = New MyTreeNode(pidl)
MyTreeView.Nodes.Add(RootNode)
ShellFolder.BindToObject(pidl, IntPtr.Zero, IID_IShellFolder, tmpShellFolder)
tmpShellFolder.EnumObjects(IntPtr.Zero, SHCONTF.FOLDERS, EnumIDList)
Do While EnumIDList.Next(1, tmppidl, pceltFetched) = 0
RootNode.Nodes.Add(New MyTreeNode(tmppidl))
pceltFetched = 0
Loop
А здесь (для удобства) записываю свё необходимое в ноды.
- Код: Выделить всё
Private Class MyTreeNode
Inherits TreeNode
Private FileInfo As SHFILEINFO
Private m_PIDL As IntPtr
Public Sub New(ByVal ppidl As IntPtr)
MyBase.New()
Me.m_PIDL = ppidl
GetFileInfo(Me.m_PIDL, &H0, FileInfo, Marshal.SizeOf(FileInfo), SHGFI.PIDL _
Or SHGFI.SYSICONINDEX _
Or SHGFI.DISPLAYNAME _
Or SHGFI.TYPENAME)
MyBase.Text = FileInfo.szDisplayName
MyBase.ToolTipText = FileInfo.szTypeName
MyBase.ImageIndex = FileInfo.iIcon
MyBase.SelectedImageIndex = FileInfo.iIcon
End Sub
Protected Overrides Sub Finalize()
If Not Me.m_PIDL.Equals(IntPtr.Zero) Then
Marshal.FreeCoTaskMem(Me.m_PIDL)
End If
GC.SuppressFinalize(Me)
MyBase.Finalize()
End Sub
Public ReadOnly Property PIDL() As IntPtr
Get
Return m_PIDL
End Get
End Property
End Class
Сыть проблемы такова : что никак не могу получить ни названия ни иконки объекта кроме папки Мой компьютер.
Плз. помогите, подскажите чего я делаю неправильно?