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