Показать NSE в Save File Dialog
От: white_znake  
Дата: 28.10.08 10:02
Оценка:
Здравствуйте, уважаемые коллеги

Подскажите как отобразить свой NSE в Save File Dialog?
Какие методы каких интерфейсов переопределить

P.S. в инете найти не смог
Re: Показать NSE в Save File Dialog
От: Юрий Жмеренецкий ICQ 380412032
Дата: 29.10.08 10:44
Оценка: 1 (1)
Здравствуйте, white_znake, Вы писали:

_>Здравствуйте, уважаемые коллеги


_>Подскажите как отобразить свой NSE в Save File Dialog?

_>Какие методы каких интерфейсов переопределить

_>P.S. в инете найти не смог


Готового ответа нет, т.к. по этому поводу документация отсутствует. Что удалось обнаружить в свое время:
* При вызове IShellFolder::GetAttributesOf должны быть установлены атрибуты SFGAO_FILESYSTEM/SFGAO_FILEANCESTOR (включая корневую папку — для нее атрибуты устанавливаются в реестре).
* Для любых(?) папок вызов IShellFolder::GetDisplayNameOf(... SHGDN_FORPARSING | ?) должен возвращать путь к существующей папке.
* Также нужна реализация IShellFolder::ParseDisplayName.

Но с другой стороны, если следовать MSDN'у, то на запрос SHGDN_FORPARSING возвращаемые пути должны начинаться с
'::{CLSID for NSE}' — в этом случае не ясно как это(File Open Dialog) вообще может работать т.к. таких путей не существует.

Хотя, например по всем виртуальным папкам 'Сетевое окружение\Вся сеть\Microsoft Windows Network' можно свободно ходить
и любые пути возвращенные GetDisplayNameOf всегда состоят только из названия виртуальной папки(кроме корня).
Можно еще посмотерть исходники windows, там что-то было по этому поводу.

PS. Есть еще диалоги CopyTo/MoveTo.
Re[2]: Показать NSE в Save File Dialog
От: white_znake  
Дата: 29.10.08 13:29
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:


ЮЖ>* Для любых(?) папок вызов 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?
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. При сохранении оболочка должна откуда-то получить имя физической папки...
Re[4]: Показать NSE в Save File Dialog
От: white_znake  
Дата: 29.10.08 15:14
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:

ЮЖ>Это только для навигации по папкам из File Save Dialog. При сохранении оболочка должна откуда-то получить имя физической папки...


Сейчас пытаюсь понять как сохранять файлы... Кроме как захучить сохранение в Save Dialog в голову ничего не приходит
Re[5]: Показать NSE в Save File Dialog
От: SerzH_Malchikof Россия  
Дата: 02.02.09 07:42
Оценка:
Здравствуйте, white_znake, Вы писали:

_>Здравствуйте, Юрий Жмеренецкий, Вы писали:


ЮЖ>>Это только для навигации по папкам из File Save Dialog. При сохранении оболочка должна откуда-то получить имя физической папки...


_>Сейчас пытаюсь понять как сохранять файлы... Кроме как захучить сохранение в Save Dialog в голову ничего не приходит


Можно поинтересоваться результатами работы у автора? Сам сейчас мучаюсь этой же проблемой
Re[2]: Показать NSE в Save File Dialog
От: Аноним  
Дата: 19.03.09 13:55
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:

ЮЖ>Здравствуйте, white_znake, Вы писали:


_>>Здравствуйте, уважаемые коллеги


_>>Подскажите как отобразить свой NSE в Save File Dialog?

_>>Какие методы каких интерфейсов переопределить

_>>P.S. в инете найти не смог


ЮЖ>Готового ответа нет, т.к. по этому поводу документация отсутствует. Что удалось обнаружить в свое время:

ЮЖ>* При вызове IShellFolder::GetAttributesOf должны быть установлены атрибуты SFGAO_FILESYSTEM/SFGAO_FILEANCESTOR (включая корневую папку — для нее атрибуты устанавливаются в реестре).
ЮЖ>* Для любых(?) папок вызов IShellFolder::GetDisplayNameOf(... SHGDN_FORPARSING | ?) должен возвращать путь к существующей папке.
Из за чего при Open диалоге эксплорер даже не вызывает GetDisplayNameOf? Или я что-то не правильно делаю?

ЮЖ>* Также нужна реализация IShellFolder::ParseDisplayName.


ЮЖ>Но с другой стороны, если следовать MSDN'у, то на запрос SHGDN_FORPARSING возвращаемые пути должны начинаться с

ЮЖ>'::{CLSID for NSE}' — в этом случае не ясно как это(File Open Dialog) вообще может работать т.к. таких путей не существует.

ЮЖ>Хотя, например по всем виртуальным папкам 'Сетевое окружение\Вся сеть\Microsoft Windows Network' можно свободно ходить

ЮЖ>и любые пути возвращенные GetDisplayNameOf всегда состоят только из названия виртуальной папки(кроме корня).
ЮЖ>Можно еще посмотерть исходники windows, там что-то было по этому поводу.

ЮЖ>PS. Есть еще диалоги CopyTo/MoveTo.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.