Installation 无法理解${NSD_GetState}$复选框为什么不起作用

Installation 无法理解${NSD_GetState}$复选框为什么不起作用,installation,nsis,Installation,Nsis,有人能向我解释一下${NSD_GetState}$复选框为什么不起作用吗? 我花了大约4个小时试图找出问题所在。我尝试了不同的变体,但在这个脚本中它们不起作用 实际上,这是我第一次尝试制作nsis安装程序,所以我甚至不知道应该在哪里查找错误,或者我只是不理解这种语言的逻辑 来自俄罗斯的爱:) 对不起,我的英语不好 !define NAME "Simple LiveUSB installer" !define FILENAME "USB" !define VERSION "v0.1" Name

有人能向我解释一下${NSD_GetState}$复选框为什么不起作用吗? 我花了大约4个小时试图找出问题所在。我尝试了不同的变体,但在这个脚本中它们不起作用

实际上,这是我第一次尝试制作nsis安装程序,所以我甚至不知道应该在哪里查找错误,或者我只是不理解这种语言的逻辑

来自俄罗斯的爱:) 对不起,我的英语不好

!define NAME "Simple LiveUSB installer"
!define FILENAME "USB"
!define VERSION "v0.1"

Name "${NAME} ${VERSION}"
OutFile "${FILENAME}.exe"

SetCompressor LZMA
ShowInstDetails hide
XPStyle on

!include MUI2.nsh
!include FileFunc.nsh
!include nsDialogs.nsh
;!include LogicLib.nsh

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\HEADER2.bmp"
!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\media-floppy.ico"


Page custom drivePage
Page custom Var123

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
LangString DrivePage_Title ${LANG_RUSSIAN} "TEXT"
LangString DrivePage_Title2 ${LANG_RUSSIAN} "TEXT"
LangString DrivePage_Text ${LANG_RUSSIAN} "TEXT"
LangString DrivePage_Text2 ${LANG_RUSSIAN} "Format"
LangString DrivePage_Input ${LANG_RUSSIAN} "Choose"



Var Label
Var Label2
Var Checkbox
;Var Checkbox_State
Var DestDriveHW
Var DestDrive

# Functions #######################################

Function drivePage

    !insertmacro MUI_HEADER_TEXT $(DrivePage_Title) $(DrivePage_Title2)

    nsDialogs::Create 1018

    ${If} $DestDrive == ""
        GetDlgItem $6 $HWNDPARENT 1
        EnableWindow $6 0
    ${EndIf}

    ${NSD_CreateLabel} 0 0 100% 160 $(DrivePage_Text)
    Pop $Label

    ${NSD_CreateLabel} 10 182 100% 15 $(DrivePage_Input)
    Pop $Label2

    ${NSD_CreateDroplist} 10 200 13% 20 ""
    Pop $DestDriveHw

    ${NSD_OnChange} $DestDriveHw db_select.onchange
    ${GetDrives} "FDD" driveListFiller

    ${If} $DestDrive != ""
        ${NSD_CB_SelectString} $DestDriveHw $DestDrive
    ${EndIf}

    ${NSD_CreateCheckbox} 80 203 100% 10u $(DrivePage_Text2)
    Pop $Checkbox

    ${If} $Checkbox_State == ${BST_CHECKED}
        ${NSD_Check} $Checkbox_State
    ${EndIf}

    nsDialogs::Show
FunctionEnd


Function db_select.onchange
    Pop $DestDriveHw

    ${NSD_GetText} $DestDriveHw $0
    StrCpy $DestDrive "$0"
    GetDlgItem $6 $HWNDPARENT 1
    EnableWindow $6 1
FunctionEnd

Function driveListFiller
    SendMessage $DestDriveHw ${CB_ADDSTRING} 0 "STR:$9"
    Push 1
FunctionEnd

Function Var123
Pop $Checkbox
MessageBox mb_ok "FIN Checkbox_State=$Checkbox_State Checkbox=$Checkbox"
${NSD_GetState} $Checkbox $0
${If} $0 <> 0
    MessageBox mb_ok "Custom checkbox was checked... N=$0"
${EndIf}
${If} $0 == 0
    MessageBox mb_ok "Custom checkbox ZERO... N=$0"
${EndIf}

Functionend

# Section #######################################

Section "" main


InitPluginsDir

File /oname=$PLUGINSDIR\syslinux.cfg  "${NSISDIR}\plugins\syslinux.cfg"
File /oname=$PLUGINSDIR\syslinux.exe  "${NSISDIR}\plugins\syslinux.exe"

File /oname=$PLUGINSDIR\nsExec.dll  "${NSISDIR}\plugins\nsExec.dll"


StrCpy $R0 $DestDrive -1


;ExpandEnvStrings $0 %COMSPEC%
;nsExec::Exec '"$0" /c echo. | format $R0 /q /x /v:LiveUSB /fs:fat32'



nsExec::Exec '$PLUGINSDIR\syslinux.exe -maf -d boot\syslinux $R0' 


;SendMessage $Checkbox ${BM_GETSTATE} 0 0 $0
;${If} $0 != 0

;  MessageBox MB_OK checked!

;${EndIf}

;Pop $Checkbox
;MessageBox mb_ok "FIN Checkbox_State=$Checkbox_State Checkbox=$Checkbox"
;${NSD_GetState} $Checkbox $0
;${If} $0 <> 0
;    MessageBox mb_ok "Custom checkbox was checked... N=$0"
;${EndIf}


CopyFiles $PLUGINSDIR\syslinux.cfg  "$R0\syslinux.cfg"


SectionEnd
!定义名称“Simple LiveUSB安装程序”
!定义文件名“USB”
!定义版本“v0.1”
名称“${Name}${VERSION}”
输出文件“${FILENAME}.exe”
SETZMA压缩机
ShowInstDetails隐藏
XPStyle on
!包括MUI2.nsh
!包括FileFunc.nsh
!包括nsDialogs.nsh
;!包括LogicLib.nsh
!定义MUI_头图像
!定义MUI_HEADERIMAGE_位图“${NSISDIR}\Contrib\Graphics\Header\HEADER2.bmp”
!定义MUI_HEADERIMAGE_BITMAP_NOSTRETCH
!定义MUI_图标“${NSISDIR}\Contrib\Graphics\Icons\media floppy.ico”
页面自定义驱动器页面
页面自定义Var123
!插入宏MUI_页面文件
!插入语“俄语”
LangString DrivePage_Title${LANG_俄语}“文本”
LangString DrivePage_Title2${LANG_俄语}“文本”
LangString DrivePage_Text${LANG_俄语}“Text”
LangString DrivePage_Text2${LANG_俄语}“格式”
LangString驱动程序页面输入${LANG\u俄语}“选择”
变量标签
Label2变种
Var复选框
;Var\u状态
Var DestDriveHW
无功驱动
#功能#######################################
功能驱动页面
!insertmacro MUI_页眉_文本$(驱动页面标题)$(驱动页面标题2)
nsDialogs::创建1018
${If}$DestDrive==“”
GetDlgItem$6$HWNDPARENT 1
启用窗口$6 0
${EndIf}
${NSD_CreateLabel}0 100%160$(DrivePage_文本)
Pop$标签
${NSD_CreateLabel}10 182 100%15$(驱动页面_输入)
Pop$Label2
${NSD_CreateDroplist}10 200 13%20“
Pop$DestDriveHw
${NSD_OnChange}$DestDriveHw db_select.OnChange
${GetDrives}“FDD”驱动器列表填充器
${If}$DestDrive!=""
${NSD_CB_SelectString}$DestDriveHw$DestDrive
${EndIf}
${NSD_CreateCheckbox}80 203 100%10u$(DrivePage_Text2)
弹出$Checkbox
${If}$Checkbox\u State==${BST\u CHECKED}
${NSD\u Check}$Checkbox\u状态
${EndIf}
nsDialogs::Show
功能端
函数db_select.onchange
Pop$DestDriveHw
${NSD_GetText}$DestDriveHw$0
StrCpy$DestDrive“$0”
GetDlgItem$6$HWNDPARENT 1
启用窗口$6 1
功能端
函数驱动列表填充程序
SendMessage$DestDriveHw${CB_ADDSTRING}0“STR:$9”
推1
功能端
函数Var123
弹出$Checkbox
MessageBox mb\u ok“FIN Checkbox\u State=$Checkbox\u State Checkbox=$Checkbox”
${NSD_GetState}$复选框$0
${If}$0
MessageBox mb_ok“已选中自定义复选框…N=$0”
${EndIf}
${If}$0==0
MessageBox mb_ok“自定义复选框零…N=$0”
${EndIf}
功能端
#部分#######################################
“主要”部分
InitPluginsDir
File/oname=$PLUGINSDIR\syslinux.cfg“${NSISDIR}\plugins\syslinux.cfg”
文件/oname=$PLUGINSDIR\syslinux.exe“${NSISDIR}\plugins\syslinux.exe”
文件/oname=$PLUGINSDIR\nsExec.dll“${NSISDIR}\plugins\nsExec.dll”
StrCpy$R0$DestDrive-1
;ExpandEnvStrings$0%COMSPEC%
;nsExec::Exec'$0”/c echo.|格式$R0/q/x/v:LiveUSB/fs:fat32'
nsExec::Exec'$PLUGINSDIR\syslinux.exe-maf-d boot\syslinux$R0'
;SendMessage$复选框${BM_GETSTATE}0$0
;${If}$0!=0
;  MessageBox MB_OK已选中!
;${EndIf}
;弹出$Checkbox
;MessageBox mb\u ok“FIN Checkbox\u State=$Checkbox\u State Checkbox=$Checkbox”
;${NSD\u GetState}$Checkbox$0
;${If}$0
;    MessageBox mb_ok“已选中自定义复选框…N=$0”
;${EndIf}
CopyFiles$PLUGINSDIR\syslinux.cfg“$R0\syslinux.cfg”
分段结束

在您的示例中有太多不相关的代码,以至于有点难以理解您真正想要做什么

如果要检索另一页上复选框的状态,则必须保存该状态,因为离开该页时复选框控件将被销毁

!include nsDialogs.nsh

Var hwndCheckbox
Var CheckboxState
Page Custom myPageWithCombobox myPageWithComboboxLeaveCallback
Page Custom myPageWithComboState



Function .onInit
StrCpy $CheckboxState ${BST_CHECKED} ; Set the initial state. This is optional but useful if you use $CheckboxState in a section when the installer is silent
FunctionEnd

Function myPageWithCombobox
nsDialogs::Create 1018
Pop $0

${NSD_CreateCheckbox} 80 203 100% 10u $(DrivePage_Text2)
Pop $hwndCheckbox
${NSD_SetState} $hwndCheckbox $CheckboxState ; Reuse the existing state so it is correct when the back button is used

nsDialogs::Show
FunctionEnd

Function myPageWithComboboxLeaveCallback
${NSD_GetState} $hwndCheckbox $CheckboxState ; Save the state so we can retrieve it on the next page
FunctionEnd



Function myPageWithComboState
nsDialogs::Create 1018
Pop $0

${NSD_CreateLabel} 0 0 100% 160 CheckboxState=$CheckboxState
Pop $0

nsDialogs::Show
FunctionEnd

请不要污损你的帖子。