#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=D:\ss\ico\Text Icon.ico
#AutoIt3Wrapper_Outfile_x64=rsacrypt.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=RSAcrypt
#AutoIt3Wrapper_Res_Description=Программа шифрования
#AutoIt3Wrapper_Res_Fileversion=1.1.0.0
#AutoIt3Wrapper_Res_LegalCopyright=IppolitMufteev
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Res_Icon_Add=1.ico
#AutoIt3Wrapper_Res_Icon_Add=2.ico
#AutoIt3Wrapper_Res_Icon_Add=3.ico
#AutoIt3Wrapper_Res_Icon_Add=4.ico
#AutoIt3Wrapper_Res_Icon_Add=5.ico
#AutoIt3Wrapper_Res_Icon_Add=6.ico
#AutoIt3Wrapper_Res_Icon_Add=7.ico
#AutoIt3Wrapper_Run_AU3Check=n
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -delete %out%, %out%, Dialog, 1000,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -delete %out%, %out%, Icon, 162,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -delete %out%, %out%, Icon, 164,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -delete %out%, %out%, Icon, 169,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -delete %out%, %out%, Menu, 166,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -delete "%out%", "%out%", 24, 1,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -add %out%, %out%, normal.cur, 12, 100,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -add %out%, %out%, link.cur, 12, 101,
#AutoIt3Wrapper_Run_After=Util\ResHacker.exe -add %out%, %out%, text.cur, 12, 102,
#Tidy_Parameters=/refc /rerc /rel
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt("TrayMenuMode",3)
#Obfuscator_Ignore_Funcs=_RSA_DeCrypt, _RSA_EnCrypt
#region Include and Declaration Vars, and Install skin for window
FileChangeDir(@ScriptDir)
OnAutoItExitRegister("_exit")
#include <Constants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIskin.au3>
#include <file.au3>
#include <_RSA_crypt.au3>
#include <string.au3>
#include <WinAPIEx.au3>
#include <xskinanimate.au3>
#include <ModernMenuRaw.au3>
#include <GuiRichEdit.au3>
#include <GuiMenu.au3>
#include <GuiEdit.au3>
#include <GuiStatusBar.au3>
Global $hTray = ControlGetHandle('[CLASS:Shell_TrayWnd]', '', 'TrayNotifyWnd1')
Global $menuiems[15],$menutext[15]=["Artec","Bstyle","Centurion","DarkRed","exact","Grayzzy","Letter","magnifier", _
									"shift",'Avalon','vista','Pearl','Carmine','Quadro','No style'],$dll=@ScriptDir&"\SkinCrafter.dll"
Global $electronic, $openkey, $inst = _WinAPI_GetModuleHandle(0)
Global $genkey, $GUIshiphr, $openk, $Edit1, $Edit2, $Delete, $Delete1, $private, $decrypt, _
									$encrypt, $openf, $modul, $save, $Checkbox1, $exit
Dim $szDrive, $szDir, $szFName, $szExt
Global $_SheSkinListDir = @ScriptDir & '\Skins'
Global $inidef, $POPUPTEMP2,$ini_lang
If $CmdLine[0] = 0 Then
	$electronic = 0
	;
Else
	$electronic = 1
EndIf
If FileExists(@ScriptDir&'\settings.ini') Then
	$inidef = IniRead(@ScriptDir&'\settings.ini', 'skin', 'skins', '')
Else
	IniWrite(@ScriptDir&'\settings.ini', 'skin', 'skins', 'Bstyle')
	IniWrite(@ScriptDir&'\settings.ini',"Language","Interface","ru")
	$inidef = "Bstyle"
EndIf
$ini = IniRead(@ScriptDir&'\settings.ini', 'skin', 'skins', '')
$in_lang=IniRead(@ScriptDir&"\settings.ini","Language","Interface",'')
$normalcursor = _WinAPI_LoadCursor($inst, 100)
$sendcursor = _WinAPI_LoadCursor($inst, 101)
$txtcursor = _WinAPI_LoadCursor($inst, 102)
DirCreate(@ScriptDir & '\skins')
FileInstall("SkinCrafter.dll",@ScriptDir&"\SkinCrafter.dll",1)
FileInstall('skins\Artec.skf',@ScriptDir & '\skins\Artec.skf',1)
FileInstall('skins\Bstyle.skf',@ScriptDir & '\skins\Bstyle.skf',1)
FileInstall('skins\Centurion.skf',@ScriptDir & '\skins\Centurion.skf',1)
FileInstall('skins\DarkRed.skf',@ScriptDir & '\skins\DarkRed.skf',1)
FileInstall('skins\exact.skf',@ScriptDir & '\skins\exact.skf',1)
FileInstall('skins\Grayzzy.skf',@ScriptDir & '\skins\Grayzzy.skf',1)
FileInstall('skins\Letter.skf',@ScriptDir & '\skins\Letter.skf',1)
FileInstall('skins\magnifier.skf',@ScriptDir & '\skins\magnifier.skf',1)
FileInstall('skins\shift.skf',@ScriptDir & '\skins\shift.skf',1)
FileInstall('skins\Avalon.skf',@ScriptDir&'\skins\Avalon.skf',1)
FileInstall('skins\vista.skf',@ScriptDir&'\skins\vista.skf',1)
FileInstall('skins\Pearl.skf',@ScriptDir&'\skins\Pearl.skf',1)
FileInstall('skins\Carmine.skf',@ScriptDir&'\skins\Carmine.skf',1)
FileInstall('skins\Quadro.skf',@ScriptDir&'\skins\Quadro.skf',1)
Global $Progress,$ProgressLabel
Global $PasswordPOPUP, $editpas,$Label1,$pas,$ExitPopup
Global $Avi1,$La,$CheckPassword
#endregion end declaration
#region Declaration Var For Language Locations
Global $ru_ProgressText[4]=["Выполнение операции на: ","Операция открытия выполнена","Операция сохранения выполнена",'Операция зашифровки\расшифровки завершена']
Global $ru_Edit1text="Здравствуйте, вам требуется сюда ввести ваши"&@CRLF&"произвольные данные подготовленные вами для шифрования."&@CRLF&"Также вы можете бросить текстовый файл в это поле!"
Global $ru_Edit2text="Здесь будут зашифрованные данные представленные в бинарном виде"
Global $ru_menu[6]=["Меню","Открыть","Сохранить","Справка","Выход","Стили оформления"]
Global $ru_button[8]=["Расшифровать","Зашифровать","Выход","Открыть","Сохранить","Сгенерировать ключи","Стереть нормальные текстовые данные","Стереть зашифрованные бинарные данные"]
Global $ru_checkbox[2]=["Снять защиту на ключах и зашифорванных данных","Установить защиту"]
Global $ru_titleMsgBox[4]=["Внимание","Успех","Ошибка","Непредвиденная ошибка"]
Global $ru_TextMsgBox[13]=['Вы открыли файл через ассоциацию, следует указать файл ключа!'&@CRLF&'Нажмите Ок чтобы выбрать файл и Отмена чтобы выбрать позже', _
						'Сгенерированы новые ключи', _;1 el
						"Вы не ввели пароль для шифрования\расшифрования!", _;2 el
						'Вы не сгенерировали ключи! программа не может шифровать без ключей и модуля'&@CRLF&'Сгенерируйте ключ и модуль', _
						'Вы не ввели стандартные данные! программе нечего шифровать', _;4 el
						'Данные зашифрованы', _;5
						'Данные расшифрованы', _;6
						"Для обеспечения дополнительной безопасности вам предлогается ввести собственный пароль!"&@CRLF& _
							"Этот пароль потребуется для открытия файла, поэтому рекомендуется запомнить его!", _;7
						'Файл сохранен!', _;8
						"Файл с ключами открыт!", _;9
						'Файл открыт!', _;10
						'Ключи не введены! программа не сможет расшифровать данные без ключей!'& _
						@CRLF&'Если вы открывали данные через ассоциацию, нажмите кнопку "Открыть" для указания ключей.', _;11
						'Зашифрованных данных нет, программе нечего расшифровывать!'];12
Global $ru_AviVisLabel="Пожалуйста подождите, идет расшифровка\зашифровка"
Global $ru_OpenSaveFile[5]=['Выбирите зашифрованный файл', _
							"Зашифрованные ключи", _
							"Введите имя сохраняемого файла", _
							"Зашифрованные файлы", _
							"Выбирите зашифрованный ключ"]
Global $en_ProgressText[4]=["The operation on the: ","The operation open was performed","The operation save was performed",'The operation decrypt\crypt performed']
Global $en_Edit1text="Hello, here you need to enter your custom data you"&@CRLF&" have prepared for encryption."&@CRLF&"Also, you can throw a text file in this field!"
Global $en_Edit2text="There will be encrypted data presented in binary form"
Global $en_menu[6]=["Menu", "Open", "Save", "Help", "Exit", "Styles"]
Global $en_button[8]=["Decrypt","Encrypt","Exit","Open","Save","Generate Key","Delete the normal text data","Delete the encrypted binary data"]
Global $en_checkbox[2]=["Remove protection for keys and data crypt","Set protect"]
Global $en_titleMsgBox[4]=["Caution","Success","Error","Unexpected error"]
Global $en_TextMsgBox[13]=["You have opened a file through an association, you must specify the key file!"&@CRLF&"Click OK to select the file, or Cancel to choose later", _
							'To generate new keys', _
                            "You did not enter a password for encryption\decryption!", _
							'You do not have generated the keys! program can encrypt without keys and module'&@CRLF&'Generate the key and the module', _
							'You have not entered the standard data! the program has nothing to encrypt', _
                            "Encrypted data", "Data decrypted", _
                            "For extra security, you suggest to enter your own password!"&@CRLF& _
								"This password is required to open the file, so it is advisable to remember it!", _
                            'The file was saved!', _
                            "The file is opened with the keys!", _
                            'File open!', _
							'The keys are not entered! the program will not be able to decrypt the data without the keys!'& _
								@CRLF&'If you open the data through the association, click "Open" to indicate the keys.', _
							'Encrypted data is not present, the program has nothing to decipher!']
Global $en_AviVisLabel="Please wait, decrypt \ encryption"
Global $en_OpenSaveFile[5]=['Please select an encrypted file', _
                            "Encrypted keys", _
                            "Enter the name of the file to be saved", _
                            "Encrypted files", _
                            "Select the encrypted key"]
Global $ru_lngMenu="Язык интерфейса"
Global $en_lngMenu="Language interface"
Global $ru_GroupText[2]=["Стандартные текстовые данные","Зашифрованные бинарные данные"]
Global $en_GroupText[2]=["Standart text data","Crypt binary data"]
Global $GUI,$ProgressText[4],$Edit1text,$Edit2text,$menu[6],$button[8],$checkbox[2],$titleMsgBox[4],$TextMsgBox[13],$AviVisLabel,$OpenSaveFile[5]
Global $ru_GUI="Шифрование", $en_GUI="Crypt",$lng_menu,$GroupText[2]
Global $ru_GUIpasText[5]=["Пароль","Введите пароль","Выйти из программы","Показать пароль","Скрыть пароль"],$GUIpasText[5]
Global $en_GUIpastext[5]=["Password","Enter password","Exit from programm","Show password","Hide password"]
Global $struct=DllStructCreate($tagpoint)
Global $ru_cont[4]=["Копировать","Вставить","Удалить","Выделить все"],$en_cont[4]=["Copy","Set","Delete","Select all"],$cont[4]
Global $trigger
#endregion End Declaration Var For Language Locations
#region ### START GUI section ### Form=
Switch $in_lang
	Case "ru"
		For $i=0 To 3
			$cont[$i]=$ru_cont[$i]
		Next
		For $i=0 To 7
			$button[$i]=$ru_button[$i]
		Next
		For $i=0 To 4
			$GUIpasText[$i]=$ru_GUIpasText[$i]
		Next
		For $i=0 To 1
			$GroupText[$i]=$ru_GroupText[$i]
		Next
		$GUI=$ru_GUI
		For $i=0 To 3
			$ProgressText[$i]=$ru_ProgressText[$i]
		Next
		$Edit1text=$ru_Edit1text
		$Edit2text=$ru_Edit2text
		For $i=0 To 5
			$menu[$i]=$ru_menu[$i]
		Next
		$checkbox[0]=$ru_checkbox[0]
		$checkbox[1]=$ru_checkbox[1]
		For $i=0 To 3
			$titleMsgBox[$i]=$ru_titleMsgBox[$i]
		Next
		For $i=0 To 12
			$TextMsgBox[$i]=$ru_TextMsgBox[$i]
		Next
		$AviVisLabel=$ru_AviVisLabel
		For $i=0 To 4
			$OpenSaveFile[$i]=$ru_OpenSaveFile[$i]
		Next
		$lng_menu=$ru_lngMenu
	Case "en"
		For $i=0 To 3
			$cont[$i]=$en_cont[$i]
		Next
		For $i=0 To 7
			$button[$i]=$en_button[$i]
		Next
		For $i=0 To 4
			$GUIpasText[$i]=$en_GUIpasText[$i]
		Next
		For $i=0 To 1
			$GroupText[$i]=$en_GroupText[$i]
		Next
		$GUI=$en_GUI
		For $i=0 To 3
			$ProgressText[$i]=$en_ProgressText[$i]
		Next
		$Edit1text=$en_Edit1text
		$Edit2text=$en_Edit2text
		For $i=0 To 5
			$menu[$i]=$en_menu[$i]
		Next
		$checkbox[0]=$en_checkbox[0]
		$checkbox[1]=$en_checkbox[1]
		For $i=0 To 3
			$titleMsgBox[$i]=$en_titleMsgBox[$i]
		Next
		For $i=0 To 12
			$TextMsgBox[$i]=$en_TextMsgBox[$i]
		Next
		$AviVisLabel=$en_AviVisLabel
		For $i=0 To 4
			$OpenSaveFile[$i]=$en_OpenSaveFile[$i]
		Next
		$lng_menu=$en_lngMenu
	EndSwitch
#region create window and global menu
$GUIshiphr = GUICreate($GUI, 608, 465, -1,-1,-1,$WS_EX_ACCEPTFILES)
_GUIinitskin($dll,$GUIshiphr)
If $inidef="No style" Then
	_GUIUnSetSkin($GUIshiphr)
Else
	_GUIsetskin($_SheSkinListDir & '\' & $inidef & '.skf')
EndIf
$MenuItem2 = GUICtrlCreateMenu($menu[0])
$id_icoMenu=_CreateSideMenu($MenuItem2)
$Menuopen = _GUICtrlCreateODMenuItem($menu[1], $MenuItem2,@ScriptFullPath,203)
$MenuSave = _GUICtrlCreateODMenuItem($menu[2], $MenuItem2,@ScriptFullPath,204)
$Menuhelp = _GUICtrlCreateODMenuItem($menu[3], $MenuItem2,@ScriptFullPath,201)
$Menuexit = _GUICtrlCreateODMenuItem($menu[4], $MenuItem2,@ScriptFullPath,202)
$menustyle = GUICtrlCreateMenu($menu[5])
For $x=0 To 14
	$menuiems[$x]=GUICtrlCreateMenuItem($menutext[$x],$menustyle,$x,1)
Next
For $x=0 To 14
	If $inidef=$menutext[$x] Then
		GUICtrlSetState($menuiems[$x],$GUI_CHECKED)
	EndIf
Next
$MenuLanguage=GUICtrlCreateMenu($lng_menu)
$ru_interface=GUICtrlCreateMenuItem("Русский язык",$MenuLanguage)
$en_interface=GUICtrlCreateMenuItem("English Language",$MenuLanguage)
$richmenu1=GUICtrlCreateContextMenu(GUICtrlCreateDummy())
$hmenu=GUICtrlGetHandle($richmenu1)
$copymenu=GUICtrlCreateMenuItem($cont[0],$richmenu1)
$setmenu=GUICtrlCreateMenuItem($cont[1],$richmenu1)
$deletemenu=GUICtrlCreateMenuItem($cont[2],$richmenu1)
$selectmenu=GUICtrlCreateMenuItem($cont[3],$richmenu1)
#endregion
#region
$modul = GUICtrlCreateInput("", 0, 0, 121, 21, $ES_READONLY)
GUICtrlSetLimit(-1, 8)
GUICtrlSetColor(-1,0x868BF2)
$openk = GUICtrlCreateInput("", 122, 0, 121, 21, $ES_READONLY)
GUICtrlSetLimit(-1, 8)
GUICtrlSetColor(-1,0x868BF2)
$private = GUICtrlCreateInput("", 244, 0, 121, 21, $ES_READONLY)
GUICtrlSetLimit(-1, 8)
GUICtrlSetColor(-1,0x868BF2)
#endregion
#region button
$decrypt = GUICtrlCreateButton($button[0], 368, 0, 83, 22)
$crypt = GUICtrlCreateButton($button[1], 454, 0, 75, 22)
$exit = GUICtrlCreateButton($button[2], 531, 0, 51, 22)
$openf = GUICtrlCreateButton($button[3], 0, 21, 59, 22)
$save = GUICtrlCreateButton($button[4], 62, 21, 75, 22)
$genkey = GUICtrlCreateButton($button[5], 140, 21, 119, 22)
#endregion end button
#region
$Group1 = GUICtrlCreateGroup($GroupText[0], 0, 42, 300, 377)
$Edit1 = _GUICtrlRichEdit_Create($GUIshiphr,'', 2, 56, 294, 340, BitOR($ES_AUTOVSCROLL, _
					$ES_WANTRETURN, $WS_VSCROLL,$ws_hscroll,$es_multiline))
$Delete1 = GUICtrlCreateButton($button[6], 2, 396, 294, 20)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup($GroupText[1], 304, 42, 300, 377)
$Edit2 = _GUICtrlRichEdit_Create($GUIshiphr,'', 306, 56, 294, 340,BitOR($ES_AUTOVSCROLL, _
					$ES_WANTRETURN, $WS_VSCROLL,$es_multiline))
_GUICtrlRichEdit_SetReadOnly($Edit2,True)
_GUICtrlRichEdit_SetText($Edit1,$Edit1text)
_GUICtrlRichEdit_SetText($Edit2,$Edit2text)
_GUICtrlRichEdit_AutoDetectURL($Edit1,True)
_GUICtrlRichEdit_AutoDetectURL($Edit2,True)
$Delete2 = GUICtrlCreateButton($button[7], 306, 396, 294, 20)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Checkbox1 = GUICtrlCreateCheckbox($checkbox[0], 320, 24, 281, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
#endregion
$TrayHideWin=TrayCreateItem("Hide Window RSA")
TrayItemSetState(-1, $TRAY_DEFAULT)
TrayCreateItem('')
$TrayExit=TrayCreateItem("Exit")
TraySetToolTip("RSAcrypt")
TraySetIcon(@ScriptFullPath,206)
GUIRegisterMsg(0x0233,"DropFilesForEdit")
GUIRegisterMsg($wm_setcursor,"wm_setcursor")
TraySetState(1)
GUISetState(@SW_SHOW, $GUIshiphr)
$StatusBar=_GUICtrlStatusBar_Create($GUIshiphr)
Dim $size[2]=[285,-1]
_GUICtrlStatusBar_SetParts($StatusBar,$size)
_GUICtrlStatusBar_SetText($StatusBar,"",0)
_GUICtrlStatusBar_SetText($StatusBar,"",1)
$Progress=GUICtrlCreateProgress(0,0,-1,-1)
$hProgress=GUICtrlGetHandle($Progress)
_GUICtrlStatusBar_EmbedControl($StatusBar,0,$hProgress)
#endregion ### END GUI section ###
If Not $electronic Then
	;
Else
	$msgbox = MsgBox(65, $titleMsgBox[0], $TextMsgBox[0],0,$GUIshiphr)
	If $msgbox = 1 Then
		$filekey = FileOpenDialog($OpenSaveFile[4], @DesktopDir, $OpenSaveFile[0]&'(*.ippmkey)')
		If @error Then
			;
		Else
			$whi=StringLeft(FileReadLine($CmdLine[1],1),2)
		    If $whi=="0x" Then
				$dats = FileRead($CmdLine[1])
				_ProgressSet(8)
				$t = _StringEncrypt(0, FileRead($filekey), 'The password will be the longest possible not to be hacked!', 10)
				_ProgressSet(75)
				$kl=StringSplit($t,@CRLF,2)
				_GUICtrlRichEdit_SetText($Edit2, $dats)
				GUICtrlSetData($modul, $kl[0])
				GUICtrlSetData($private, $kl[2])
				GUICtrlSetData($openk, "")
				_ProgressSetComplete('open')
				$openkey = 0
			Else
				$pad=_PasswordEditForCrypt()
				$dats = FileRead($CmdLine[1])
				_ProgressSet(8)
				$t = _StringEncrypt(0, FileRead($filekey), 'The password will be the longest possible not to be hacked!', 10)
				_ProgressSet(75)
				$kl=StringSplit($t,@CRLF,2)
				_GUICtrlRichEdit_SetText($Edit2, _StringEncrypt(0,$dats,$pad))
				GUICtrlSetData($modul, $kl[0])
				GUICtrlSetData($private, $kl[2])
				GUICtrlSetData($openk, "")
				_ProgressSetComplete('open')
				$openkey = 0
			EndIf
		EndIf
	ElseIf $msgbox = 2 Then
		$openkey = 1
		$whi=StringLeft(FileReadLine($CmdLine[1],1),2)
		If $whi=="0x" Then
			$pask = _PasswordEditForCrypt()
			$readfile = _StringEncrypt(0,FileRead($CmdLine[1]),$pask,2)
			_GUICtrlRichEdit_SetText($Edit2,$readfile)
		Else
		    $readfile = FileRead($CmdLine[1])
			_GUICtrlRichEdit_SetText($Edit2,$readfile)
		EndIf
	EndIf
EndIf
While 1
	$nMsg = GUIGetMsg()
	$TrayMsg=TrayGetMsg()
	Switch $TrayMsg
		Case $TrayExit
			Exit
		Case $TrayHideWin
			Local $wins=WinGetState($GUIshiphr)
			Switch $wins
				Case 7,32
					_WinAPI_DrawAnimatedRects($GUIshiphr, _WinAPI_GetWindowRect($GUIshiphr), _WinAPI_GetWindowRect($hTray))
					WinSetState($GUIshiphr,'',@SW_HIDE)
					TrayItemSetText($TrayHideWin,"Show Window RSA")
					TraySetIcon(@ScriptFullPath,205)
				Case 5,16
					_WinAPI_DrawAnimatedRects($GUIshiphr, _WinAPI_GetWindowRect($hTray), _WinAPI_GetWindowRect($GUIshiphr))
					WinSetState($GUIshiphr,'',@SW_SHOW)
					TrayItemSetText($TrayHideWin,"Hide Window RSA")
					TraySetIcon(@ScriptFullPath,206)
			EndSwitch
	EndSwitch
	Switch $nMsg
		Case $selectmenu
			If $trigger=$Edit1 Then
				_GUICtrlRichEdit_SetSel($Edit1,0,-1)
			EndIf
			If $trigger=$Edit2 Then
				_GUICtrlRichEdit_SetSel($Edit2,0,-1)
			EndIf
		Case $deletemenu
			If $trigger=$Edit1 Then
				_GUICtrlRichEdit_ReplaceText($Edit1,'')
			EndIf
			If $trigger=$Edit2 Then
				_GUICtrlRichEdit_ReplaceText($Edit2,'')
			EndIf
		Case $copymenu
			If $trigger=$Edit1 Then
				ClipPut(_GUICtrlRichEdit_GetSelText($Edit1))
			EndIf
			If $trigger=$Edit2 Then
				ClipPut(_GUICtrlRichEdit_GetSelText($Edit1))
			EndIf
		Case $setmenu
			If $trigger=$Edit1 Then
				_GUICtrlRichEdit_InsertText($Edit1,ClipGet())
			EndIf
			If $trigger=$Edit2 Then
				_GUICtrlRichEdit_InsertText($Edit2,ClipGet())
			EndIf
		Case $en_interface
			__ResetLanguage("En")
		Case $ru_interface
			__ResetLanguage("Ru")
		Case $menuiems[0]
			IniWriteSection("settings.ini","skin","skins="&$menutext[0])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[0]&".skf")
		Case $menuiems[1]
			IniWriteSection("settings.ini","skin","skins="&$menutext[1])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[1]&".skf")
		Case $menuiems[2]
			IniWriteSection("settings.ini","skin","skins="&$menutext[2])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[2]&".skf")
		Case $menuiems[3]
			IniWriteSection("settings.ini","skin","skins="&$menutext[3])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[3]&".skf")
		Case $menuiems[4]
			IniWriteSection("settings.ini","skin","skins="&$menutext[4])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[4]&".skf")
		Case $menuiems[5]
			IniWriteSection("settings.ini","skin","skins="&$menutext[5])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[5]&".skf")
		Case $menuiems[6]
			IniWriteSection("settings.ini","skin","skins="&$menutext[6])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[6]&".skf")
		Case $menuiems[7]
			IniWriteSection("settings.ini","skin","skins="&$menutext[7])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[7]&".skf")
		Case $menuiems[8]
			IniWriteSection("settings.ini","skin","skins="&$menutext[8])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[8]&".skf")
		Case $menuiems[9]
			IniWriteSection("settings.ini","skin","skins="&$menutext[9])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[9]&".skf")
		Case $menuiems[10]
			IniWriteSection("settings.ini","skin","skins="&$menutext[10])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[10]&".skf")
		Case $menuiems[11]
			IniWriteSection("settings.ini","skin","skins="&$menutext[11])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[11]&".skf")
		Case $menuiems[12]
			IniWriteSection("settings.ini","skin","skins="&$menutext[12])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[12]&".skf")
		Case $menuiems[13]
			IniWriteSection("settings.ini","skin","skins="&$menutext[13])
			_GUIsetskin($_SheSkinListDir&"\"&$menutext[13]&".skf")
		Case $menuiems[14]
			IniWriteSection("settings.ini","skin","skins=No style")
			_GUIUnSetSkin($GUIshiphr)
		Case $Delete2
			_GUICtrlRichEdit_SetText($Edit2, '')
		Case $Delete1
			_GUICtrlRichEdit_SetText($Edit1, '')
		Case $decrypt
			_encrypttxt("Decrypt")
		Case $crypt
			_encrypttxt("Crypt")
		Case $save, $MenuSave
			_SaveFileFor()
		Case $openf, $Menuopen
			_OpenFileFor()
		Case $Menuhelp
			ShellExecute(@ScriptDir & '\help.chm')
		Case $GUI_EVENT_CLOSE, $exit, $Menuexit
			Exit
		Case $genkey
			$key = _RSA_GenerateKeys(8)
			GUICtrlSetData($modul, $key[0])
			GUICtrlSetData($private, $key[2])
			GUICtrlSetData($openk, $key[1])
			MsgBox(64, $titleMsgBox[1], $TextMsgBox[1], 2,$GUIshiphr)
		Case $Checkbox1
			If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
				GUICtrlSetStyle($modul, $ES_READONLY)
				GUICtrlSetStyle($openk, $ES_READONLY)
				GUICtrlSetStyle($private, $ES_READONLY)
				_GUICtrlRichEdit_SetReadOnly($Edit2)
				GUICtrlSetData($Checkbox1, $checkbox[0])
			ElseIf BitAND(GUICtrlRead($Checkbox1), $GUI_UNCHECKED) = $GUI_UNCHECKED Then
				GUICtrlSetStyle($modul, $ES_NUMBER)
				GUICtrlSetStyle($openk, $ES_NUMBER)
				GUICtrlSetStyle($private, $ES_NUMBER)
				GUICtrlSetData($Checkbox1, $checkbox[1])
				_GUICtrlRichEdit_SetReadOnly($Edit2,False)
			EndIf
	EndSwitch
WEnd;==> Global loop
#region start internal function; Function aftors
Func __ResetLanguage($language)
	Local $ed[2]=[GUICtrlRead($Edit1),GUICtrlRead($Edit2)],$edel[2]=[$Edit1,$Edit2], _
				$te_ru[2]=[$ru_Edit1text,$ru_Edit2text],$te_en[2]=[$en_Edit1text,$en_Edit2text]
	Local $but[8]=[$decrypt,$crypt,$exit,$openf,$save,$genkey,$Delete1,$Delete2]
	Local $context[4]=[$copymenu,$setmenu,$deletemenu,$selectmenu]
	Switch $language
		Case "Ru"
			For $i=0 To 3
				GUICtrlSetData($context[$i],$ru_cont[$i])
			Next
			For $i=0 To 7
				GUICtrlSetData($but[$i],$ru_button[$i])
			Next
			GUICtrlSetData($MenuItem2,$ru_menu[0])
			_GUICtrlODMenuItemSetText($Menuopen,$ru_menu[1])
			_GUICtrlODMenuItemSetText($MenuSave,$ru_menu[2])
			_GUICtrlODMenuItemSetText($Menuhelp,$ru_menu[3])
			_GUICtrlODMenuItemSetText($Menuexit,$ru_menu[4])
			GUICtrlSetData($menustyle,$ru_menu[5])
			If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
				GUICtrlSetData($Checkbox1, $ru_checkbox[0])
			ElseIf BitAND(GUICtrlRead($Checkbox1), $GUI_UNCHECKED) = $GUI_UNCHECKED Then
				GUICtrlSetData($Checkbox1, $ru_checkbox[1])
			EndIf
			$checkbox[0]=$ru_checkbox[0]
			$checkbox[1]=$ru_checkbox[1]
			For $i=0 To 1
				If $ed[$i]="" Or $ed[$i]=$te_ru[$i] Or $ed[$i]=$te_en[$i] Then
					_GUICtrlRichEdit_SetText($edel[$i],$te_ru[$i])
				EndIf
			Next
			$Edit1text=$ru_Edit1text
			$Edit2text=$ru_Edit2text
			For $i=0 To 12
				$TextMsgBox[$i]=$ru_TextMsgBox[$i]
			Next
			For $i=0 To 3
				$titleMsgBox[$i]=$ru_titleMsgBox[$i]
			Next
			For $i=0 To 4
				$OpenSaveFile[$i]=$ru_OpenSaveFile[$i]
			Next
			For $i=0 To 3
				$ProgressText[$i]=$ru_ProgressText[$i]
		    Next
			For $i=0 To 4
				$GUIpasText[$i]=$ru_GUIpasText[$i]
			Next
			GUICtrlSetData($Group1,$ru_GroupText[0])
			GUICtrlSetData($Group2,$ru_GroupText[1])
			WinSetTitle($GUIshiphr,"",$ru_GUI)
			GUICtrlSetData($MenuLanguage,$ru_lngMenu)
			$AviVisLabel=$ru_AviVisLabel
			IniWrite(@ScriptDir&'\settings.ini',"Language","Interface","ru")
		Case "En"
			For $i=0 To 3
				GUICtrlSetData($context[$i],$en_cont[$i])
			Next
			For $i=0 To 7
				GUICtrlSetData($but[$i],$en_button[$i])
			Next
			GUICtrlSetData($MenuItem2,$en_menu[0])
			_GUICtrlODMenuItemSetText($Menuopen,$en_menu[1])
			_GUICtrlODMenuItemSetText($MenuSave,$en_menu[2])
			_GUICtrlODMenuItemSetText($Menuhelp,$en_menu[3])
			_GUICtrlODMenuItemSetText($Menuexit,$en_menu[4])
			GUICtrlSetData($menustyle,$en_menu[5])
			If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then
				GUICtrlSetData($Checkbox1, $en_checkbox[0])
			ElseIf BitAND(GUICtrlRead($Checkbox1), $GUI_UNCHECKED) = $GUI_UNCHECKED Then
				GUICtrlSetData($Checkbox1, $en_checkbox[1])
			EndIf
			$checkbox[0]=$en_checkbox[0]
			$checkbox[1]=$en_checkbox[1]
			For $i=0 To 1
				If $ed[$i]="" Or $ed[$i]=$te_ru[$i] Or $ed[$i]=$te_en[$i] Then
					_GUICtrlRichEdit_SetText($edel[$i],$te_en[$i])
				EndIf
			Next
			$Edit1text=$en_Edit1text
			$Edit2text=$en_Edit2text
			For $i=0 To 12
				$TextMsgBox[$i]=$en_TextMsgBox[$i]
			Next
			For $i=0 To 3
				$titleMsgBox[$i]=$en_titleMsgBox[$i]
			Next
			For $i=0 To 4
				$OpenSaveFile[$i]=$en_OpenSaveFile[$i]
			Next
			For $i=0 To 3
				$ProgressText[$i]=$en_ProgressText[$i]
		    Next
			For $i=0 To 4
				$GUIpasText[$i]=$en_GUIpasText[$i]
			Next
			GUICtrlSetData($Group1,$en_GroupText[0])
			GUICtrlSetData($Group2,$en_GroupText[1])
			WinSetTitle($GUIshiphr,"",$en_GUI)
			GUICtrlSetData($MenuLanguage,$en_lngMenu)
			$AviVisLabel=$en_AviVisLabel
			IniWrite(@ScriptDir&'\settings.ini',"Language","Interface","en")
	EndSwitch
EndFunc;==> Func changes language interface
Func _PasswordEditForCrypt()
	Local $ret
	$PasswordPOPUP = GUICreate($GUIpasText[0], 386, 47, 367, 343,$WS_POPUP,-1,$GUIshiphr)
	$editpas = GUICtrlCreateInput("",0, 25, 385, 21)
	_GUICtrlEdit_SetPasswordChar($editpas,"*")
	$Label1 = GUICtrlCreateLabel($GUIpasText[1], 0, 0, 105, 21,-1,$GUI_WS_EX_PARENTDRAG)
	$pas = GUICtrlCreateButton("Ок",345, 0, 40, 25)
	$ExitPopup = GUICtrlCreateButton($GUIpasText[2], 227, 0, 118, 25)
	$CheckPassword = GUICtrlCreateCheckbox($GUIpasText[3], 106, 0, 120, 17)
	GUICtrlSetState(-1,$GUI_CHECKED)
	GUISetState(@SW_SHOW)
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $CheckPassword
				If BitAND(GUICtrlRead($CheckPassword), $GUI_CHECKED) = $GUI_CHECKED Then
					_GUICtrlEdit_SetPasswordChar($editpas,"*")
					GUICtrlSetData($CheckPassword, $GUIpasText[3])
				ElseIf BitAND(GUICtrlRead($CheckPassword), $GUI_UNCHECKED) = $GUI_UNCHECKED Then
					GUICtrlSetData($CheckPassword, $GUIpasText[4])
					_GUICtrlEdit_SetPasswordChar($editpas)
				EndIf
			Case $ExitPopup
				__DeletePOPUP()
				Exit
			Case $pas
				$ra=GUICtrlRead($editpas)
				If Not($ra="") Then
					$ret=$ra
					ExitLoop
				ElseIf $ra="" Then
					MsgBox(16,$titleMsgBox[2],$TextMsgBox[2],0,$GUIshiphr)
				EndIf
		EndSwitch
	WEnd
	GUIDelete($PasswordPOPUP)
	Return $ret
EndFunc ;==> GUI for input password
Func __DeletePOPUP()
	GUIDelete($PasswordPOPUP)
EndFunc ;==> Delete GUI function _PasswordEditForCrypt()
Func DropFilesForEdit($wind,$msgl,$winparam,$lparams)
	Local $pos=MouseGetPos()
	$pos=MouseGetPos()
	DllStructSetData($struct,'x',$pos[0])
	DllStructSetData($struct,'y',$pos[1])
	$hel=_WinAPI_WindowFromPoint($struct)
    If Not @error And $hel = $Edit1 Then
        Local $aRet = DllCall("shell32.dll", "int", "DragQueryFile", "int", $winparam, "int", -1, "ptr", 0, "int", 0)
        If @error Then Return SetError(1, 0, 0)
        Local $sDroppedFiles, $i, $tBuffer = DllStructCreate("char[256]")
        For $i = 0 To $aRet[0] - 1
            DllCall("shell32.dll", "int", "DragQueryFile", "int", $winparam, _
            			"int", $i, "ptr", DllStructGetPtr($tBuffer), "int", DllStructGetSize($tBuffer))
            $sDroppedFiles &= DllStructGetData($tBuffer, 1) & @CRLF
        Next
        DllCall("shell32.dll", "none", "DragFinish", "int", $winparam)
        $tBuffer = 0
        _GUICtrlRichEdit_SetText($Edit1, FileRead(StringStripWS($sDroppedFiles, 2)))
	EndIf
	Return "GUI_RUNDEFMSG"
EndFunc ;==> API function for drag and drop files of data crypt
Func _encrypttxt($controls)
	$readch = GUICtrlRead($Checkbox1)
	$reade1 = String(_GUICtrlRichEdit_GetText($Edit1))
	$reade2 = String(_GUICtrlRichEdit_GetText($Edit2))
	$readm = GUICtrlRead($modul)
	$reado = GUICtrlRead($openk)
	$readp = GUICtrlRead($private)
	Switch $controls
		Case "Crypt"
			If $readm == '' Or $reado == '' Then
				MsgBox(4096 + 16, $titleMsgBox[2], $TextMsgBox[3],0,$GUIshiphr)
			ElseIf $reade1='' Or $reade1=$Edit1text Then
				MsgBox(16, $titleMsgBox[0], $TextMsgBox[4],0,$GUIshiphr)
			Else
				$data = _RSA_EnCrypt($reade1, $reado, $readm, -1, 1)
				_GUICtrlRichEdit_SetText($Edit2, String($data))
				_ProgressSetComplete('crypt')
			EndIf
		Case "Decrypt"
			If $readm == '' Or $readp == '' Then
				MsgBox(16 + 4096, $titleMsgBox[2], $TextMsgBox[11],0,$GUIshiphr)
			ElseIf $reade2='' Or $reade2=$Edit2text Then
				MsgBox(4096 + 16, $titleMsgBox[2], $TextMsgBox[12],0,$GUIshiphr)
			Else
				$dat = BinaryToString($reade2)
				$date = _RSA_DeCrypt($dat, $readp, $readm)
				_GUICtrlRichEdit_SetText($Edit1, String($date))
				_ProgressSetComplete('crypt')
			EndIf
	EndSwitch
EndFunc ;==> functions for crypt and decrypt
Func _SaveFileFor()
	Local $pass
	$readch = GUICtrlRead($Checkbox1)
	$reade1 = _GUICtrlRichEdit_GetText($Edit1)
	$reade2 = _GUICtrlRichEdit_GetText($Edit2)
	$readm = GUICtrlRead($modul)
	$reado = GUICtrlRead($openk)
	$readp = GUICtrlRead($private)
	$box1=MsgBox(68,$titleMsgBox[0],$TextMsgBox[7],0,$GUIshiphr)
	$files = FileSaveDialog($OpenSaveFile[2], @DesktopDir, $OpenSaveFile[3]&'(*.ippm)',16,'',$GUIshiphr)
	If @error Then
		;
	Else
		If $box1=6 Then
			$pass=_PasswordEditForCrypt()
			$path = _PathSplit($files, $szDrive, $szDir, $szFName, $szExt)
			$put = $files
			If $path[4] == '' Then
				$put = $files & '.ippm'
			EndIf
			_ProgressSet(10)
			$string = _StringEncrypt(1, $readm&@CRLF&$readp, 'The password will be the longest possible not to be hacked!', 10)
			_ProgressSet(60)
			$as = $path[1] & $path[2] & $path[3] & '.ippmkey'
			$rd=_StringEncrypt(1,$reade2,$pass)
			_ProgressSet(80)
			FileWrite($put, $rd)
			FileWrite($as, $string)
			_ProgressSetComplete('save')
		ElseIf $box1=7 Then
			$path = _PathSplit($files, $szDrive, $szDir, $szFName, $szExt)
			$put = $files
			If $path[4] == '' Then
				$put = $files & '.ippm'
			EndIf
			_ProgressSet(10)
			$string = _StringEncrypt(1, $readm&@CRLF&$readp, 'The password will be the longest possible not to be hacked!', 10)
			_ProgressSet(70)
			$as = $path[1] & $path[2] & $path[3] & '.ippmkey'
			FileWrite($put, $reade2)
			FileWrite($as, $string)
			_ProgressSetComplete('save')
		EndIf
	EndIf
EndFunc ;==> functions for save data crypt
Func _ProgressSet($proc)
	GUICtrlSetData($Progress,$proc)
	_GUICtrlStatusBar_SetText($StatusBar,$ProgressText[0]&$proc&"%",1)
EndFunc
Func _ProgressSetComplete($op)
	GUICtrlSetData($Progress,100)
	Switch $op
		Case 'open'
			_GUICtrlStatusBar_SetText($StatusBar,$ProgressText[1],1)
	    Case 'save'
			_GUICtrlStatusBar_SetText($StatusBar,$ProgressText[2],1)
		Case 'crypt'
			_GUICtrlStatusBar_SetText($StatusBar,$ProgressText[3],1)
	EndSwitch
EndFunc
Func _OpenFileFor()
	Local $debug=1,$Directory
	If $openkey = 1 Then
		$filekey = FileOpenDialog($OpenSaveFile[0], @DesktopDir, $OpenSaveFile[1]&'(*.ippmkey)',1,'',$GUIshiphr)
		If @error Then
			;
		Else
			$t = _StringEncrypt(0, FileRead($filekey), 'The password will be the longest possible not to be hacked!', 10)
			_ProgressSet(60)
			$kluch = StringSplit($t,@CRLF,2)
			GUICtrlSetData($modul, $kluch[0])
			GUICtrlSetData($private, $kluch[2])
			GUICtrlSetData($openk,"")
			$openkey = 0
			_ProgressSetComplete('open')
		EndIf
	ElseIf $openkey = 0 Then
		$file = FileOpenDialog($OpenSaveFile[4], @DesktopDir, $OpenSaveFile[3]&'(*.ippm)',1,"",$GUIshiphr)
		If @error Then
			;
		Else
			$split=_PathSplit($file,$szDrive, $szDir, $szFName, $szExt)
			$Directory=$split[1]&$split[2]
			$filekey = FileOpenDialog($OpenSaveFile[4], $Directory,$OpenSaveFile[1]&'(*.ippmkey)',1,'',$GUIshiphr)
			If @error Then
				;
			Else
				$rs=FileReadLine($file,1)
				$who=StringLeft($rs,2)
				If $who=="0x" Then
					$dats = FileRead($file)
					_ProgressSet(10)
					$t = _StringEncrypt(0, FileRead($filekey), 'The password will be the longest possible not to be hacked!', 10)
					_ProgressSet(70)
					$kluch=StringSplit($t,@CRLF,2)
					_GUICtrlRichEdit_SetText($Edit2,$dats)
					GUICtrlSetData($modul, $kluch[0])
					GUICtrlSetData($private, $kluch[2])
					GUICtrlSetData($openk,'')
					_ProgressSetComplete('open')
				Else
					$ps=_PasswordEditForCrypt()
					$dats = FileRead($file)
					_ProgressSet(10)
					$t = _StringEncrypt(0, FileRead($filekey), 'The password will be the longest possible not to be hacked!', 10)
					_ProgressSet(70)
					$kluch=StringSplit($t,@CRLF,2)
					$datq=_StringEncrypt(0,$dats,$ps)
					_GUICtrlRichEdit_SetText($Edit2, $datq)
					GUICtrlSetData($modul, $kluch[0])
					GUICtrlSetData($private, $kluch[2])
					GUICtrlSetData($openk,'')
					_ProgressSetComplete('open')
				EndIf
			EndIf
		EndIf
	EndIf
EndFunc ;==> functions for open crypt file for RSAcrypt
Func _exit()
	xskinanimate($GUIshiphr, '', 13)
	_GUICtrlStatusBar_Destroy($StatusBar)
	_GUICtrlRichEdit_Destroy($Edit1)
	_GUICtrlRichEdit_Destroy($Edit2)
	GUIDelete($GUIshiphr)
	DirRemove(@ScriptDir&"\skins", 1)
	_GUIUnInitSkin()
	FileDelete(@ScriptDir&"\SkinCrafter.dll")
EndFunc ;==> Exit GUI RSAcrypt and close handle dll and delete dir skins
Func WM_SETCURSOR($hWnd, $Msg, $wParam, $lParam)
	Local $aInfo,$state=BitShift($lParam,16)
	Switch $hWnd
		Case $GUIshiphr
			Switch $wParam
				Case $Edit1
					Local $pos=MouseGetPos()
					If $state=516 Then
						$trigger=$Edit1
						_GUICtrlMenu_TrackPopupMenu($hmenu,$GUIshiphr,$pos[0],$pos[1],1)
						_WinAPI_SetCursor($txtcursor)
						Return 1
					Else
						_WinAPI_SetCursor($txtcursor)
						Return 1
					EndIf
				Case $Edit2
					Local $pos=MouseGetPos()
					If $state=516 Then
						$trigger=$Edit2
						_GUICtrlMenu_TrackPopupMenu($hmenu,$GUIshiphr,$pos[0],$pos[1],1)
						_WinAPI_SetCursor($txtcursor)
						Return 1
					Else
						_WinAPI_SetCursor($txtcursor)
						Return 1
					EndIf
			EndSwitch
			$aInfo = GUIGetCursorInfo($GUIshiphr)
			If $aInfo[4]=0 Then
				If $aInfo[2] Then
					_WinAPI_SetCursor($sendcursor)
					Return 1
				Else
					_WinAPI_SetCursor($normalcursor)
					Return 1
				EndIf
			EndIf
			Switch $aInfo[4]
				Case $Group1,$Group2,$MenuItem2,$Progress
					If $aInfo[2] Then
						_WinAPI_SetCursor($sendcursor)
						Return 1
					Else
						_WinAPI_SetCursor($normalcursor)
						Return 1
					EndIf
				Case $modul,$private,$openk
					_WinAPI_SetCursor($txtcursor)
					Return 1
				Case $openf,$genkey,$crypt,$decrypt,$save,$Delete2,$Delete1,$exit,$Checkbox1
					_WinAPI_SetCursor($sendcursor)
					Return 1
			EndSwitch
		Case $PasswordPOPUP
			$aInfo=GUIGetCursorInfo($PasswordPOPUP)
			If $aInfo[4]=0 Then
				If $aInfo[2] Then
					_WinAPI_SetCursor($sendcursor)
					Return 1
				Else
					_WinAPI_SetCursor($normalcursor)
					Return 1
				EndIf
			EndIf
			Switch $aInfo[4]
				Case $editpas
					_WinAPI_SetCursor($txtcursor)
					Return 1
				Case $Label1
					If $aInfo[2] Then
						_WinAPI_SetCursor($sendcursor)
						Return 1
					Else
						_WinAPI_SetCursor($normalcursor)
						Return 1
					EndIf
		    	Case $pas,$ExitPopup, $CheckPassword
					_WinAPI_SetCursor($sendcursor)
					Return 1
			EndSwitch
	EndSwitch
EndFunc ;==> set cursor for element Window RSAcrypt
#endregion end internal function