#include <GUIConstantsEx.au3>
#include <String.au3>
#include <EditConstants.au3>

_Main()

Func _Main()
	Local $WinMain, $EditText, $InputPass, $InputLevel, $EncryptButton, $DecryptButton, $string
	; GUI and String stuff
	$WinMain = GUICreate('Утилита шифрования', 400, 400) ; Создаёт окно
	$EditText = GUICtrlCreateEdit('', 5, 5, 380, 350) ; Создаёт окно редактирования
	; Создаёт поле ввода пароля с  выравниванием по центру и скрытым
	$InputPass = GUICtrlCreateInput('', 5, 360, 100, 20, $ES_CENTER + $ES_PASSWORD)
	; Две строки определяют уровень шифрования с элементами Up|Down
	$InputLevel = GUICtrlCreateInput(1, 110, 360, 50, 20, $ES_CENTER + $ES_NUMBER)
	GUICtrlSetLimit(GUICtrlCreateUpdown($InputLevel), 10, 1)
	$EncryptButton = GUICtrlCreateButton('Шифрование', 170, 360, 105, 35) ; кнопка для шифрования
	$DecryptButton = GUICtrlCreateButton('Расшифрование', 285, 360, 105, 35) ; кнопка для расшифрования
	; Обычный текст, поясняющий назначение элементов интерфейса
	GUICtrlCreateLabel('Пароль', 5, 385)
	GUICtrlCreateLabel('Уровень', 110, 385)
	GUISetState() ; Показывает окно

	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $EncryptButton
				GUISetState(@SW_DISABLE, $WinMain) ; Делает окно недоступным на время обработки
				$string = GUICtrlRead($EditText) ; Извлекает текст из окна редактирования
				GUICtrlSetData($EditText, 'Пожалуйста подождите, пока текст обрабатывается.') ; дружелюбное сообщение
				GUICtrlSetData($EditText, _StringEncrypt(1, $string, GUICtrlRead($InputPass), GUICtrlRead($InputLevel)))
				; Вызывает шифрование. Устанавливает данные в окно редактирования с зашифрованной строкой
				; Параметры шифрования начинаются с 1/0 определяющее шифровать / расшифровать
				; Затем данные, которые были прочитаны в переменную из окна редактирования
				; Далее читает поле пароля и поле уровня шифрования
				GUISetState(@SW_ENABLE, $WinMain) ; Делает окно доступным
			Case $DecryptButton
				GUISetState(@SW_DISABLE, $WinMain) ; Делает окно недоступным на время обработки
				$string = GUICtrlRead($EditText) ; Извлекает текст из окна редактирования
				GUICtrlSetData($EditText, 'Пожалуйста подождите, пока текст обрабатывается.') ; дружелюбное сообщение
				GUICtrlSetData($EditText, _StringEncrypt(0, $string, GUICtrlRead($InputPass), GUICtrlRead($InputLevel)))
				; Вызывает расшифрование. Устанавливает данные в окно редактирования с расшифрованной строкой
				; Параметры шифрования начинаются с 1/0 определяющее шифровать / расшифровать
				; Затем данные, которые были прочитаны в переменную из окна редактирования
				; Далее читает поле пароля и поле уровня шифрования
				GUISetState(@SW_ENABLE, $WinMain) ; Делает окно доступным
		EndSwitch
	WEnd ; Продолжить цикл пока окно не будет закрыто
	Exit
EndFunc   ;==>_Main