Здравствуйте, white_znake, Вы писали:
_>Здравствуйте, Юрий Жмеренецкий, Вы писали:
ЮЖ>>* Для любых(?) папок вызов IShellFolder::GetDisplayNameOf(... SHGDN_FORPARSING | ?) должен возвращать путь к существующей папке.
ЮЖ>>* Также нужна реализация IShellFolder::ParseDisplayName.
ЮЖ>>Но с другой стороны, если следовать MSDN'у, то на запрос SHGDN_FORPARSING возвращаемые пути должны начинаться с
ЮЖ>>'::{CLSID for NSE}' — в этом случае не ясно как это(File Open Dialog) вообще может работать т.к. таких путей не существует.
ЮЖ>>Хотя, например по всем виртуальным папкам 'Сетевое окружение\Вся сеть\Microsoft Windows Network' можно свободно ходить
ЮЖ>>и любые пути возвращенные GetDisplayNameOf всегда состоят только из названия виртуальной папки(кроме корня).
ЮЖ>>Можно еще посмотерть исходники windows, там что-то было по этому поводу.
_>Т.е. если у меня:
_>VirtualDrive\Personal Documents\Folder1 — виртуальный путь к папке Folder1, то мне и надо возвращать VirtualDrive\Personal Documents\Folder1?
Зависит от флагов. Есть два варианта путей — относительно радительской папки и относительно рабочего стола. В описании SHGNO есть описания различных комбинаций параметров.
Например для папки 'Мои документы' на рабочем столе, пути возвращаемые IShellFolder::GetDisplayNameOf такие:
Относительно родительской папки:
Normal 'Мои документы'
Parsing '::{GUID}'
Addressbar 'Мои документы'
Parsing Addressbar 'Мои документы'
Editing 'Мои документы'
Относительно рабочего стола:
Normal 'Мои документы'
Parsing 'C:\Documents and Settings\<User>\My Documents' <------ SHGDN_FORPARSING
Addressbar 'Мои документы'
Parsing Addressbar 'Мои документы'
Editing 'Мои документы'
Для обычной папки:
Относительно родительской папки:
Normal 'qwerty'
Parsing 'qwerty'
Addressbar 'qwerty'
Parsing Addressbar 'qwerty'
Editing 'qwerty'
Относительно рабочего стола:
Normal 'qwerty'
Parsing 'C:\temp\qwerty' <--------- SHGDN_FORPARSING
Addressbar 'qwerty'
Parsing Addressbar 'C:\temp\qwerty'
Editing 'qwerty'
А вот для папки 'Сетевое окружение\Вся сеть\Microsoft Windows Network' немного иначе:
Атрибуты: SFGAO_FILESYSANCESTOR | SFGAO_STORAGEANCESTOR | SFGAO_HASSUBFOLDER | SFGAO_HASPROPSHEET | SFGAO_FOLDER | SFGAO_CANLINK
Относительно родительской папки:
Normal 'Microsoft Windows Network'
Parsing 'Microsoft Windows Network'
Addressbar 'Microsoft Windows Network'
Parsing Addressbar 'Microsoft Windows Network'
Editing 'Microsoft Windows Network'
Относительно рабочего стола:
Normal 'Microsoft Windows Network'
Parsing 'Microsoft Windows Network' <-- такой папки не существует(и флаг SFGAO_FILESYSTEM отсутствует).
Addressbar 'Microsoft Windows Network'
Parsing Addressbar 'Microsoft Windows Network'
Editing 'Microsoft Windows Network'
Это только для навигации по папкам из File Save Dialog. При сохранении оболочка должна откуда-то получить имя физической папки...