2017-10-09 7 views
0

だから私は以下のコードを使用して、ユーザーの入力ページを持っているとテキストがNSISユーザー入力ページ

どのように私は今、私はにファイルからこれを読むことができます

thaeファイルにこれを書くことができますが、暗号化されていますそれを復号化する変数。

メッセージボックスに解読されたメッセージを表示したいのですが、正しく表示されるように\ n \ nを\ n \ nに変換してから表示する必要があります。私は中に入る

例:それは解読さ

Hello World 
It's a great day 

はショーである(コントロールは、入力しますが、あなたに次の行を与える):INI

Hello World\n\nIt's a great day 

ファイル

[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ヶ月 暗号化されており、私がしようとすると解読された後と 「メッセージボックスMB_OKを使用して結果を見て"解読された文字列は:$ \ n $ textencryt"は\ n \ nで解読されたメッセージを返します。 (例:テストユーザー\ nは\ NCODE \ nは12ヶ月\)それは次のように出てくるはずです。 例: テストユーザー コード 12ヶ月

+0

使用しないでください\相対パス。 – Anders

+0

その後、何が最良の方法ですか? –

+0

マクロの中には、すでに$ pluginsdirにあると仮定しているものがあります。 ReserveFileの場合は問題ありませんが、 "test.ini"は "。\ test.ini"と同じです。 – Anders

答えて

0

あなたは2つのオプションがあります。

あなたは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 
+0

あなたが言及した第2の方法は、私にとって最も効果的でした。今私はどのように文字列を取得し、ファイルに保存し、ファイルを取るかは、文字列に読み込まれます。 例:string $ 8 "。\ license.dat"ファイルに保存します ファイル "。\ license.dat"を読み込み、文字列にドロップします。 必要に応じて、ファイルを常に新しい情報で上書きします。それは常に1行のテキストにすぎません。 –

+0

'FileOpen "c:\ whatever \ file.exe" w "、次にFileWrite。詳細については、ドキュメントを参照してください... – Anders

+0

それは私が必要なものです。正しい方向を指しています。 :) –

関連する問題