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

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

Ветеран


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

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


Вызов диалогового окна выбора файлов

Пример для '*.nsi;*.nsh'

Код: Выделить весь код
Caption "Диалоговоое окно выбора файлов"
OutFile "OpenFile_Test.exe"
SilentInstall silent

!define OFN_READONLY                 0x00000001
!define OFN_OVERWRITEPROMPT          0x00000002
!define OFN_HIDEREADONLY             0x00000004
!define OFN_NOCHANGEDIR              0x00000008
!define OFN_SHOWHELP                 0x00000010
!define OFN_ENABLEHOOK               0x00000020
!define OFN_ENABLETEMPLATE           0x00000040
!define OFN_ENABLETEMPLATEHANDLE     0x00000080
!define OFN_NOVALIDATE               0x00000100
!define OFN_ALLOWMULTISELECT         0x00000200
!define OFN_EXTENSIONDIFFERENT       0x00000400
!define OFN_PATHMUSTEXIST            0x00000800
!define OFN_FILEMUSTEXIST            0x00001000
!define OFN_CREATEPROMPT             0x00002000
!define OFN_SHAREAWARE               0x00004000
!define OFN_NOREADONLYRETURN         0x00008000
!define OFN_NOTESTFILECREATE         0x00010000
!define OFN_NONETWORKBUTTON          0x00020000
!define OFN_NOLONGNAMES              0x00040000
#if(WINVER >= 0x0400)
!define OFN_EXPLORER                 0x00080000     ; new look commdlg
!define OFN_NODEREFERENCELINKS       0x00100000
!define OFN_LONGNAMES                0x00200000
!define OFN_ENABLEINCLUDENOTIFY      0x00400000
!define OFN_ENABLESIZING             0x00800000
#endif /* WINVER >= 0x0400 */
#if (_WIN32_WINNT >= 0x0500)
!define OFN_DONTADDTORECENT          0x02000000
!define OFN_FORCESHOWHIDDEN          0x10000000
#endif // (_WIN32_WINNT >= 0x0500)

!define OPENFILENAME "(i,i,i,i,i,i,i,i,i,i,i,t,t,i,i,i,t,i,i,t,*v,i,i) i"

Section
Push `${OFN_ALLOWMULTISELECT}|${OFN_EXPLORER}`     ;Flags
Push `Откройте файл`    ;lpstrTitle
System::Call "*(&t1024) i .r1"      ;lpstrFile
System::Call "*(&t25 'NSIS файл (*.nsi, *.nsh)', &t12 '*.nsi;*.nsh', &t9 'Все файлы', &t5 '*.*') i .r2"  ;lpstrFilter
System::Call "Kernel32::GetModuleHandle(i) i.s"    ;hInstance
Push $HWNDPARENT   ;hwndOwner
System::Call "*${OPENFILENAME}(76,s,s,r2,,,0,r1,1024,,,,s,s,_) i.r0"
System::Call "Comdlg32::GetOpenFileName(i r0) i.r3"
StrCmp $3 0 0 +3
MessageBox MB_ICONINFORMATION|MB_OK "    Вы не выбрали файл !"
Goto done
System::Call "*$1(&t1024 .r3)"
System::Call "*$0${OPENFILENAME}(,,,,,,,,,,,,,,.r4,_)"
IntOp $4 $4 - 1
StrLen $5 $3
StrCmp $4 $5 +3
MessageBox MB_ICONINFORMATION|MB_OK "Вы выбрали файл: $3"
Goto done
MessageBox MB_ICONINFORMATION|MB_OK "Вы выбрали в каталоге $3 , следующие файлы :"
StrCpy $5 $1
loop:
StrLen $4 $3
IntOp $5 $5 + $4
IntOp $5 $5 + 1
System::Call "*$5(&t1024 .r3)"
StrCmp $3 "" done
MessageBox MB_ICONINFORMATION|MB_OK "$3"    ;Цикл для имен выбранных файлов
Goto loop
done:
System::Free $0
System::Free $1
System::Free $2
SectionEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:12, 06-12-2013 | #826