2013-05-15 27 views
1

我得到了這個腳本(作者:Red Wine),它顯示了一個用戶可以選擇安裝這些文件的可用驅動程序的下拉列表。我需要獲取用戶選擇的選項並將其寫在.txt文件中。我怎樣才能做到這一點? (例如:如果用戶選用C:\,恰到好處 「C:\」 那裏)NSIS - 我如何在.txt文件上寫入用戶選擇的選項

!define SIZE "100" ;add here total uncompressed data size in Mb of your application 
!define APPNAME "My Application" 
Name '${APPNAME}' 
OutFile 'test.exe' 
LicenseData '${NSISDIR}\License.txt' 
LicenseBkColor 0xFFFFFF 
ShowInstDetails show 
AllowRootDirInstall true 

!include WinMessages.nsh 
!include FileFunc.nsh 
!insertmacro GetDrives 
!insertmacro DriveSpace 

Page License 
Page Custom CustomCreate CustomLeave 
Page InstFiles 

Section "boo" 
     SetOutPath '$INSTDIR' 
SectionEnd 

Function CustomCreate 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Settings' 'NumFields' '6' 

     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Type' 'Label' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Left' '5' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Top' '5' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Right' '-6' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Bottom' '17' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 1' 'Text' \ 
     'Select Installation drive:' 

     StrCpy $R2 0 
     StrCpy $R0 '' 
     ${GetDrives} "HDD" GetDrivesCallBack 

     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Type' 'DropList' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Left' '30' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Top' '26' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Right' '-31' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Bottom' '100' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'Flags' 'Notify' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'State' '$R1' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 2' 'ListItems' '$R0' 

     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 3' 'Type' 'Label' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 3' 'Left' '5' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 3' 'Top' '109' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 3' 'Right' '59' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 3' 'Bottom' '119' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 3' 'Text' \ 
     'Space required:' 

     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 4' 'Type' 'Label' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 4' 'Left' '60' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 4' 'Top' '109' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 4' 'Right' '-5' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 4' 'Bottom' '119' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 4' 'Text' \ 
     '${SIZE} Mb' 

     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 5' 'Type' 'Label' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 5' 'Left' '5' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 5' 'Top' '120' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 5' 'Right' '59' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 5' 'Bottom' '130' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 5' 'Text' \ 
     'Space available:' 

     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Type' 'Label' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Left' '60' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Top' '120' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Right' '-5' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Bottom' '130' 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Text' \ 
     '$R3 Mb' 

     push $0 
     InstallOptions::Dialog '$PLUGINSDIR\custom.ini' 
     pop $0 
     pop $0 
FunctionEnd 

Function CustomLeave 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Settings' 'State' 
     StrCmp $0 '2' 0 next 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Field 2' 'State' 
     StrCpy $0 $0 3 
     ${DriveSpace} "$0" "/D=F /S=M" $R3 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Text' \ 
     '$R3 Mb' 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Field 6' 'HWND' 
     SendMessage $0 ${WM_SETTEXT} 0 'STR:$R3 Mb' 
     Abort 

    next: 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Field 2' 'State' 
     StrCpy '$INSTDIR' '$0' 
FunctionEnd 

Function GetDrivesCallBack 
     ${DriveSpace} "$9" "/D=F /S=M" $R4 
     IntCmp $R4 '${SIZE}' end end def 
     def: 
     StrCmp $R2 '0' 0 next 
     StrCpy $R3 '$R4' 
     StrCpy $R1 '$9${APPNAME}' 
     IntOp $R2 $R2 + 1 
     next: 
     StrCpy $R0 '$R0$9${APPNAME}|' 
     end: 
    Push $0 
FunctionEnd 

Function .onInit 
     InitPluginsDir 
     GetTempFileName $0 
     Rename $0 '$PLUGINSDIR\custom.ini' 
FunctionEnd 

回答

1

更改CustomLeave功能如下:

Function CustomLeave 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Settings' 'State' 
     StrCmp $0 '2' 0 next 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Field 2' 'State' 
     strcpy $R0 $0 
     StrCpy $0 $0 3 
     FileOpen $1 'Myfile.txt' w 
     FileWrite $1 $R0 
     FileClose $1 

     ${DriveSpace} "$0" "/D=F /S=M" $R3 
     WriteIniStr '$PLUGINSDIR\custom.ini' 'Field 6' 'Text' \ 
     '$R3 Mb' 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Field 6' 'HWND' 
     SendMessage $0 ${WM_SETTEXT} 0 'STR:$R3 Mb' 

     Abort 

    next: 
     ReadIniStr $0 '$PLUGINSDIR\custom.ini' 'Field 2' 'State' 
     StrCpy '$INSTDIR' '$0' 
FunctionEnd 
+0

就是這樣,它的工作!非常感謝你! – Mohamad

+0

我的快樂。您可以將其標記爲接受的答案(+1)。 – foobar

+0

已經做到了。我不能標記+1,因爲我沒有足夠的聲望。 – Mohamad

相關問題