Nsis ${NSD_GetText}始终返回空字符串

Nsis ${NSD_GetText}始终返回空字符串,nsis,Nsis,根据,我应该能够使用如下代码获取文本控件的文本: ${NSD_GetText} $TextBox $0 MessageBox MB_OK "You typed:$\n$\n$0" 我总是从这个电话中得到空字符串。在下面的代码中,文本框显示“正确”,但详细信息始终显示内容:;如果我对${NSD_GetText}的调用进行注释,我会得到内容:错误 !include nsDialogs.nsh !include LogicLib.nsh Var Dialog Var TextBox Page c

根据,我应该能够使用如下代码获取文本控件的文本:

${NSD_GetText} $TextBox $0
MessageBox MB_OK "You typed:$\n$\n$0"
我总是从这个电话中得到空字符串。在下面的代码中,文本框显示“正确”,但详细信息始终显示
内容:
;如果我对
${NSD_GetText}
的调用进行注释,我会得到
内容:错误

!include nsDialogs.nsh
!include LogicLib.nsh

Var Dialog
Var TextBox

Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles

Function nsDialogsPage
    StrCpy $0 "wrong"

    nsDialogs::Create 1018
    Pop $Dialog

    ${If} $Dialog == error
        Abort
    ${EndIf}

    ${NSD_CreateText} 0 12u 93% 12u "correct"
    Pop $TextBox

    nsDialogs::Show
FunctionEnd

Function nsDialogsPageLeave
FunctionEnd

Section
    ${NSD_GetText} $TextBox $0

    DetailPrint "Contents: $0"
SectionEnd
所以我想,当我试图打印控件的内容时,该控件可能不存在,并尝试在控件中键入文本时更新文本;那没用。NSIS以这种方式被破坏是不可信的,所以我做错了什么?

!include nsDialogs.nsh
!include LogicLib.nsh

Var Dialog
Var TextBox
Var Text

Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles

Function nsDialogsPage
    StrCpy $0 "wrong"

    nsDialogs::Create 1018
    Pop $Dialog

    ${If} $Dialog == error
        Abort
    ${EndIf}

    ${NSD_CreateText} 0 12u 93% 12u "correct"
    Pop $TextBox
    ${NSD_OnChange} $TextBox UpdateText

    nsDialogs::Show
FunctionEnd

Function nsDialogsPageLeave
FunctionEnd

Function UpdateText
    ${NSD_GetText} $TextBox $Text
FunctionEnd

Section
    DetailPrint "Contents: $Text"
SectionEnd

您是正确的,该控件不存在于节中,因此您必须在自定义页面上获取内容

如果用户更改文本,您的第二个示例应该可以正常工作,但如果用户不更改文本,则不能正常工作,因为更改事件不会触发

您通常只需阅读页面离开回调中的内容:

Var Dialog
Var TextBox
Var Text

!include LogicLib.nsh
!include nsDialogs.nsh
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles

Function nsDialogsPage
    nsDialogs::Create 1018
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}

    ${NSD_CreateText} 0 12u 93% 12u "correct"
    Pop $TextBox

    nsDialogs::Show
FunctionEnd

Function nsDialogsPageLeave
${NSD_GetText} $TextBox $Text
FunctionEnd


Section
    DetailPrint "Contents: $Text"
SectionEnd

您是正确的,该控件不存在于节中,因此您必须在自定义页面上获取内容

如果用户更改文本,您的第二个示例应该可以正常工作,但如果用户不更改文本,则不能正常工作,因为更改事件不会触发

您通常只需阅读页面离开回调中的内容:

Var Dialog
Var TextBox
Var Text

!include LogicLib.nsh
!include nsDialogs.nsh
Page custom nsDialogsPage nsDialogsPageLeave
Page instfiles

Function nsDialogsPage
    nsDialogs::Create 1018
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}

    ${NSD_CreateText} 0 12u 93% 12u "correct"
    Pop $TextBox

    nsDialogs::Show
FunctionEnd

Function nsDialogsPageLeave
${NSD_GetText} $TextBox $Text
FunctionEnd


Section
    DetailPrint "Contents: $Text"
SectionEnd

该死,我忘了完成那个测试。现在我还有两个理由觉得自己很傻。谢谢你的帮助。该死的,我忘了完成那个测试。现在我还有两个理由觉得自己很傻。谢谢你的帮助。