Здравствуйте.
Совсем недавно начал изучать AutoIt, и в первой же задаче столкнулся с проблемами:
Это мой скрипт:
Мне необходимо вот что: в первом окне я задаю некие параметры для копирования файлов на удаленные компьютеры. далее после нажатия кнопки "Начать копирование" первое окно закрывается, открывается второе и на нем отображается инофрмация об успешности или ошибках копирования, а также о завершении задачи (плюс всплывающее сообщение в системной панели).
Вот что не получается:
- Как реализовать работу с несколькими окнами? Msgbox и SplashTextOn не предлагайте - это не подходит. Возможен вариант работы в одном окне, но я не знаю как это сделать.
- Не совсем разобрался с проверкой папки на наличие файлов (мой код в скрипте некорректно работает). Если поможете в этом, буду признателен.
- Представленный мной код явно выглядит коряво. я еще не разбирался с массивами и функциями, так что если есть предложения по оптимизации, буду рад выслушать.
Совсем недавно начал изучать AutoIt, и в первой же задаче столкнулся с проблемами:
Это мой скрипт:
Код:
; Подключение модулей
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
;Переменная папки-исходника
$Folder_Path = "C:\Temp"
;Переменная папки назначения - Татьяна
$Folder_Path_Tatyana = "D:\Temp\Татьяна"
;Переменная папки назначения - Белла
$Folder_Path_Bella = "D:\Temp\Белла"
;Переменная папки назначения - Лариса
$Folder_Path_Larisa = "D:\Temp\Лариса"
;Переменная папки назначения - Алина
$Folder_Path_Alina = "D:\Temp\Алина"
; Создание окна
GUICreate("Копирование базы", 400, 200, -1, -1) ; Главное окно
GUISetIcon("C:\Windows\System32\shell32.dll", -131) ; Указание иконки окна
GUISetFont(10, 400, 0, "Microsoft Sans Serif") ; Параметры шрифта
; Кнопка выбора папки
$Path_Button = GUICtrlCreateButton('-', 359, 27, 26, 26, $BS_ICON)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()
; Кнопка "Начать копирование"
$Start_Copy = GUICtrlCreateButton("Начать копирование", 143, 165, 251, 25)
; Чекбокс "Таня"
$Check_Tatyana = GUICtrlCreateCheckbox("Татьяна", 22, 91, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
; Чекбокс "Белла"
$Check_Bella = GUICtrlCreateCheckbox("Белла", 22, 115, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
; Чекбокс "Лариса"
$Check_Larisa = GUICtrlCreateCheckbox("Лариса", 22, 139, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
; Чекбокс "Алина"
$Check_Alina = GUICtrlCreateCheckbox("Алина", 22, 162, 97, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
; Рамка назначения копирования
$Border_Output = GUICtrlCreateGroup("Куда копировать", 8, 69, 129, 121)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
; Путь к папке
$Path_Input = GUICtrlCreateInput($Folder_Path, 16, 28, 337, 24)
GUICtrlSetState(-1, $GUI_DISABLE) ; Делаем поле "Только для чтения"
GUICtrlSetLimit(-1, 250) ; Длина строки
GUICtrlSetFont(-1, 10, 400, 0, "Verdana") ; Параметры шрифта
; Рамка указания папки
$Border_Path = GUICtrlCreateGroup("Откуда копировать", 8, 8, 385, 57)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
; Рамка описания
$Border_Content = GUICtrlCreateGroup("Примечание", 144, 69, 249, 89)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
; Текст описания
$Text_Content_001 = GUICtrlCreateLabel("Данная программа копирует базу", 153, 90, 230, 20)
$Text_Content_002 = GUICtrlCreateLabel("из указанной выше папки", 153, 108, 231, 20)
$Text_Content_002 = GUICtrlCreateLabel("на сервера всех филиалов.", 153, 128, 230, 20)
; Параметр вывода экрана поверх всех окон
GUISetState(@SW_SHOW)
While 1
; Проверка нажатий клавиш
$hMsg = GUIGetMsg()
Select
; Закрытие окна программы
Case $hMsg = $GUI_EVENT_CLOSE
Exit
; Нажата кнопка выбора каталога
Case $hMsg = $Path_Button
$Folder_Input = FileSelectFolder('Окуда копировать базу', $Folder_Path, -1, @ScriptDir)
; Если пользователь не нажал отмену или не закрыл окно выбора каталога, то заносим полученный путь в поле ввода
If $Folder_Input <> '' Then GUICtrlSetData($Path_Input, $Folder_Input)
; Проверка наличия файлов в папке
$search = FileFindFirstFile($Folder_Input & "\*.*") ; Поиск первого файла в папке
If $search = -1 Then
MsgBox(16, "Ошибка", "В указанной папке: " & $Folder_Input & " нет файлов!" & @CRLF & @CRLF & "Выберите другую папку.")
EndIf
; Нажата кнопка копирования файлов
Case $hMsg = $Start_Copy
; Проверка наличия файлов в папке перед началом копирования
$search = FileFindFirstFile($Folder_Input & "\*.*") ; Поиск первого файла в папке
If $search = -1 Then
MsgBox(16, "Ошибка", "В указанной папке: " & $Folder_Input & " нет файлов!" & @CRLF & @CRLF & "Программа будет принудительно завершена.")
Exit
EndIf
; Закрытие главного окна
GUISetState(@SW_HIDE)
; Берем путь папки-исходника
$sFolder = GUICtrlRead($Path_Input)
; Копирование - Татьяна - если отмечено
If GUICtrlRead($Check_Tatyana) = 1 Then
; Здесь необходимо открыть окно, где отобразить процесс копирования
EndIf
; Копирование - Белла - если отмечено
If GUICtrlRead($Check_Bella) = 1 Then
; Здесь необходимо открыть окно, где отобразить процесс копирования
EndIf
; Копирование - Лариса - если отмечено
If GUICtrlRead($Check_Larisa) = 1 Then
; Здесь необходимо открыть окно, где отобразить процесс копирования
EndIf
; Копирование - Алина - если отмечено
If GUICtrlRead($Check_Alina) = 1 Then
; Здесь необходимо открыть окно, где отобразить процесс копирования
EndIf
; Вывод сообщений об окончании копирования
TrayTip("Копирование баз завершено", "Не забудьте провести индексацию", 7, 1)
MsgBox(64, "Копирование баз", "Копирование файлов завершено." & @CRLF & "Необходимо провести индексацию на указанных ранее серверах.")
WinClose("Копирование баз", "")
EndSelect
WEnd
Мне необходимо вот что: в первом окне я задаю некие параметры для копирования файлов на удаленные компьютеры. далее после нажатия кнопки "Начать копирование" первое окно закрывается, открывается второе и на нем отображается инофрмация об успешности или ошибках копирования, а также о завершении задачи (плюс всплывающее сообщение в системной панели).
Вот что не получается:
- Как реализовать работу с несколькими окнами? Msgbox и SplashTextOn не предлагайте - это не подходит. Возможен вариант работы в одном окне, но я не знаю как это сделать.
- Не совсем разобрался с проверкой папки на наличие файлов (мой код в скрипте некорректно работает). Если поможете в этом, буду признателен.
- Представленный мной код явно выглядит коряво. я еще не разбирался с массивами и функциями, так что если есть предложения по оптимизации, буду рад выслушать.