NSIS.Создайте форму для заполнения, чтобы записать вставленные данные в текстовый файл - PullRequest
0 голосов
/ 17 сентября 2018

Только что начал использовать NSIS для моего первого установщика. Нашел все, что мне нужно, кроме одной вещи. Я нашел, как написать и создать текстовый файл, но не смог найти какую-либо информацию о том, возможно ли или нет разрешить пользователю вводить данные (открыть форму в установщике), а затем записать вставленные данные в текстовый файл.

Прямо сейчас я могу написать ввод из nsDialog, это код:

nsDialogs::Create 1018
Pop $Dialog

${NSD_CreateText} 10% 20u 80% 12u "Insert the API KEY"

Pop $Text
nsDialogs::Show


${NSD_GetText} $Text $0
MessageBox MB_OK "You typed:$\n$\n$0"

FileOpen $0 "$DESKTOP\Hello_world.txt" w
FileWrite $0 $Text
FileClose $0

Однако проблема в том, что данные, которые записываются в Hello_world.txt, представляют собой случайные цифры, сейчас я не совсем понимаю, что это за числа, не должно ли $ Text быть строкой?

1 Ответ

0 голосов
/ 17 сентября 2018

Диалог (и его дочерние элементы управления) существует только между nsDialogs::Create и nsDialogs::Show. Вы получаете случайную информацию, потому что вы пытаетесь прочитать что-то, чего больше не существует. Кроме того, в вашем примере $Text это дескриптор управления редактированием (HWND), а не текст, ваш текст будет в $0 в вашем случае.

Чтобы завершить и отобразить диалоговое окно, вы должны вызвать nsDialogs::Show. Эта функция не вернется, пока пользователь не нажмет Next, Back или Cancel.

Вы должны прочитать ввод пользователя в обратном вызове страницы:

Page Custom MyPageCreate MyPageLeave
Page Directory
Page InstFiles

Var MyTextControlHandle

Function MyPageCreate
nsDialogs::Create 1018
Pop $0

${NSD_CreateText} 10% 20u 80% 12u "Insert the API KEY"
Pop $MyTextControlHandle

nsDialogs::Show
; $MyTextControlHandle is no longer valid here
FunctionEnd

Function MyPageLeave
${NSD_GetText} $MyTextControlHandle $0 ; Get text from $MyTextControlHandle and store in $0
MessageBox MB_OK "You typed:$\n$\n$0"
; Save $0 somewhere if desired
FunctionEnd
...