дерево надо строить начиная не с файлов, а с рабочего стола, IShellFolder к которому получаешь через SHGetDesktopFolder, из IShellFolder можно получить (используя IShellFolder::GetUIObjectOf) IExtractIcon который, путь к исконке и саму иконку. А также из IShellFolder'а перечисляешь всех потомков от Desktop'а. Очень удобно и быстро стоиться дерево (сохраняй указатели на IShellFolder в ItemData), методы позволяют узнать есть ли у папки подпапки и ты можешь добавить в дерево временные подэлементы, кажем с названием '*'( чтобы были "плюсики" у папок), когда юзер щелкает на папку ты проверяешь подэлемент если он '*', то удаляешь временный подэлемент и заполнаяешь потомков, иначе потомки уже заполнены.
P.S. кстати узнать РЕАЛЬНЫЕ путьи к папкам типа MyDocuments, Desktop и подобным можно использовать
SHGetFolderPath
SHGetSpecialFolderLocation
SHGetSpecialFolderPath
Public ff As Shell32.Folder
Private ws As New Shell32.Shell
...
Dim f As Shell32.FolderItem
dim Litem as listitem
'это для корзины
Set ff = ws.NameSpace(ssfBITBUCKET)
For Each f In ff.Items
Set Litem = ListView1.Listitems.Add
Litem.Text = f.Name
next
Сейчас этот форум просматривают: AhrefsBot и гости: 184