Что нового

[Автоматизация] Графическое оформление скрипта

Sinel

Новичок
Сообщения
28
Репутация
1
Версия AutoIt: 3.Х

Описание:
Всем привет хочу сделать оформление для моего скрипта но не знаю как юзал форум безуспешно
в общем чтобы примерно все выглядело так



Примечания:
ну и отмете куда вставлять скрипт или подписать чтобы он активировался правильно и тд...
заранее спс при возможности опишите подробно как это все делается дабы в будущем самому делать оформления
 
Автор
S

Sinel

Новичок
Сообщения
28
Репутация
1
и как его использовать и вообще где скачать? я в этом деле новенький объясни что ли
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Sinel сказал(а):
и как его использовать и вообще где скачать? я в этом деле новенький объясни что ли
http://autoit-script.ru/index.php/topic,273.0.html
koda есть в полной версии SciTE, меню Tools
 
Автор
S

Sinel

Новичок
Сообщения
28
Репутация
1
ну скачал а дальше ? проблема не в том через че делать прогу проблема в том что как это все вклеить и оформить нормально
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
Как-то так.
Но не учтен вариант, когда время начала скрипта выпадает на следующие сутки(возможны казусы :D), сам добавляй счетчик суток если нужно.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Date.au3>

$hGUI = GUICreate('Starter', 736, 294, 1476, 138) ; окно программы
$hInTime_1 = GUICtrlCreateInput('HH.MM.SS', 24, 24, 121, 21) ; поле для ввода времени
$hOutTime_1 = GUICtrlCreateInput('', 168, 24, 129, 21, $ES_READONLY) ; поля для вывода времени старта скрипта
$hCombo_1 = GUICtrlCreateCombo('1', 312, 24, 145, 21) ; combobox для выбора числа повторений скрипта
GUICtrlSetData(-1, '2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30', '1') ; варианты повторов
$hCheck_1 = GUICtrlCreateCheckbox('AutoRepeat', 472, 24, 81, 25) ; checkbox для автоповтора скрипта
$hStart_1 = GUICtrlCreateButton('Start 1', 576, 16, 105, 25, $WS_GROUP) ; кнопка старта
Global $iRepeat_1 = 0, $Stop_1 = False ; переменные
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $hStart_1 ; нажата кнопка старт
			$sTime_1 = GUICtrlRead($hInTime_1) ; считываем время
			If StringRegExp($sTime_1, '^\d\d\.\d\d\.\d\d$') Then ; проверяем, что считанная строка соответствует формату: hh.mm.ss
				$aTime_1 = StringSplit(GUICtrlRead($hInTime_1), '.') ; из этой строки получаем массив: 
				$iHour_1 = $aTime_1[1] ; часы
				$iMin_1 = $aTime_1[2] ; минуты
				$iSec_1 = $aTime_1[3] ; секунды
				If GUICtrlRead($hCheck_1) = $GUI_CHECKED Then
					$iRepeat_1 = 0 ; если поставлен флажок "автоповтор", то переменной повтора присваиваем значение 0
				Else
					$iRepeat_1 = GUICtrlRead($hCombo_1) ; иначе считываем количество повторов из combobox
				EndIf
				GUICtrlSetData($hStart_1, 'Stop 1') ; переименовываем кнопку Старт в Стоп
				GUICtrlSetState($hInTime_1, $GUI_DISABLE) ; блокируем поля ввода
				GUICtrlSetState($hCheck_1, $GUI_DISABLE)
				GUICtrlSetState($hCombo_1, $GUI_DISABLE)
				Opt('GUIOnEventMode', 1) ; включение режима OnEvent для возможности прерывания скрипта в любой момент
				$Stop_1 = False ; переменной остановки скрипта присваиваем значение ложь
				GUICtrlSetOnEvent($hStart_1, '_stop') ; назначаем на кнопку "Стоп" функцию _stop
				_main_1($iRepeat_1, $iHour_1, $iMin_1, $iSec_1) ; запуск функции _main с параметрами: число повторов, часы, минуты, секунды
				Opt('GUIOnEventMode', 0) ; по завершении _main отключаем режим OnEvent
				GUICtrlSetData($hStart_1, 'Start 1') ; переименовываем кнопку как было
				GUICtrlSetState($hInTime_1, $GUI_ENABLE) ; разблокируем поля
				GUICtrlSetState($hCheck_1, $GUI_ENABLE)
				GUICtrlSetState($hCombo_1, $GUI_ENABLE)
			Else
				MsgBox(0, 'Error', 'Error in time format!') ; если введенные данные не соответствуют формату "hh.mm.ss" выдаем окошко с ошибкой
			EndIf
		Case $hCheck_1 ; обработка нажатия на chekbox
			If GUICtrlRead($hCheck_1) = $GUI_CHECKED Then
				GUICtrlSetState($hCombo_1, $GUI_DISABLE) ; если нажата - блокируем combobox
			Else
				GUICtrlSetState($hCombo_1, $GUI_ENABLE) ; если галка убрана - разблокируем
			EndIf
	EndSwitch
WEnd

Func _main_1($iReapeatCounter, $iHour, $iMin, $iSec) ; функция _main
	$iCounter = 0 ; счетчик для подсчета пройденных циклов (пока равен 0)
	_TicksToTime(_TimeToTicks($iHour + @HOUR, $iMin + @MIN, $iSec + @SEC), $iHour, $iMin, $iSec)
; функции для работы со временем : первая складывает текущее время с заданным и переводит его в тики
; вторая переводит тики обратно в три переменных

	GUICtrlSetData($hOutTime_1, $iHour & ':' & $iMin & ':' & $iSec) ; выставляем в поле вывода времени запуска получившееся время старта скрипта
	ConsoleWrite('-TIME WAITING-' & @CRLF) ; выдача в консоль
	Do ; цикл ожидания времени начала
		If $Stop_1 Then Return ; проверка не нажата ли кнопка "Стоп", если нажата - выходим
		Sleep(1000); ждем секунду
	Until $iHour - @HOUR <= 0 And $iMin - @MIN <= 0 And $iSec - @SEC <= 0 ; сравнение текущего времени со временем старта, если время пришло - идем дальше
	ConsoleWrite('!START!' & @CRLF) ; выдача в консоль
	Do ; основной цикл
		;
		;Здесь идет сам скрипт
		ConsoleWrite('working...' & $iCounter & @CRLF)
		Sleep(500)
		;
		$iCounter += 1 ; приращение для счетчика количества повторов
	Until $iReapeatCounter = $iCounter Or $Stop_1 = True ; будет выполняться пока счетчик не совпадет с заданным количеством повторов или не будет нажата кнопка "Стоп"
; если выбран режим автоповтора, то данный цикл может завершиться только по нажатию кнопки "Стоп"
	ConsoleWrite('+FINISH+' & @CRLF); выдача в консоль
	GUICtrlSetData($hOutTime_1, '') ; очищаем поле времени старта скрипта
EndFunc

Func _stop() ; функция остановки по кнопке
	If @GUI_CtrlId = $hStart_1 Then
		$Stop_1 = True
	EndIf
EndFunc
 
Автор
S

Sinel

Новичок
Сообщения
28
Репутация
1
а вкратце можешь описать как добавить строки и вообще редактировать твой скрипт?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
Sinel сказал(а):
а вкратце можешь описать как добавить строки и вообще редактировать твой скрипт?
Добавил кучу подробнейших комментариев в свой код - разбирайся.

В AutoIt есть ограничение - он работает только в один поток, так что одновременно твои функции не смогут работать.
Если тебя это устраивает - просто дублируй элементы управления, меняй их переменные и координаты, потом добавляй обработку.
Если не устраивает - делай отдельные скрипты для каждой функции, компилируй их, и запускай хоть все одновременно.

В общем опиши какие функции хочешь таким образом выполнять, а там посмотрим.
 
Автор
S

Sinel

Новичок
Сообщения
28
Репутация
1
спасибо за описание)
:scratch: а если как вариант сделать 2-3-4-5... скриптов а потом забить все это допустим в ехе и использовать втое оформление возможно будет чтобы было все в одном окне?
или просто в одной папке и при выборе определенной функции просто запускался нужный скрипт то есть как бы они будут отдельно просто это графическое оформление будет тоже скриптом только будет работать посредством запуска других скриптов а не как бот
Возможно провернуть такое ?
 
Автор
S

Sinel

Новичок
Сообщения
28
Репутация
1
или еще как теория возможно ли как то написать скрипт 1ин но чтобы он запускался не целиком а по определенным частям ? необходимым мне
Тогда и с кол-вом потоков проблем не будет имхо
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
Способ через отдельные exe файлы легко осуществим - привязываешь к кнопке старта запуск файла и всё. Вот пример - по кнопке старт запустит скрипт script1.exe с параметрами из combobox и inputbox:
Код:
#include <GUIConstantsEx.au3>

$hGUI = GUICreate('Starter', 736, 294, 1476, 138)
$hInTime_1 = GUICtrlCreateInput('HH.MM.SS', 24, 24, 121, 21)
$hCombo_1 = GUICtrlCreateCombo('1', 312, 24, 145, 21)
GUICtrlSetData(-1, '2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30', '1')
$hStart_1 = GUICtrlCreateButton('Start 1', 576, 16, 105, 25)
$hCheck_1 = GUICtrlCreateCheckbox('AutoRepeat', 472, 24, 81, 25)
Dim $iRepeat
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $hStart_1
			If GUICtrlRead($hCheck_1) = $GUI_CHECKED Then
				$iRepeat = 0
			Else
				$iRepeat = GUICtrlRead($hCombo_1)
			EndIf
			ShellExecute(@ScriptDir & '\script1.exe', $iRepeat & ' ' & GUICtrlRead($hInTime_1))
		Case $hCheck_1
			If GUICtrlRead($hCheck_1) = $GUI_CHECKED Then
				GUICtrlSetState($hCombo_1, $GUI_DISABLE)
			Else
				GUICtrlSetState($hCombo_1, $GUI_ENABLE)
			EndIf
	EndSwitch
WEnd
script1 - просто выдает входящие параметры командной строки(сам скрипт нужно откомпилировать и переименовать в script1.exe):
Код:
MsgBox(0, 'Done!', 'Число посторов: ' & $CmdLine[1] & @CRLF & 'Время начала: ' & $CmdLine[2])


Sinel сказал(а):
или еще как теория возможно ли как то написать скрипт 1ин но чтобы он запускался не целиком а по определенным частям ? необходимым мне
Тогда и с кол-вом потоков проблем не будет имхо
Пока выполняется одна функция другие не могут работать, исключение это вызов одной функции внутри другой, но и в таком случае функция-обертка будет ждать завершения функции-вкладыша и только потом продолжит выполняться.

Давай примеры своих функций(хоть в сокращенном виде, хоть наброском) и алгоритм что после чего должно работать.

Модераторам: может стоит перенести тему в стол заказов?
 
Автор
S

Sinel

Новичок
Сообщения
28
Репутация
1
наброски есть но я думаю их еще переделать под ImageSearch
мне щас главное понять как твой скрипт редактить и добавлять новые кнопки и прочее ну и как после запаковать ну и если уж совсем помечтать приклеить картинку место серого фона менюшки)
Кстати почему так сильно урезался твой скрипт? (ну первый и последний)

ЗЫ щас проверил в таймер то не пашит (
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
624
Redline [?]
Модераторам: может стоит перенести тему в стол заказов?
можно, если шапка будет оформлена по правилам - http://autoit-script.ru/index.php?topic=124.0
 
Верх