Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


Вызов стандартного диалога выбора каталога/файла (принтера/компьютера) 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, в виде плагина...

Последний раз редактировалось MKN, 03-09-2013 в 09:50.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:26, 03-09-2013 | #514