То, что Крис или Мордехай пишут на №1, в любом случае не по делу. Вопрос не в объектах в пространстве имен оболочки, а в объектах, имеющих интерфейс IShellFolder
. Наличие интерфейса IShellFolder
само по себе не означает присутствия в пространстве имен оболочки. Исходный вопрос неверно сформулирован, поскольку предполагает, что объект с IShellFolder
интерфейсом должен иметь «свой собственный PIDL».
Я думаю, лучшее, что вы можете сделать, это то, что предлагает Мордехай:
- посмотрите, есть ли у объекта
IPersistFolder2
интерфейс
Цель этого интерфейса - исправить объект в пространстве имен оболочки, что, в свою очередь, делает папку устойчивой. Вместо того, чтобы делать выводы из отсутствия опубликованной документации, посмотрите, что Microsoft на самом деле говорит об интерфейсах IPersistFolder
и IPersistFolder2
и методах Initialize и GetCurFolder. В первую очередь:
вам необходимо реализовать этот интерфейс, чтобы можно было получить ITEMIDLIST объекта папки Shell.
Что касается №2, я боюсь, что Крис определенно не прав. IShellFolder
, безусловно, можно получить без PIDL. Панель управления, которую Крис представил для №1, представляет собой готовый контрпример для №2. Просто скачайте CLSID_ControlPanel
и IID_IShellFolder
в CoCreateInstance. Вы получаете идеально подходящий экземпляр Панели управления, даже не "зная PIDL".
В SHELL32 реализовано несколько других создаваемых папок оболочки, и любая DLL может настраивать любое количество других.
person
Geoff Chappell
schedule
14.11.2010