Что нового

FTP Client v1.4 - FTP клиент на AutoIt

sss

Продвинутый
Сообщения
332
Репутация
96
AutoIt: 3.3.6.1
Версия: 1.4

Категория: Файловая система, Разное

Описание:
Собственно первая моя публикация в этот раздел). Прога - FTP клиент (как FileZilla, также такая фича есть в Total Commander, больше не помню). Преимущества - маленький вес (442 кб скомпилированный), простота работы (запустил, указал IP логин и пароль и все). Выполняет все основные функции - скачка\закачка, создание\удаление папки, удаление файлов, навигация. Может запоминать логин, ип и пароль - пишет инфу в реестре, пароль зашифрован. Есть пара настроек - запоминание, авто-логин (запустил прогу и сразу на сервере, берет данные из реестра которые были туда сохранены). Для удобства есть контекстное меню. В принципе, больше и нет ничего) Также добавлю закачку\скачку нескольких файлов\папок. Делал для себя, может кому пригодится.

Код:
Код:
#include <ButtonConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <myFTPEx.au3>
#include <GUIListbox.au3>
#include <GuiStatusBar.au3>
#include <String.au3>
#include <Array.au3>

#Region Объявление переменных
Local $StatusBar_parts_array[3] = [100, 350, -1]
Local $StatusBar_text_array[3] = ['Готово.', 'FTP Client on AutoIt', 'www.autoit-script.ru']
$username_startup = ''
$password_startup = ''
$ip_startup = ''
$username_checked = 0
$password_checked = 0
$passive_checked = 0
$ip_checked = 0
$i_refresh_count = 1
#EndRegion Объявление переменных

#Region Блок запоминания - инициализация
$reg_remember_username_confirm = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberUsername')
If $reg_remember_username_confirm = 1 Then
	$username_checked = 1
	$username_startup = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Username')
EndIf
$reg_remember_password_confirm = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberPassword')
If $reg_remember_password_confirm = 1 Then
	$password_checked = 1
	$password_startup = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Password')
	$password_startup = _StringEncrypt(0, $password_startup, 'FTP Client pass 7359428 OoO', 1)
EndIf
$reg_remember_ip_confirm = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberIP')
If $reg_remember_ip_confirm = 1 Then
	$ip_checked = 1
	$ip_startup = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'IpAddress')
EndIf
$reg_remember_passive = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Passive')
If $reg_remember_passive = 1 Then
	$passive_checked = 1
EndIf
#EndRegion Блок запоминания - инициализация

#Region ### START Koda GUI section ### Login
$Form1 = GUICreate("FTP Server Client on AutoIt- Login", 277, 232, 413, 185)
$Label1 = GUICtrlCreateLabel("FTP Server Client on AutoIt v1.4", 8, 8, 246, 17)
$user_name_field = GUICtrlCreateInput($username_startup, 8, 96, 257, 21)
GUICtrlSetTip(-1, "Введите сюда имя пользователя (логин).")
$Label2 = GUICtrlCreateLabel("Имя пользователя", 8, 80, 100, 15)
$Label3 = GUICtrlCreateLabel("Пароль (опционально)", 8, 120, 117, 15)
$user_pass_field = GUICtrlCreateInput($password_startup, 8, 136, 257, 21, BitOR($ES_PASSWORD, $ES_AUTOHSCROLL))
GUICtrlSetTip(-1, "Введите сюда пароль.")
$login = GUICtrlCreateButton("Войти на сервер", 8, 200, 259, 25, $WS_GROUP)
GUICtrlSetTip(-1, "Войти на сервер, используя введенные данные.")
$remember_name = GUICtrlCreateCheckbox("Запомнить имя", 8, 160, 113, 17)
GUICtrlSetTip(-1, "Имя пользователя сохранится, и Вам не придется писать его в следующий раз. Можно отключить в Настройках.")
$remember_pass = GUICtrlCreateCheckbox("Запомнить пароль", 128, 160, 137, 17)
GUICtrlSetTip(-1, "Пароль сохранится, и Вам не придется писать его в следующий раз. Хранится в зашифрованном виде. Можно отключить в Настройках.")
$Label4 = GUICtrlCreateLabel("IP адрес", 8, 24, 47, 15)
$ip_address_field = GUICtrlCreateInput($ip_startup, 8, 40, 257, 21)
GUICtrlSetTip(-1, "Введите сюда IP-адрес сервера..")
$remember_ip = GUICtrlCreateCheckbox("Запомнить IP адрес", 8, 64, 145, 17)
GUICtrlSetTip(-1, "IP-адрес сохранится, и Вам не придется писать его в следующий раз. Можно отключить в Настройках.")
$Checkbox_passive = GUICtrlCreateCheckbox("Пассивный режим", 8, 176, 257, 17)
GUICtrlSetTip(-1, "Переключает режим подключения на пассивный. Нужно для некоторых FTP-серверов, не поддерживающих активный режим соединения.")
GUISetState(@SW_SHOW)
If $username_checked = 1 Then GUICtrlSetState($remember_name, $GUI_CHECKED)
If $password_checked = 1 Then GUICtrlSetState($remember_pass, $GUI_CHECKED)
If $ip_checked = 1 Then GUICtrlSetState($remember_ip, $GUI_CHECKED)
If $passive_checked = 1 Then GUICtrlSetState($Checkbox_passive, $GUI_CHECKED)
#EndRegion ### END Koda GUI section ### Login

; Далее - если стоит опция АвтоЛогина, скрываем окно и жмем кнопку Войти. Тупо, но работает ))
$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'AutoLogin')
If $check = 1 Then
	WinSetTrans("FTP Server Client on AutoIt- Login", '', 0)
	ControlClick("FTP Server Client on AutoIt- Login", '', '[CLASS:Button; INSTANCE:1]')
EndIf

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE ; крестик на окне логина
			Exit
		Case $login ; кнопка войти на сервер
			$user_name = GUICtrlRead($user_name_field) ; читаем имя и пароль с инпутов
			$user_pass = GUICtrlRead($user_pass_field)
			If GUICtrlRead($remember_name) = 1 Then ; если галка запомнить имя
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberUsername', 'REG_SZ', '1')
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Username', 'REG_SZ', $user_name)
			Else
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberUsername', 'REG_SZ', '0')
			EndIf
			If GUICtrlRead($remember_pass) = 1 Then ; если галка запомнить пароль
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberPassword', 'REG_SZ', '1')
				$user_pass_encoded = _StringEncrypt(1, $user_pass, 'FTP Client pass 7359428 OoO', 1)
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Password', 'REG_SZ', $user_pass_encoded)
			Else
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberPassword', 'REG_SZ', '0')
			EndIf
			If GUICtrlRead($remember_ip) = 1 Then ; если галка запомнить адрес
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberIP', 'REG_SZ', '1')
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'IpAddress', 'REG_SZ', GUICtrlRead($ip_address_field))
			Else
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberIP', 'REG_SZ', '0')
			EndIf
			If GUICtrlRead($Checkbox_passive) = 1 Then ; если галка пассивный режим
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Passive', 'REG_SZ', '1')
				$connect_type = 1
			Else
				RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Passive', 'REG_SZ', '0')
				$connect_type = 0
			EndIf

			$ftp_session = _FTP_Open("FTP Client on AutoIt") ; открываем сессию
			If @error Then
				MsgBox(0, 'FTP Server Client on AutoIt', 'Ошибка связи! Попробуйте соединиться позже.')
			Else
				$ftp_server_ip = GUICtrlRead($ip_address_field) ; читаем адрес
				$ftp_session_connect = _FTP_Connect($ftp_session, $ftp_server_ip, $user_name, $user_pass, $connect_type) ; подключаемся
				If @error Then
					MsgBox(0, 'FTP Server Client on AutoIt', 'Ошибка связи! Попробуйте соединиться позже.')
					Exit
				EndIf
				GUIDelete($Form1) ; удаляем окно логина

;~ 				СОЗДАЕМ ОКНО ПРОСМОТРЩИКА

				$Form2 = GUICreate("FTP Server Client on AutoIt", 469, 448, 263, 157)
				$Label1 = GUICtrlCreateLabel("Папки и файлы на сервере:", 8, 8, 145, 17)
				$list = GUICtrlCreateList("", 8, 40, 449, 266, BitOR($LBS_DISABLENOSCROLL, $WS_BORDER, $WS_HSCROLL, $WS_VSCROLL))
				GUICtrlSetData(-1, "")
				$ftp_file_download = GUICtrlCreateButton("Скачать файл", 8, 312, 147, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Скачать файл с сервера на свой компьютер.")
				$ftp_file_upload = GUICtrlCreateButton("Закачать файл", 160, 312, 147, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Закачать файл со своего компьютера на сервер.")
				$ftp_file_delete = GUICtrlCreateButton("Удалить файл", 312, 312, 147, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Удалить файл с сервера.")
				$disconnect = GUICtrlCreateButton("Отключиться и выйти", 240, 400, 219, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Разорвать соединение и выйти из программы.")
				$settings = GUICtrlCreateButton("Настройки", 8, 400, 219, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Настройки программы.")
				$refresh = GUICtrlCreateButton("Обновить", 8, 344, 147, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Обновить список файлов.")
				$file_md = GUICtrlCreateButton("Создать папку", 160, 344, 146, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Создать папку на сервере.")
				$file_rd = GUICtrlCreateButton("Удалить папку", 312, 344, 146, 25, $WS_GROUP)
				GUICtrlSetTip(-1, "Удалить папку на сервере.")
				$StatusBar = _GUICtrlStatusBar_Create($Form2, $StatusBar_parts_array, $StatusBar_text_array)
				$button_cd_back = GUICtrlCreateButton("На уровень вверх", 8, 24, 219, 17, BitOR($BS_FLAT, $WS_GROUP))
				GUICtrlSetTip(-1, "Вернуться в предыдущую папку.")
				$button_cd = GUICtrlCreateButton("Перейти в папку", 232, 24, 227, 17, $WS_GROUP)
				GUICtrlSetTip(-1, "Перейти в выделенную папку.")
;~ 				СОЗДАЕМ КОНТЕКСТНОЕ МЕНЮ НА ЭЛЕМЕНТЕ ListView
				$contextmenu = GUICtrlCreateContextMenu()
				$list_context = GUICtrlCreateContextMenu($list)
				$context_ftp_folder_cd = GUICtrlCreateMenuItem("Перейти в папку", $list_context)
				$context_ftp_folder_cd_back = GUICtrlCreateMenuItem("Перейти на уровень вверх", $list_context)
				$context_ftp_folder_md = GUICtrlCreateMenuItem("Создать папку", $list_context)
				$context_ftp_folder_rd = GUICtrlCreateMenuItem("Удалить папку", $list_context)
				$context_separator = GUICtrlCreateMenuItem("", $list_context)
				$context_ftp_file_upload = GUICtrlCreateMenuItem("Закачать файл", $list_context)
				$context_ftp_file_download = GUICtrlCreateMenuItem("Скачать файл", $list_context)
				$context_ftp_file_delete = GUICtrlCreateMenuItem("Удалить файл", $list_context)

				GUISetState(@SW_SHOW)
;~ 				НОВЫЙ ГУИ СФОРМИРОВАН
;~              Обновление листа начало
				$ftp_dir_list = _FTP_ListToArrayEx($ftp_session_connect, 0, $INTERNET_FLAG_RELOAD)
				$i = 1
				While 1
					$i = $i + 1
					If Not IsArray($ftp_dir_list) Then ExitLoop
					If $i = $ftp_dir_list[0][0] + 1 Then ExitLoop
					$string = $ftp_dir_list[$i][0]
					If $ftp_dir_list[$i][2] = 16 Then $string = '[ПАПКА] ' & $string
					GUICtrlSetData($list, $string)
				WEnd
				_GUICtrlListBox_SetCurSel($list, 0)
;~              Обновление листа с файлами конец
				While 1 ; цикл окна-просмотрщика
					$nMsg = GUIGetMsg()
					Switch $nMsg
						Case $GUI_EVENT_CLOSE
							Exit
						Case $disconnect
							_FTP_Close($ftp_session)
							Exit
						Case $refresh
							my_Ftp_List_Update()
						Case $ftp_file_upload
							_GUICtrlStatusBar_SetText($StatusBar, "закачиваю...", 0)
							my_FTP_File_Upload()
							_GUICtrlStatusBar_SetText($StatusBar, "Готово.", 0)
						Case $context_ftp_file_upload
							_GUICtrlStatusBar_SetText($StatusBar, "закачиваю...", 0)
							my_FTP_File_Upload()
							_GUICtrlStatusBar_SetText($StatusBar, "Готово.", 0)
						Case $ftp_file_download
							_GUICtrlStatusBar_SetText($StatusBar, "Скачиваю...", 0)
							my_FTP_File_Download()
							_GUICtrlStatusBar_SetText($StatusBar, "Готово.", 0)
						Case $context_ftp_file_download
							_GUICtrlStatusBar_SetText($StatusBar, "Скачиваю...", 0)
							my_FTP_File_Download()
							_GUICtrlStatusBar_SetText($StatusBar, "Готово.", 0)
						Case $ftp_file_delete
							my_FTP_File_Delete()
						Case $context_ftp_file_delete
							my_FTP_File_Delete()
						Case $context_ftp_folder_cd
							my_FTP_Change_Dir()
							my_Ftp_List_Update()
						Case $context_ftp_folder_cd_back
							my_FTP_Change_Dir_Back()
							my_Ftp_List_Update()
						Case $button_cd
							my_FTP_Change_Dir()
							my_Ftp_List_Update()
						Case $button_cd_back
							my_FTP_Change_Dir_Back()
							my_Ftp_List_Update()
						Case $settings
							my_Settings()
						Case $file_md
							my_FTP_DirCreate()
							my_Ftp_List_Update()
						Case $context_ftp_folder_md
							my_FTP_DirCreate()
							my_Ftp_List_Update()
						Case $file_rd
							my_FTP_DirDelete()
							my_Ftp_List_Update()
						Case $context_ftp_folder_rd
							my_FTP_DirDelete()
							my_Ftp_List_Update()
					EndSwitch
				WEnd
			EndIf
	EndSwitch
WEnd


Func my_Ftp_List_Update()
	_GUICtrlListBox_ResetContent($list)
	$ftp_dir_list = _FTP_ListToArrayEx($ftp_session_connect, 0, $INTERNET_FLAG_RELOAD)
	$i = 0
	If Not IsArray($ftp_dir_list) = 0 Then
		While 1
			$i = $i + 1
			If $i = $ftp_dir_list[0][0] + 1 Then ExitLoop
			$string = $ftp_dir_list[$i][0]
			If $ftp_dir_list[$i][2] = 16 Then $string = '[ПАПКА] ' & $string
			GUICtrlSetData($list, $string)
		WEnd
	Else
		GUICtrlSetData($list, 'Нет файлов.')
	EndIf
	_GUICtrlListBox_SetCurSel($list, 0)
EndFunc   ;==>my_Ftp_List_Update
Func my_FTP_File_Upload()
	$def_dir = @DesktopDepth
	$file_local = FileOpenDialog('Выбери файл', $def_dir, 'да любые файлы (*.*)')
	If Not $file_local = '' Then
		$file_path_array = StringSplit($file_local, '\')
		_ArrayReverse($file_path_array)
		$file_remote = InputBox('Название файла', 'Напиши будущее имя файла на сервере', $file_path_array[0])
		If Not $file_remote = '' Then
			_FTP_ProgressUpload($ftp_session_connect, $file_local, $file_remote)
		EndIf
	EndIf
	my_Ftp_List_Update()
EndFunc   ;==>my_FTP_File_Upload
Func my_FTP_File_Download()
	$file_remote = _GUICtrlListBox_GetCurSel($list)
	$file_remote = _GUICtrlListBox_GetText($list, $file_remote)
	If Not $file_remote = 0 Then
		$confirm = MsgBox(BitOR(32, 4), 'Подтверждение', 'Скачать файл ' & $file_remote & ' ?')
		If $confirm = 6 Then
			$def_dir = @DesktopDepth
			$file_local = FileSaveDialog("Выбери куда сохранить", $def_dir, "Да любые (*.*)", 16, $file_remote)
			If Not $file_local = '' Then
				_FTP_ProgressDownload($ftp_session_connect, $file_local, $file_remote)
			EndIf
		EndIf
	EndIf
EndFunc   ;==>my_FTP_File_Download
Func my_FTP_File_Delete()
	$file_remote = _GUICtrlListBox_GetCurSel($list)
	$file_remote = _GUICtrlListBox_GetText($list, $file_remote)
	If Not $file_remote = 0 Then
		$confirm = MsgBox(BitOR(32, 4), 'Подтверждение', 'Удалить файл "' & $file_remote & '" с FTP-сервера?')
		If $confirm = 6 Then
			_FTP_FileDelete($ftp_session_connect, $file_remote)
			my_Ftp_List_Update()
		EndIf
	EndIf
EndFunc   ;==>my_FTP_File_Delete
Func my_FTP_Change_Dir_Back()
	$sDir = _FTP_DirGetCurrent($ftp_session_connect)
	_FTP_DirSetCurrent($ftp_session_connect, '..')
EndFunc   ;==>my_FTP_Change_Dir_Back
Func my_FTP_Change_Dir()
	$dir_remote = _GUICtrlListBox_GetCurSel($list)
	$dir_remote = _GUICtrlListBox_GetText($list, $dir_remote)
	If StringInStr($dir_remote, '[ПАПКА]') Then
		$dir_name = StringTrimLeft($dir_remote, 8)
		_GUICtrlListBox_ResetContent($list)
		_FTP_DirSetCurrent($ftp_session_connect, $dir_name)
	EndIf
EndFunc   ;==>my_FTP_Change_Dir
Func my_FTP_DirCreate()
	$dir_name = InputBox('Название папки', 'Напиши будущее имя папки на сервере', 'Новая папка')
	If Not $dir_name = '' Then
		_FTP_DirCreate($ftp_session_connect, _FTP_DirGetCurrent($ftp_session_connect) & '\' & $dir_name)
	EndIf
EndFunc   ;==>my_FTP_DirCreate
Func my_FTP_DirDelete()
	$dir_remote = _GUICtrlListBox_GetCurSel($list)
	$dir_remote = _GUICtrlListBox_GetText($list, $dir_remote)
	If Not $dir_remote = 0 And StringInStr($dir_remote, '[ПАПКА]') = 1 Then
		$dir_remote = StringTrimLeft($dir_remote, 8)
		$confirm = MsgBox(BitOR(32, 4), 'Подтверждение', 'Удалить папку "' & $dir_remote & '" с FTP-сервера?')
		If $confirm = 6 Then
			$dir_remote = _FTP_DirGetCurrent($ftp_session_connect) & '\' & $dir_remote
			_FTP_DirDelete($ftp_session_connect, $dir_remote)
		EndIf
	EndIf
EndFunc   ;==>my_FTP_DirDelete

Func my_Settings() ; настройки - окно
	WinSetState("FTP Server Client on AutoIt", '', @SW_HIDE)
	$form_settings = GUICreate("Настройки", 309, 365, 192, 124)
	$sgroup_settings_main = GUICtrlCreateGroup("Основные", 8, 16, 289, 193)
	$settings_remember_name = GUICtrlCreateCheckbox("Запоминать имя", 16, 32, 113, 17)
	GUICtrlSetTip(-1, "Имя пользователя сохранится, и Вам не придется писать его в следующий раз.")
	$settings_remember_pass = GUICtrlCreateCheckbox("Запоминать пароль", 136, 32, 145, 17)
	GUICtrlSetTip(-1, "Пароль сохранится, и Вам не придется писать его в следующий раз.Хранится в зашифрованном виде.")
	$settings_remember_ip = GUICtrlCreateCheckbox("Запоминать IP-адрес сервера", 16, 48, 273, 17)
	GUICtrlSetTip(-1, "IP-адрес сохранится, и Вам не придется псать его в следующий раз.")
	$settings_auto_login = GUICtrlCreateCheckbox("Подключаться к серверу сразу, брать имя и пароль из сохраненных", 16, 72, 273, 25, BitOR($BS_CHECKBOX, $BS_AUTOCHECKBOX, $BS_MULTILINE, $WS_TABSTOP))
	$settings_new_name = GUICtrlCreateCheckbox("Сохранить новое имя:", 16, 130, 129, 20)
	$settings_new_name_input = GUICtrlCreateInput("", 168, 128, 121, 21)
	GUICtrlSetState(-1, $GUI_DISABLE)
	$settings_new_ip = GUICtrlCreateCheckbox("Сохранить новый IP", 16, 110, 145, 18)
	$settings_new_ip_input = GUICtrlCreateInput("", 168, 105, 121, 21)
	GUICtrlSetState(-1, $GUI_DISABLE)
	$settings_new_pass = GUICtrlCreateCheckbox("Сохранить новый пароль:", 16, 152, 145, 20)
	$settings_new_pass_input = GUICtrlCreateInput("", 168, 150, 121, 21, BitOR($ES_PASSWORD, $ES_AUTOHSCROLL))
	GUICtrlSetState(-1, $GUI_DISABLE)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$settings_advanced = GUICtrlCreateGroup("Дополнительно", 8, 216, 289, 97)
	$settings_passive = GUICtrlCreateCheckbox("Использовать пассивный режим", 16, 240, 257, 17)
	GUICtrlSetTip(-1, "Переключает режим подключения на пассивный. Нужно для некоторых FTP-серверов, не поддерживающих активный режим соединения.")
	GUICtrlCreateLabel("При изменении надо перезайти на сервер", 16, 256, 220, 17)
	GUICtrlCreateGroup("", -99, -99, 1, 1)
	$settings_button_ok = GUICtrlCreateButton("ОК", 8, 328, 131, 25, $WS_GROUP)
	$settings_button_cancel = GUICtrlCreateButton("Отмена", 152, 328, 147, 25, $WS_GROUP)

	$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberUsername')
	If $check = 1 Then GUICtrlSetState($settings_remember_name, $GUI_CHECKED)
	$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberPassword')
	If $check = 1 Then GUICtrlSetState($settings_remember_pass, $GUI_CHECKED)
	$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'AutoLogin')
	If $check = 1 Then GUICtrlSetState($settings_auto_login, $GUI_CHECKED)
	$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberIp')
	If $check = 1 Then GUICtrlSetState($settings_remember_ip, $GUI_CHECKED)
	$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Username')
	GUICtrlSetData($settings_new_name_input, $check)
	$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'IpAddress')
	GUICtrlSetData($settings_new_ip_input, $check)
	$check = RegRead("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Passive')
	If $check = 1 Then GUICtrlSetState($settings_passive, $GUI_CHECKED)


	GUISetState(@SW_SHOW)
	While 1
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $settings_button_cancel
				GUIDelete($form_settings)
				WinSetState("FTP Server Client on AutoIt", '', @SW_SHOW)
				ExitLoop
			Case $settings_new_name
				$check = GUICtrlRead($settings_new_name)
				If $check = 1 Then
					GUICtrlSetState($settings_new_name_input, $GUI_ENABLE)
				Else
					GUICtrlSetState($settings_new_name_input, $GUI_DISABLE)
				EndIf
			Case $settings_new_pass
				$check = GUICtrlRead($settings_new_pass)
				If $check = 1 Then
					GUICtrlSetState($settings_new_pass_input, $GUI_ENABLE)
				Else
					GUICtrlSetState($settings_new_pass_input, $GUI_DISABLE)
				EndIf
			Case $settings_new_ip
				$check = GUICtrlRead($settings_new_ip)
				If $check = 1 Then
					GUICtrlSetState($settings_new_ip_input, $GUI_ENABLE)
				Else
					GUICtrlSetState($settings_new_ip_input, $GUI_DISABLE)
				EndIf
			Case $settings_button_ok
				$check = GUICtrlRead($settings_new_name)
				If $check = 1 Then
					$new_name = GUICtrlRead($settings_new_name_input)
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Username', 'REG_SZ', $new_name)
				EndIf
				$check = GUICtrlRead($settings_new_pass)
				If $check = 1 Then
					$new_pass = _StringEncrypt(1, GUICtrlRead($settings_new_pass_input), 'FTP Client pass 7359428 OoO', 1)
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Password', 'REG_SZ', $new_pass)
				EndIf
				$check = GUICtrlRead($settings_remember_name)
				If $check = 1 Then
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberUsername', 'REG_SZ', '1')
				Else
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberUsername', 'REG_SZ', '0')
				EndIf
				$check = GUICtrlRead($settings_remember_pass)
				If $check = 1 Then
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberPassword', 'REG_SZ', '1')
				Else
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberPassword', 'REG_SZ', '0')
				EndIf
				$check = GUICtrlRead($settings_auto_login)
				If $check = 1 Then
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'AutoLogin', 'REG_SZ', '1')
				Else
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'AutoLogin', 'REG_SZ', '0')
				EndIf
				$check = GUICtrlRead($settings_remember_ip)
				If $check = 1 Then
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberIp', 'REG_SZ', '1')
				Else
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'RememberIp', 'REG_SZ', '0')
				EndIf
				$check = GUICtrlRead($settings_new_ip)
				If $check = 1 Then
					$new_ip = GUICtrlRead($settings_new_ip_input)
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'IpAddress', 'REG_SZ', $new_ip)
				EndIf
				$check = GUICtrlRead($settings_passive)
				If $check = 1 Then
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Passive', 'REG_SZ', '1')
				Else
					RegWrite("HKEY_CURRENT_USER\SOFTWARE\FTP Client on AutoIt", 'Passive', 'REG_SZ', '0')
				EndIf
				GUIDelete($form_settings)
				WinSetState("FTP Server Client on AutoIt", '', @SW_SHOW)
				ExitLoop
		EndSwitch
	WEnd
EndFunc   ;==>my_Settings

Файл(ы): myFTPEx.au3 - Include, архив с программой - AU3+EXE+Changelog.


Скриншот(ы):



Первая версия
24.02.11 - v1.2:
Добавлено: режим подключения - пассивный\активный
Исправлено: баги с запоминанием IP
25.02.11 - v1.3:
Добавлено: иконка
Добавлено: полосы для прокрутки
Изменено: надписи - убрано ShaDo's...
Изменено: ветки реестра
Убрано: лишние файлы Include
Использован Tidy AutoIt Source
26.02.11 - v1.4:
Изменено: ветки реестра
Исправлено: мелкие баги с обновлением файл-листа
Изменено: новый алгоритм шифрования пароля
Убрано: лишний Include файл - _xor.au3
Добавлено: всплывающие подсказки

Источник: http://autoit-script.ru/index.php?topic=3870
Автор(ы):Sky-WaLkeR, а также все кто косвенно помогал мне на форуме с _FTP... функциями)
Обновил шапку, Версия программы - 1.4, см. историю версий. Внес советы Yashied'а!
 

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Re: FTP Client - клиент на AutoIt

А где взять myFTPEx.au3 и _XOR.au3 ??????????????????
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Re: FTP Client - клиент на AutoIt

Блин, точно, забыл про них. Во вложении смотри.
P.S: Добавил в шапку...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,722
Re: FTP Client - клиент на AutoIt

Неплохо бы было добавить выбор между активным и пассивным режимом.
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Re: FTP Client - клиент на AutoIt

Обновил шапку и программу, добавил возможность выбора режима подключения - активный\пассивный. Жду еще чего-нибудь что можно вставить в прогу) В планах - иконка и возможность закачки нескольких файлов сразу.
 

Arei

Скриптер
Сообщения
938
Репутация
115
Re: FTP Client v1.2 - FTP клиент на AutoIt

скажи случайно между ними нельзя настроить передачу видеопотока?
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Re: FTP Client v1.2 - FTP клиент на AutoIt

Arei
Вроде нет. FTP - File Transfer Protocol — протокол передачи файлов (Випипедия).
Вроде VLC Media Player это умеет...
Vlc media player <...> может быть использован в качестве сервера для трансляции потока по сети c использованием протоколов IPv4 или IPv6, при условии достаточной пропускной способности.
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Re: FTP Client v1.3 - FTP клиент на AutoIt

Обновил шапку. Версия 1.3:
Добавлено: иконка
Добавлено: полосы для прокрутки
Изменено: надписи - убрано ShaDo's...
Изменено: ветки реестра
Убрано: лишние файлы Include
Использован Tidy AutoIt Source
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,722
Re: FTP Client v1.3 - FTP клиент на AutoIt

Да, сейчас хорошо работает. Но почему вы решили хранить настройки в HKLM вместо HKCU? Не у всех пользователей есть права на запись в этот раздел. Более того, если вы будите хранить настройки в HKCU, то каждый пользователь может настроить вашу утилиту под себя.

И еще, из всех способов шифрования данных, вы вбрали самый дурацкий. Чем плоха _StringEncrypt(). Да и не придется таскать за собой _xor.au3.

А в остальном, мне очень понравилась ваша работа.

+1
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Re: FTP Client v1.3 - FTP клиент на AutoIt

спасибо за хороший отзыв, рад что понравилось! Насчет HKCU - переделаю в след. версии, спасибо за идею. Насчет _xor - раньше не знал о _StringEncrypt, была мысль что надо XOR выкидывать, недавно попрактиковался с ней, добавлю в след. версии.
P.S: след. версия планируется сегодня )
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Обновил шапку. Версия программы - 1.4. Внес советы Yashied'a, в планах добавление меню и сворачивание в трей.
Версия 1.4:
Изменено: ветки реестра
Исправлено: мелкие баги с обновлением файл-листа
Изменено: новый алгоритм шифрования пароля
Убрано: лишний Include файл - _xor.au3
Добавлено: всплывающие подсказки
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,321
Sky-WaLkeR
Скажите, а в чем разница между штатной FTPEx.au3 (74 532 б) и myFTPEx.au3 (74 538 б)?

ИМХО, прежде чем делать записи в реестре, неплохо было бы спросить пользователя.
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
Разница между FTPEx.au3 и mFTPEx.au3 минимальна - русские слова "скачиваю" и "закачиваю". Насчет реестра - мне кажется, оптимальный вариант, 5-10 записей машину не загрузят.
В новой версии сильно переделаю интерфейс - планирую сделать два окна - локальные файлы\удаленные файлы. Добавлю иконки папок\файлов для удобства восприятия. Попробую все-таки реализовать закачку нескольких файлов на сервер.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,722
Sky-WaLkeR сказал(а):
Попробую все-таки реализовать закачку нескольких файлов на сервер.

Во-первых, это будет медленнее, чем последовательно по одному. Во-вторых, не все FTP сервера поддерживают закачку нескольких файлов одновременно, а точнее несколько подключений с одного IP. Вроде бы даже FileZilla качает последовательно, просто очередь формирует.
 
Автор
sss

sss

Продвинутый
Сообщения
332
Репутация
96
А я так и хочу - очередью. Так будет и быстрее, и удобнее, и проще.
 

Denis585

Новичок
Сообщения
4
Репутация
0
подскажите как скачать по фтп папку с подкаталогами ??
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
FTPEx целый раздел справки, совсем не много прочитать и все
 

Denis585

Новичок
Сообщения
4
Репутация
0
читал ранее, непонятно как рекурсивно скачать папку с подкаталогами
 

AZJIO

Меценат
Меценат
Сообщения
2,822
Репутация
1,170
Denis585 [?]
там же нет этой функции. Оно же высший пилотаж, сначала AutoIt3 выучить, по-общаться года 4 на форуме. Разобрать функции рекурсивного поиска по деталям, вникнув в то как оно работает. Ну а потом просто вместо вызовов следующего файла подставить имя функции запроса файла с FTP и оно само заработает, как будто ничего и не делал.

А реально мы здесь офтопим, тут обсуждается конкретная программа, а не вопросы для себя, для этого есть соответствующий раздел AutoIt для новичков.
 

Denis585

Новичок
Сообщения
4
Репутация
0
Re: FTP Client - клиент на AutoIt

Yashied сказал(а):
Неплохо бы было добавить выбор между активным и пассивным режимом.

Неплохо ?
А как же без докачки? Обрывы имеют место быть всегда.

И забегая вперед. Если при обрыве попытаться повторно запустить функцию _FTP_FileGet - почему загрузка тупо вешается?
И еще, все пересмотрел - докачки данных на AutoIt'е НЕТУ.
У меня получается докачка работает только нижеуказанным способом, я бы и обрадовался, НО это скорость загрузки потрясает:


#include <FTPEx.au3>
#include <Array.au3>
#include <File.au3>
#include <Encoding.au3>

Global $conn, $open_ftp, $FtpFileList, $Reload = "False", $error = "False"
Global $FileDownload, $tLfilseSize, $tFTPFileSize, $s_TempFile, $dwError, $szMessage, $FTP_File_Read

_FTP_Conn()
_FTP_Download()

Func _FTP_Conn()
Do
$open_ftp = _ftp_open("FTP", 1, "", "")
$conn = _ftp_connect($open_ftp, "localhost", "admin", "пароль", 1, $INTERNET_DEFAULT_FTP_PORT);, $INTERNET_SERVICE_FTP)
_ftp_dirsetcurrent($conn, "/")
$error = @error
If $error <> 0 Then _FTP_FileClose($open_ftp)
Until $error = 0
If $error = 0 Then
$FtpFileList = _FTP_ListToArrayEx ($conn, 0, $INTERNET_FLAG_RELOAD)
$FTP_Dir = _FTP_DirGetCurrent($conn)
$FTP_File_Open = _FTP_FileOpen($Conn, $FTP_Dir&$FileDownload, $GENERIC_READ, $INTERNET_FLAG_TRANSFER_BINARY)
$FTP_File_Read = _FTP_FileRead($FTP_File_Open, int($tFTPFileSize))
$tFTPFileSize = $FtpFileList[8][1]; Размер
$FileDownload = $FtpFileList[8][0]; Имя файла для скачивания
EndIf
;~ _ArrayDisplay($FtpFileList, "$FtpFileList")
EndFunc

Func _FTP_Download()
While $tFTPFileSize > $tLfilseSize
FileWrite ("C:/2/"&_Encoding_UTF8ToUnicode_API($FileDownload), BinaryToString($FTP_File_Read))
$tLfilseSize = FileGetSize("C:/test/"&_Encoding_UTF8ToUnicode_API($FileDownload))
ConsoleWrite($tLfilseSize/1000&@CRLF)
WEnd
EndFunc

MsgBox (0,"","Загрузка завершена")











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

AZJIO сказал(а):
Denis585 [?]
там же нет этой функции. Оно же высший пилотаж, сначала AutoIt3 выучить, по-общаться года 4 на форуме. Разобрать функции рекурсивного поиска по деталям, вникнув в то как оно работает. Ну а потом просто вместо вызовов следующего файла подставить имя функции запроса файла с FTP и оно само заработает, как будто ничего и не делал.

А реально мы здесь офтопим, тут обсуждается конкретная программа, а не вопросы для себя, для этого есть соответствующий раздел AutoIt для новичков.

ок, с рекурсией разобрался.
При всем уважении (а такое действительно к AZJIO есть) Мне задачу надо было решить в кратчайшие сроки, к сожалению 4 года ни как ждать не мог :smile:
Если бы с докачкой еще решить вопрос все было бы супер супер.
Причем для меня принципиально решить без сторонних программ. Есть один косячек по которым они мне не подходят(я о таких как wget)
Вопрос о докачки ведь относится к обсуждению этой программы.
 
Верх