Я создал расширение пространства имен, основанное на рабочем столе. Основная цель расширения - предоставить виртуальный список файлов ZIP, который представляет собой список настраиваемых каталогов. Когда пользователь щелкает один из этих элементов, содержимое связанного каталога архивируется на место, а полученный ZIP-файл сохраняется в папке кэша.
Все это хорошо работает, если не считать незначительной проблемы. Если мы перейдем в проводник Windows, откройте расширение и дважды щелкните элемент, открытый файл - это файл из кеша. [ПРАВИЛЬНЫЙ]
С другой стороны, если мы открываем его с помощью диалогового окна «Открыть», то открывается файл из каталога временных файлов Интернета. [НЕПРАВИЛЬНО]
Что мне нужно изменить в диалоговом окне открытия (например, при использовании notepad.exe), чтобы открыть файл из папки кеша, а не из временных файлов Интернета. Я всегда пытался отправить квалифицированное имя файла в IShellFolder :: GetDisplayNameOf, но безуспешно.





Похоже, вы не переходите в правильный исходный каталог (в параметре lpstrInitialDir или lpstrFile вашей структуры OPENFILENAME).
Введите каталог кэша в lpstrInitialDir и оставьте поле lpstrFile пустым, и он должен работать.
Проблема была устранена путем маскирования SFGAO_FILESYSTEM в атрибутах, возвращаемых реализацией интерфейсного метода IShellFolder :: GetAttributesOf.
Я не могу открыть файл напрямую. Об этом позаботится модель программирования Shell с именем, указанным в IShellFolder :: GetDisplayNameOf.