Что нового

Сохранение переменной в .EXE

saraconor

Новичок
Сообщения
420
Репутация
3
допустим:
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$GLOB = "Переменная"
$Form1 = GUICreate("Form1", 143, 36, 192, 124)
$Input1 = GUICtrlCreateInput($GLOB, 8, 8, 121, 21)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd

Как сделать так чтобы записав новое слово вместо "Переменная" в окошке и закрыв процесс мы после повторного открытия получили в окошке то слово, которое мы записали?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Почитайте про
Код:
IniWrite
IniRead

Это правда сохранение не в ехе, но более правильное.
Либо
Код:
RegWrite
RegRead
 

forc1k

Новичок
Сообщения
42
Репутация
1
Как сделать так чтобы записав новое слово вместо "Переменная" в окошке и закрыв процесс мы после повторного открытия получили в окошке то слово, которое мы записали?
Записанное слово хранится в файле "Data.txt" в папке со скриптом.
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Local Const $sFilePath = @ScriptDir & "\Data.txt"
$Data = FileRead($sFilePath)
$Form1 = GUICreate("Form1", 143, 36, 192, 124)
$Input1 = GUICtrlCreateInput($Data, 8, 8, 121, 21)

GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			$Input_new = GUICtrlRead($Input1)
			FileDelete($sFilePath)
			FileWrite($sFilePath, $Input_new)
			Exit
	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Можно и в себя (.exe) записать.
 
Автор
S

saraconor

Новичок
Сообщения
420
Репутация
3
madmasles сказал(а):
Можно и в себя (.exe) записать.
Вот Вот! Это и нужно, как такое можно сделать? Получаетс файл себя сам перезаписывать будет вроде как.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
saraconor [?]
как такое можно сделать?
Вот примерная схема (у меня работает):
Код:
If Not @Compiled Then Exit MsgBox(64, 'Info', 'Запускайте только скомпилированный скрипт!')

If $CmdLine[0] Then
    Sleep(250)
	$hFile = FileOpen(@ScriptFullPath)
    $sRead = FileRead($hFile)
    FileClose($hFile)
    $hFile = FileOpen($CmdLine[1], 2)
    FileWrite($hFile, $sRead)
    FileClose($hFile)
    Exit
Else
    FileDelete(@TempDir & '\' & @ScriptName)
EndIf

MsgBox(64, 'Info', 'Прочитали из себя: ' & _GetText())
$sTxt = InputBox('Пишем в себя', 'Введите строку', 'Строка')
If @error Then Exit
_WriteText($sTxt)

Func _WriteText($s_Txt)
    Local $h_File, $s_Read, $s_End = 'AU3!EA06'

    $h_File = FileOpen(@ScriptFullPath)
    $s_Read = FileRead($h_File)
    FileClose($h_File)
    $h_File = FileOpen(@TempDir & '\' & @ScriptName, 2)
    FileWrite($h_File, StringLeft($s_Read, StringInStr($s_Read, $s_End, 1, -1) + 7) & $s_Txt)
    FileClose($h_File)
    Run('"' & @TempDir & '\' & @ScriptName & '" "' & @ScriptFullPath & '"')
    Exit
EndFunc   ;==>_WriteText

Func _GetText()
    Local $h_File, $s_Read, $s_End = 'AU3!EA06', $s_Txt

    $h_File = FileOpen(@ScriptFullPath)
    $s_Read = FileRead($h_File)
    FileClose($h_File)
    $s_Txt = StringTrimLeft($s_Read, StringInStr($s_Read, $s_End, 1, -1) + 7)
    If Not $s_Txt Then Return 'Нет записи'
    Return $s_Txt
EndFunc   ;==>_GetText


Добавлено:
Сообщение автоматически объединено:

Но, ИМХО, лучше сохранять данные в файле - реестре - альтернативном потоке - ...
 
Автор
S

saraconor

Новичок
Сообщения
420
Репутация
3
Ваша схема не работает. Переменная не меняется после закрытия.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Автор
S

saraconor

Новичок
Сообщения
420
Репутация
3
а как сохранять данные в реестре в альтернативном потоке?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
saraconor сказал(а):
а как сохранять данные в реестре в альтернативном потоке?
В реестр:
Код:
Local $sText; переменная

; записываем:
RegWrite("HKEY_CURRENT_USER\Software\Test", "TestKey", "REG_SZ", "Hello this is a test")

; читаем:
$sText = RegRead("HKEY_CURRENT_USER\Software\Test", "TestKey")
MsgBox(0, "Прочитанное значение", $sText); показываем

; удаляем:
RegDelete("HKEY_CURRENT_USER\Software\Test", "TestKey")
 
Автор
S

saraconor

Новичок
Сообщения
420
Репутация
3
alex33 Спасибо за пример. Скажите а можно туда записывать большие объемы данных, или вообще массивы многомерные?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Я бы не рекомендовал засорять реестр большими данными... Ну а так, массивы если только в виде строки...
 
Верх