Здравствуйте, Хитрик Денис, Вы писали:
ХД>Расширение здесь — SNExLibrary.DesnaSF. Оно видно в области IShellView, и его нет в дереве слева! Хочу, чтобы оно там (в дереве) появилось.
ХД>Куда копать, подскажите
В сторону реестра. У твоей компоненты нужно прописать флаги, которые будут примяться к корневой папке. Название параметра и какие биты нужно прописать — звиняй уже не помню ... Можно посмотреть что там у "мой копьютер" или "корзина" прописано.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: Namespace extension, IShellFolder и проводник
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>В сторону реестра. У твоей компоненты нужно прописать флаги, которые будут примяться к корневой папке. Название параметра и какие биты нужно прописать — звиняй уже не помню :) ... Можно посмотреть что там у "мой копьютер" или "корзина" прописано
Флаги расположенные HKCR/CLSID/{guid}/ShellFolder/Attrubutes? Или где-то ещё?
Здравствуйте, Хитрик Денис, Вы писали:
КД>>В сторону реестра. У твоей компоненты нужно прописать флаги, которые будут примяться к корневой папке. Название параметра и какие биты нужно прописать — звиняй уже не помню ... Можно посмотреть что там у "мой копьютер" или "корзина" прописано ХД>Флаги расположенные HKCR/CLSID/{guid}/ShellFolder/Attrubutes? Или где-то ещё?
Да, именно там! Оказалось, что я один раз их поставил, но при следующем же запуске приложения регистрации все значения поудалялись, потому папка и не показывалась.
Спасибо Дмитрию за то, что заставил меня ещё раз прошерстить реестр и обнаружить эту досадную неприятность!
Здравствуйте, Хитрик Денис, Вы писали:
ХД>Да, именно там! Оказалось, что я один раз их поставил, но при следующем же запуске приложения регистрации все значения поудалялись, потому папка и не показывалась.
ХД>Спасибо Дмитрию за то, что заставил меня ещё раз прошерстить реестр и обнаружить эту досадную неприятность!
Хоть кому-то пригодились мои школьные знания
Это все мелочи — главная жопа с проводником в том что внутри него нельзя по-человечески использовать CoCreateInstace для создания других COM-объектов из DLL (до NT4 — точно). Вот. Но это тоже решаемо
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[5]: Namespace extension, IShellFolder и проводник
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Хоть кому-то пригодились мои школьные знания
КД>Это все мелочи — главная жопа с проводником в том что внутри него нельзя по-человечески использовать CoCreateInstace для создания других COM-объектов из DLL (до NT4 — точно). Вот. Но это тоже решаемо
Хм... не уверен, что мне это всё пригодится, но можно ли чуть подробнее? Общее направление
Здравствуйте, Хитрик Денис, Вы писали:
КД>>Это все мелочи — главная жопа с проводником в том что внутри него нельзя по-человечески использовать CoCreateInstace для создания других COM-объектов из DLL (до NT4 — точно). Вот. Но это тоже решаемо
ХД>Хм... не уверен, что мне это всё пригодится, но можно ли чуть подробнее? Общее направление
На сколько я помню выводы из своих "исследований", проводник не инициализирует COM внутри своих потоков и для создания компонент и использует свой альтернативный(?) механизм. Вообщем, в конечном итоге я написал свой "менеждер" COM-объектов из DLL, который управляет DLL-ями. И все начало работать без всяких труднообъяснимых проблем.
Так что если вдруг твоя программа начнет расти — лучше сразу обрати на это внимание.
Принцип работы этого менеджера достаточно тривиальный:
При первом запросе на создание COM-объекта, запускается поток, который блокирует DLL с самим менеджером в памяти (то есть просит систему загрузить эту DLL еще раз)
Фоновый поток переодически опрашивает DllCanUnloadNow загруженных DLL c объектами и выгружает те, которые уже не используются
Когда в течении определенного времени менеджер бездействует (то есть не обслуживает DLL-и с объектами), фоновый поток вызывает FreeLibraryAndExitThread. Если фоновый поток — последний пользователь DLL с менеджером, то она выгружается.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[7]: Namespace extension, IShellFolder и проводник
Я дико извиняюсь, но может быть кто-нибудь поделится значением Attributes, при котором shellfolder будет открываться по левому клику в explorer tree view ? Спасибо
Re[8]: Namespace extension, IShellFolder и проводник
Здравствуйте, simply_ask, Вы писали:
_>Я дико извиняюсь, но может быть кто-нибудь поделится значением Attributes, при котором shellfolder будет открываться по левому клику в explorer tree view ? Спасибо
см. описание IShellFolder::GetAttributesOf и содержимое файла shlobj.h
То что тебя интересует определяется наличием флага SFGAO_HASSUBFOLDER
// IShellFolder::GetAttributesOf flags
// DESCRIPTION:
// SFGAO_CANLINK: If this bit is set on an item in the shell folder, a
// "Create Shortcut" menu item will be added to the File
// menu and context menus for the item. If the user selects
// that command, your IContextMenu::InvokeCommand() will be called
// with 'link'.
// That flag will also be used to determine if "Create Shortcut"
// should be added when the item in your folder is dragged to another
// folder.#define SFGAO_CANCOPY DROPEFFECT_COPY // Objects can be copied (0x1)#define SFGAO_CANMOVE DROPEFFECT_MOVE // Objects can be moved (0x2)#define SFGAO_CANLINK DROPEFFECT_LINK // Objects can be linked (0x4)#define SFGAO_CANRENAME 0x00000010L // Objects can be renamed#define SFGAO_CANDELETE 0x00000020L // Objects can be deleted#define SFGAO_HASPROPSHEET 0x00000040L // Objects have property sheets#define SFGAO_DROPTARGET 0x00000100L // Objects are drop target#define SFGAO_CAPABILITYMASK 0x00000177L
#define SFGAO_LINK 0x00010000L // Shortcut (link)#define SFGAO_SHARE 0x00020000L // shared#define SFGAO_READONLY 0x00040000L // read-only#define SFGAO_GHOSTED 0x00080000L // ghosted icon#define SFGAO_HIDDEN 0x00080000L // hidden object#define SFGAO_DISPLAYATTRMASK 0x000F0000L
#define SFGAO_FILESYSANCESTOR 0x10000000L // It contains file system folder#define SFGAO_FOLDER 0x20000000L // It's a folder.#define SFGAO_FILESYSTEM 0x40000000L // is a file system thing (file/folder/root)#define SFGAO_HASSUBFOLDER 0x80000000L // Expandable in the map pane#define SFGAO_CONTENTSMASK 0x80000000L
#define SFGAO_VALIDATE 0x01000000L // invalidate cached information#define SFGAO_REMOVABLE 0x02000000L // is this removeable media?#define SFGAO_COMPRESSED 0x04000000L // Object is compressed (use alt color)#define SFGAO_BROWSABLE 0x08000000L // is in-place browsable#define SFGAO_NONENUMERATED 0x00100000L // is a non-enumerated object#define SFGAO_NEWCONTENT 0x00200000L // should show bold in explorer tree#define SFGAO_CANMONIKER 0x00400000L // can create monikers for its objects
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[9]: Namespace extension, IShellFolder и проводник
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>см. описание IShellFolder::GetAttributesOf и содержимое файла shlobj.h
КД>То что тебя интересует определяется наличием флага SFGAO_HASSUBFOLDER
Еще раз извиняюсь, но я не программист, я администратор. Мне нужно "пальцем ткнуть" Я так понял, что тип значения "Attributes" DWORD ? Пробовал прописывать в HKCR\CLSID\{мой clsid}\ShellFolder\Attributes 0x80000000 — ничего не получилось Все также не открывается shell folder по левому клику в левом фрейме проводника (explorer tree view). Нюанс: мой shell folder — это линк на сетевую папку, подключаю его через HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace
Re[9]: Namespace extension, IShellFolder и проводник
Кстати, сетевая папка непричем. Сейчас попробовал тоже самое и с локальной. Все приведенные значения, кроме 0x20000000, не помещают shell folder в explorer tree view, но и с 0x20000000 тоже не удается левым кликом открыть фолдер
КД>
КД>// IShellFolder::GetAttributesOf flags
КД>// DESCRIPTION:
КД>// SFGAO_CANLINK: If this bit is set on an item in the shell folder, a
КД>// "Create Shortcut" menu item will be added to the File
КД>// menu and context menus for the item. If the user selects
КД>// that command, your IContextMenu::InvokeCommand() will be called
КД>// with 'link'.
КД>// That flag will also be used to determine if "Create Shortcut"
КД>// should be added when the item in your folder is dragged to another
КД>// folder.
КД>#define SFGAO_CANCOPY DROPEFFECT_COPY // Objects can be copied (0x1)
КД>#define SFGAO_CANMOVE DROPEFFECT_MOVE // Objects can be moved (0x2)
КД>#define SFGAO_CANLINK DROPEFFECT_LINK // Objects can be linked (0x4)
КД>#define SFGAO_CANRENAME 0x00000010L // Objects can be renamed
КД>#define SFGAO_CANDELETE 0x00000020L // Objects can be deleted
КД>#define SFGAO_HASPROPSHEET 0x00000040L // Objects have property sheets
КД>#define SFGAO_DROPTARGET 0x00000100L // Objects are drop target
КД>#define SFGAO_CAPABILITYMASK 0x00000177L
КД>#define SFGAO_LINK 0x00010000L // Shortcut (link)
КД>#define SFGAO_SHARE 0x00020000L // shared
КД>#define SFGAO_READONLY 0x00040000L // read-only
КД>#define SFGAO_GHOSTED 0x00080000L // ghosted icon
КД>#define SFGAO_HIDDEN 0x00080000L // hidden object
КД>#define SFGAO_DISPLAYATTRMASK 0x000F0000L
КД>#define SFGAO_FILESYSANCESTOR 0x10000000L // It contains file system folder
КД>#define SFGAO_FOLDER 0x20000000L // It's a folder.
КД>#define SFGAO_FILESYSTEM 0x40000000L // is a file system thing (file/folder/root)
КД>#define SFGAO_HASSUBFOLDER 0x80000000L // Expandable in the map pane
КД>#define SFGAO_CONTENTSMASK 0x80000000L
КД>#define SFGAO_VALIDATE 0x01000000L // invalidate cached information
КД>#define SFGAO_REMOVABLE 0x02000000L // is this removeable media?
КД>#define SFGAO_COMPRESSED 0x04000000L // Object is compressed (use alt color)
КД>#define SFGAO_BROWSABLE 0x08000000L // is in-place browsable
КД>#define SFGAO_NONENUMERATED 0x00100000L // is a non-enumerated object
КД>#define SFGAO_NEWCONTENT 0x00200000L // should show bold in explorer tree
КД>#define SFGAO_CANMONIKER 0x00400000L // can create monikers for its objects
КД>
Re[10]: Namespace extension, IShellFolder и проводник
Здравствуйте, simply_ask, Вы писали:
КД>>То что тебя интересует определяется наличием флага SFGAO_HASSUBFOLDER _>Еще раз извиняюсь, но я не программист, я администратор.
_>Я так понял, что тип значения "Attributes" DWORD
Попробуй скомбинировать с флагами SFGAO_FOLDER|SFGAO_FILESYSTEM
Второй флаг, насколько я помню, даёт возможность навигации по твоему дереву в диалогах открытия/записи файлов
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[10]: Namespace extension, IShellFolder и проводник
Здравствуйте, simply_ask, Вы писали:
_>Кстати, сетевая папка непричем. Сейчас попробовал тоже самое и с локальной. Все приведенные значения, кроме 0x20000000, не помещают shell folder в explorer tree view, но и с 0x20000000 тоже не удается левым кликом открыть фолдер
[вырезано]
Пожалуйста, избегайте лишнего цитирования
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[11]: Namespace extension, IShellFolder и проводник
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Попробуй скомбинировать с флагами SFGAO_FOLDER|SFGAO_FILESYSTEM
КД>Второй флаг, насколько я помню, даёт возможность навигации по твоему дереву в диалогах открытия/записи файлов
Скомбинировал все три Получилось 0xE0000000. После этого shell folder стал доступен из левого фрейма и у него появился "плюсик". Но все также нет возможности по левому клику открыть
PS: за overquoting извиляюсь, не со зла
Re[12]: Namespace extension, IShellFolder и проводник
Здравствуйте, simply_ask, Вы писали:
КД>>Попробуй скомбинировать с флагами SFGAO_FOLDER|SFGAO_FILESYSTEM
_>Скомбинировал все три Получилось 0xE0000000. После этого shell folder стал доступен из левого фрейма и у него появился "плюсик". Но все также нет возможности по левому клику открыть
Я чего-то не врубаюсь в смысл нет возможности по левому клику открыть — поясни доходчиво, плиз.
Ну попробуй еще добавить флаг SFGAO_BROWSABLE
-- Пользователи не приняли программу. Всех пришлось уничтожить. --