Re[3]: Показать NSE в Save File Dialog
От: Юрий Жмеренецкий ICQ 380412032
Дата: 29.10.08 14:16
Оценка: 3 (1)
Здравствуйте, 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. При сохранении оболочка должна откуда-то получить имя физической папки...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.