Попался такой код :
Комбобокс-список выбора диска
Код:
!include "MUI2.nsh"
!include "WinCore.nsh"
!define __NSD_ComboBoxEx_CLASS ComboBoxEx32
!define __NSD_ComboBoxEx_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${CBS_DROPDOWN}
!define __NSD_ComboBoxEx_EXSTYLE 0
!define __NSD_DropListEx_CLASS ComboBoxEx32
!define __NSD_DropListEx_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${CBS_DROPDOWNLIST}
!define __NSD_DropListEx_EXSTYLE 0
!insertmacro __NSD_DefineControl ComboBoxEx
!insertmacro __NSD_DefineControl DropListEx
!define CBEM_INSERTITEM 0x00000401
!define CBEM_SETIMAGELIST 0x00000402
!define CBEM_GETIMAGELIST 0x00000403
!define CBEM_GETITEM 0x00000404
!define CBEM_SETITEM 0x00000405
!define CBEM_DELETEITEM ${CB_DELETESTRING}
!define CBEM_GETCOMBOCONTROL 0x00000406
!define CBEM_GETEDITCONTROL 0x00000407
!define CBEM_GETEXTENDEDSTYLE 0x00000409
!define CBEM_HASEDITCHANGED 0x0000040A
!define CBEM_SETEXTENDEDSTYLE 0x0000040E
!define CBEIF_TEXT 0x00000001
!define CBEIF_IMAGE 0x00000002
!define CBEIF_SELECTEDIMAGE 0x00000004
!define CBEIF_OVERLAY 0x00000008
!define CBEIF_INDENT 0x00000010
!define CBEIF_LPARAM 0x00000020
!define CBEIF_DI_SETITEM 0x10000000
!define SHGFI_SMALLICON 0x00000001
!define SHGFI_ICON 0x00000100
!define SHGFI_DISPLAYNAME 0x00000200
!define SHGFI_TYPENAME 0x00000400
!define SHGFI_SYSICONINDEX 0x00004000
Name "ComboBoxEx"
OutFile ComboBoxEx.exe
InstallDir $TEMP
Page custom CreatePage
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Function CreatePage
!insertmacro MUI_HEADER_TEXT "ComboBoxEx control" "ComboBoxEx control created using nsDialogs plugin"
nsDialogs::Create 1018
Pop $0
StrCmp $0 error 0 +2
Abort
${NSD_CreateLabel} 0u 0u 300u 8u "Выбор диска"
Pop $0
${NSD_CreateDropListEx} 0u 12u 300u 140u "DropListEx"
Pop $1
SendMessage $1 ${CBEM_GETCOMBOCONTROL} 0 0 $0
System::Alloc 352
System::Call `shell32::SHGetFileInfo(in,in,isR1,i352,i${SHGFI_SMALLICON}|${SHGFI_SYSICONINDEX})i.R2`
SendMessage $1 ${CBEM_SETIMAGELIST} 0 $R2
System::Alloc 104
System::Call `kernel32::GetLogicalDriveStrings(i104,isR0)`
.while:
System::Call `kernel32::lstrlen(iR0)i.R3`
StrCmp $R3 0 .endwhile
System::Call `kernel32::GetDriveType(iR0)i.R4`
StrCmp $R4 3 0 .endif
SendMessage $0 ${CB_GETCOUNT} 0 0 $R6
System::Call `shell32::SHGetFileInfo(iR0,i0,iR1,i352,i${SHGFI_ICON}|${SHGFI_DISPLAYNAME}|${SHGFI_TYPENAME})`
System::Call `*$R1(i,i.R5,i,&t${MAX_PATH}.R4)`
System::Call `*(i${CBEIF_TEXT}|${CBEIF_IMAGE}|${CBEIF_SELECTEDIMAGE},iR6,tR4,i${NSIS_MAX_STRLEN},iR5,iR5,i,i,i)i.R7`
SendMessage $1 ${CBEM_INSERTITEM} 0 $R7
System::Free $R7
.endif:
IntOp $R0 $R0 + $R3
IntOp $R0 $R0 + 1
Goto .while
.endwhile:
SendMessage $0 ${CB_SETCURSEL} 0 0
System::Free $R1
System::Free $R0
nsDialogs::Show
FunctionEnd
Section
SectionEnd