NSIS用户输入页面

时间:2017-10-09 10:22:55

标签: input nsis blowfish

所以我有一个使用下面代码的用户输入页面,文本正在加密

如何将其写入文件

现在,我可以将其从文件读入变量以解密它。

然后我想在消息框中在屏幕上显示解密的消息,但是\ n \ n需要在显示之前转换为$ \ n,以便正确显示。

示例I输入:(注意Control Enter为您提供下一行)

Hello World
It's a great day

解密后显示:

Hello World\n\nIt's a great day

ini文件

[Settings]
NumFields=2
Title="Activation Code"
State=0

[Field 1]
Type=Text
Left=8
Right=-10
Top=12
Bottom=-15
flags=MULTILINE|VSCROLL

[Field 2]
Type=GroupBox
Left=0
Right=-1
Top=0
Bottom=-10
Text="Please enter in your Activation Code"

代码:

!include MUI.nsh
!include LogicLib.nsh

Page custom SetCustom ValidateCustom

Section Dummy
SectionEnd


Function SetCustom
   ReserveFile ".\test.ini"
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT ".\test.ini"
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY ".\test.ini"
 FunctionEnd

Function ValidateCustom
  !insertmacro MUI_INSTALLOPTIONS_READ $R1 ".\test.ini" "Field 1" "State"
  ${If} $R1 == ""
    Abort # Go back to page.
  ${Else}
    Var /GLOBAL textencryt

    blowfish::encrypt $R1 "1234password"
    StrCpy $textencryt $8   
    MessageBox MB_OK "Encrypted string is:$\n $textencryt"

    blowfish::decrypt $8 "1234password"
    StrCpy $textencryt $8   
    MessageBox MB_OK "Decrypted string is:$\n $textencryt"
  ${EndIf}

FunctionEnd

新代码:(有问题)

!insertmacro MUI_INSTALLOPTIONS_READ $R1 "test.ini" "Field 1" "State"
  ${If} $R1 == ""
    Abort # Go back to page.
  ${Else}
    Var /GLOBAL textencryt

    blowfish::decrypt $R1 "1234password"
    StrCpy $textencryt $8
    MessageBox MB_OK "Decrypted string is:$\n $textencryt"

    !insertmacro MUI_INSTALLOPTIONS_READ $8 "test.ini" "Field 1" "HWND"
    System::Call 'USER32::SendMessage(i $8, i ${WM_GETTEXT}, i ${NSIS_MAX_STRLEN}, t.R1)'
    MessageBox MB_OK $R1

原始邮件是 例: 测试用户 码 12个月 加密后我尝试解密并查看结果使用 “MessageBox MB_OK”解密的字符串是:$ \ n $ textencryt“返回解密的消息,其中包含\ n \ n。(例如:test user \ n \ ncode \ n \ 12个月)它应该像: 例: 测试用户 码 12个月

1 个答案:

答案 0 :(得分:0)

您有两种选择。

您可以使用INSTALLOPTIONS_READ_CONVERT辅助函数:

...

!insertmacro INSTALLOPTIONS_FUNCTION_READ_CONVERT

Function ValidateCustom
  !insertmacro INSTALLOPTIONS_READ_CONVERT $R1 "test.ini" "Field 1" "State"
  MessageBox MB_OK $R1
FunctionEnd

或者您可以直接从控件中阅读文本:

...

!include WinMessages.nsh

Function ValidateCustom
    !insertmacro MUI_INSTALLOPTIONS_READ $R1 "test.ini" "Field 1" "HWND"
    System::Call 'USER32::SendMessage(i $R1, i ${WM_GETTEXT}, i ${NSIS_MAX_STRLEN}, t.R1)'
    MessageBox MB_OK $R1
FunctionEnd