Как получить ссылку на библиотеку Win7 из диалогового окна общих элементов управления? - PullRequest
3 голосов
/ 08 апреля 2011

Я внедряю OFNHookProc для инструментов диалогового окна общих элементов управления GetOpenFileName() в Windows 7. Мои инструменты написаны на C ++. Все работает нормально, пока пользователь не выберет библиотеку (например, документы или рисунки). Когда это происходит, я получаю уведомление CDN_FOLDERCHANGE, как и ожидалось, но когда я отправляю диалоговое окно сообщение CDM_GETFOLDERPATH для извлечения новой выбранной папки, я получаю сообщение об ошибке, возвращающее -1, а CommDlgExtendedError возвращает 0. В в некоторых случаях это имеет смысл, поскольку это не папка, но, похоже, ни одно из других сообщений не работает (например, CDM_GETFOLDERIDLIST или CDM_GETFILEPATH).

Итак, как вы узнаете из OFNHookProc, что текущий выбранный элемент или папка - это библиотека? Как только вы скажете, что это библиотека, как вы получите интерфейс IShellItem или IShellLibrary, чтобы вы могли выяснить, какие папки файловой системы составляют библиотеку?

(код, который создает диалоговое окно GetOpenFileName, является устаревшим кодом, поэтому я не могу заменить его рекомендованным Windows-7 интерфейсом IFileOpenDialog, который поддерживает библиотеки в том же духе).

...