Проблема с получением содержимого папки Мой компьютер

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Проблема с получением содержимого папки Мой компьютер

Сообщение Atoman » 23.05.2008 (Пт) 20:19

Здесь получаю интерфейс IShellFolder и перебираю содержимое папки Мой компьютер

Код: Выделить всё
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


Сыть проблемы такова : что никак не могу получить ни названия ни иконки объекта кроме папки Мой компьютер.

Плз. помогите, подскажите чего я делаю неправильно?
Вложения
Tree.png
Здесь то что у меня получилось
Tree.png (5.41 Кб) Просмотров: 376

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 26.05.2008 (Пн) 22:35

Видать никто не знает, или знают да молчат.
Ну да ладно сам разобрался.

Немого изменил класс MyTreeNode, теперь всё работает

Код: Выделить всё
................................................
        Public Sub New(ByVal pidl As IntPtr, ByVal parentpidl As IntPtr)
            MyBase.New()

                Me.m_PIDL = ILCombine(parentpidl, pidl)
................................................

    <DllImport("shell32.dll")> _
    Public Shared Function ILCombine(ByVal pIDLParent As IntPtr, ByVal pIDLChild As IntPtr) As IntPtr
    End Function


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList  
cron