2017-10-09 104 views
0

所以我用下面的代碼的用戶輸入網頁和文本被加密NSIS用戶輸入頁面

我怎麼可以這樣寫一個文件

thae現在我可以讀這從一個文件分成一個變量來解密它。

然後,我想在屏幕上的消息框中顯示解密的消息,但是\ n \ n需要在顯示前轉換爲$ \ n,以便正確顯示。

例子我在進入:(注意控制輸入給你下一行)

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。 (例如:測試用戶\ n \ N-代碼\ n \12個月)應該出來,如: 例子: 測試用戶 代碼 12個月

+0

不要使用\相對路徑。 – Anders

+0

那麼最好的方法是什麼? –

+0

某些宏已假定文件位於$ pluginsdir中。對於ReserveFile,這很好,但「test.ini」與案例中的「。\ test.ini」相同。 – Anders

回答

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 
+0

你提到的第二種方法對我最有效。現在我該如何取出一個字符串並將其保存到文件中,然後如何將文件讀取到字符串中。 示例:字符串$ 8我想保存到文件「。\ license.dat」 然後讀取文件「。\ license.dat」並將信息放入字符串中。 如果需要,我會一直用新信息覆蓋文件。它總是隻有一行文字。 –

+0

'FileOpen'c:\ whatever \ file.exe「w」然後FileWrite。閱讀文檔以獲取更多詳細信息... – Anders

+0

這就是我需要的。指向正確的方向。 :) –

相關問題