Вызов стандартного диалога выбора каталога/файла (принтера/компьютера) c помощью функции SHBrowseForFolder
Полезно при работе со стандартными страницами для обзора до или после установки и при помещении кнопки обзора на любой странице.
(Есть конечно Dialogs plug-in, но в нём нет некоторых моментов, доступных при оперирировании флагами функции )
Код:
OutFile "SHBrowseForFolder_test.exe"
Section
StrCpy $9 "Folder Dialog Title"
System::Store "s r9"
; создаём структуру обозревателя
System::Call '*(i $HWNDPARENT, i 0, t "", t r9, i 0x40|0x4000, i 0, i, i) i.r1'
System::Call 'shell32::SHBrowseForFolderA(i r1) i.r2'
System::Free $1
;получаем путь для выбранной папки/файла
System::Call 'shell32::SHGetPathFromIDListA(i $2, t "" r3)'
MessageBox MB_OK "Selected : $3"
;Функция SHGetMalloc извлекает указатель на интерфейс IMalloc оболочки.
;Расширение оболочки должно использовать этот интерфейс для выделения памяти,
;позднее освобождаемой оболочкой.
System::Call 'shell32::SHGetMalloc(*i . r4)'
; IMalloc->Free call
System::Call '$4->5(i r2)'
; IMalloc->Release
System::Call '$4->2()'
System::Store "p3 l"
SectionEnd
Код этот обычно находится в функции, здесь в секции, лишь как пример.
Флаги BROWSEINFO structure ( BIF_BROWSEINCLUDEFILES )
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Флагов много, вот некоторые :
; 0x0000040 - с кнопкой "Создать папку"
; 0x00000200 - без кнопки "Создать папку"
; 0x00004000 - обзор, включая файлы
; 0x00000010 - с EditBox_ом над деревом папок
флаг можно записывать короче : 0x40 и т.д. , а также назначать через !define BIF_BROWSEINCLUDEFILES
ps если кто владеет программированием - может доработать диалог, как здесь :
http://www.manhunter.ru/assembler/23...forfolder.html
Хорошо было бы приспособить этот тюнинг для NSIS, в виде плагина...