Что нового

Как прикрутить gui к скрипту запуска задачи в определенное время

fensh

Новичок
Сообщения
3
Репутация
0
Доброго времени суток, не знаю в тот ли раздел пишу, но попытка не пытка
хочу к скрипту что ниже прикрутить gui, с возможностью изменения двух параметров "время срабатывания" и "задержка"
что-то типа такого как во вложении, но все потуги соединить скрипт с gui пока окончились нулевым результатом
Нет ли у глубокоуважаемой публики "горшочка помощи" мне в этом вопросе

Код:
#include <Date.au3>
_ScheduleStart_Proc("14:28:11")
Func _ScheduleStart_Proc($sStartTime)
    While 1
        If _NowTime() = $sStartTime Then Return 1
    WEnd
EndFunc
Sleep(800)
Send("{Esc}")


#include <GUIConstants.au3>
#include <Date.au3>

$Form1 = GUICreate("", 189, 222, 338, 125)
$iTimer = GUICtrlCreateInput("00:00:00", 40, 40, 105, 21)
$Timer = GUICtrlCreateLabel("Время", 64, 16, 37, 17)
$iSync = GUICtrlCreateInput("800", 32, 104, 121, 21)
$Sync = GUICtrlCreateLabel("Задержка", 64, 80, 55, 17)
$Button1 = GUICtrlCreateButton("Запуск", 56, 136, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Закрыть", 56, 176, 75, 25, 0)
$Pic1 = GUICtrlCreatePic("", 0, 0, 185, 217, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)

While 1
Switch GUIGetMsg()
Case $Button2
Exit
Case $Timer
GUICtrlSetData($iTimer, GUICtrlRead($Timer))
Case $Sync
GUICtrlSetData($iSync, GUICtrlRead($Sync))
Case $Button1
$nTimer = GUICtrlRead($iTimer)
$nSync = GUICtrlRead($iSync)
EndSwitch
Wend
_ScheduleStart_Proc("$nTimer")

Func _ScheduleStart_Proc($sStartTime)
While 2
If _NowTime() = $sStartTime Then Return 2
WEnd
Sleep($nSync)
Send("{Enter}")
EndFunc
 

Вложения

  • gui.png
    gui.png
    3.6 КБ · Просмотры: 10

StarEdik

Новичок
Сообщения
365
Репутация
4
Попробуйте так
Код:
#include <GUIConstants.au3>
#include <Date.au3>

$Form1 = GUICreate("", 189, 222, 338, 125)
$inpTimer = GUICtrlCreateInput("00:00:00", 40, 40, 105, 21)
$LblTimer = GUICtrlCreateLabel("Время", 64, 16, 37, 17)
$inpSync = GUICtrlCreateInput("800", 32, 104, 121, 21)
$LblSync = GUICtrlCreateLabel("Задержка", 64, 80, 55, 17)
$BtnGo = GUICtrlCreateButton("Запуск", 56, 136, 75, 25, 0)
$BtnEnd = GUICtrlCreateButton("Закрыть", 56, 176, 75, 25, 0)
$Pic1 = GUICtrlCreatePic("", 0, 0, 185, 217, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $BtnEnd
			Exit
		Case $BtnGo
			$infTimer = GUICtrlRead($inpTimer)
			$infSync = GUICtrlRead($inpSync)
			GUICtrlSetData($LblTimer, $infTimer)
			GUICtrlSetData($LblSync, $infSync)
			_ScheduleStart_Proc($infTimer, $infSync)
	EndSwitch
	Sleep(10)
WEnd

Func _ScheduleStart_Proc($sStartTime, $nSync)
	If _NowTime() = $sStartTime Then
		Sleep($nSync)
		Send("{Enter}")
	EndIf
EndFunc   ;==>_ScheduleStart_Proc
 
A

Alofa

Гость
OffTopic:
fensh функция "Send()" после нескольких минут/часов ожидания, это не вариант.
Если вы конечно не собираетесь держать постоянно в фокусе нужное окно или не заблокируете ввод с клавиатуры и мышь.
 
Автор
F

fensh

Новичок
Сообщения
3
Репутация
0
OffTopic:

Alofa да да так и должно быть, по крайней мере пока :smile: вот разберусь с gui > вводом времени/задержки и чтобы хотя бы нажатие клавиши срабатывало, а потом уже и до WinActivate доползу



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

StarEdik - Спасибо, но под реально срабатывающий скрипт, ваш пример довести не смог :(
Под спойлером мои потуги, вижу что скрипт ждет назначенного времени по диспетчеру задач (нагрузка цп), наступает время и ничего не происходит, кроме как нагрузка на цп становится нулевой

#include <GUIConstants.au3>
#include <Date.au3>

HotKeySet("{Esc}", "_Exit")

$Form1 = GUICreate("", 189, 222, 338, 125)
$inpTimer = GUICtrlCreateInput("00:00:00", 40, 40, 105, 21)
$LblTimer = GUICtrlCreateLabel("Время", 64, 16, 37, 17)
$inpSync = GUICtrlCreateInput("800", 32, 104, 121, 21)
$LblSync = GUICtrlCreateLabel("Задержка", 64, 80, 55, 17)
$BtnGo = GUICtrlCreateButton("Запуск", 56, 136, 75, 25, 0)
$BtnEnd = GUICtrlCreateButton("Закрыть", 56, 176, 75, 25, 0)
$Pic1 = GUICtrlCreatePic("", 0, 0, 185, 217, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)

While 1
Switch GUIGetMsg()
Case $BtnEnd
Exit
Case $BtnGo
$infTimer = GUICtrlRead($inpTimer)
$infSync = GUICtrlRead($inpSync)
GUICtrlSetData($LblTimer, $infTimer)
GUICtrlSetData($LblSync, $infSync)
_ScheduleStart_Proc($infTimer)
EndSwitch
Sleep(10)
WEnd

Func _ScheduleStart_Proc($sStartTime)
While 1
If _NowTime() ==$sStartTime Then Return 1
WEnd
;Sleep($nSync)
;Send("{Enter}")
MsgBox(0,"Запуск","Сработало!")
EndFunc

Func _Exit()
Exit
EndFunc

StarEdik сказал(а):
Попробуйте так
Код:
#include <GUIConstants.au3>
#include <Date.au3>

$Form1 = GUICreate("", 189, 222, 338, 125)
$inpTimer = GUICtrlCreateInput("00:00:00", 40, 40, 105, 21)
$LblTimer = GUICtrlCreateLabel("Время", 64, 16, 37, 17)
$inpSync = GUICtrlCreateInput("800", 32, 104, 121, 21)
$LblSync = GUICtrlCreateLabel("Задержка", 64, 80, 55, 17)
$BtnGo = GUICtrlCreateButton("Запуск", 56, 136, 75, 25, 0)
$BtnEnd = GUICtrlCreateButton("Закрыть", 56, 176, 75, 25, 0)
$Pic1 = GUICtrlCreatePic("", 0, 0, 185, 217, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $BtnEnd
			Exit
		Case $BtnGo
			$infTimer = GUICtrlRead($inpTimer)
			$infSync = GUICtrlRead($inpSync)
			GUICtrlSetData($LblTimer, $infTimer)
			GUICtrlSetData($LblSync, $infSync)
			_ScheduleStart_Proc($infTimer, $infSync)
	EndSwitch
	Sleep(10)
WEnd

Func _ScheduleStart_Proc($sStartTime, $nSync)
	If _NowTime() = $sStartTime Then
		Sleep($nSync)
		Send("{Enter}")
	EndIf
EndFunc   ;==>_ScheduleStart_Proc


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

P.S. Вот пользуюсь пока таким костыльком (с задачей справляется, но хочется без InputBox)

Код:
#include <Date.au3>
HotKeySet("{Esc}", "_Exit")

$hGui=GUICreate("Test", 188, 90)
GUISetState(@SW_SHOW)


$sTime = InputBox("Время запуска Часы:Минуты:Секунды","")
$sSync = InputBox("Задержка в мс","")

_ScheduleStart_Proc($sTime)
Func _ScheduleStart_Proc($sStartTime)
    While 1
        If _NowTime() ==$sStartTime Then Return 1
	WEnd
EndFunc

Sleep($sSync)
Send("{Esc}")

Func _Exit()
    Exit
EndFunc
 

StarEdik

Новичок
Сообщения
365
Репутация
4
Проверьте, и помните, процессор нельзя нагружать.
Код:
Func _ScheduleStart_Proc($sStartTime)
    While 1
   If _NowTime() ==$sStartTime Then MsgBox(0,"Запуск","Сработало!")
   Sleep(500)
    WEnd
   ;Sleep($nSync)
    ;Send("{Enter}")
   ;MsgBox(0,"Запуск","Сработало!")
EndFunc
 
A

Alofa

Гость
StarEdik
Код:
Func _ScheduleStart_Proc($sStartTime)
    While 1
      ; Из этого цикла нет выхода и даже после "MsgBox()".
      ; Кроме того, при выполнении цикла у вас не будут работать кнопки GUI
      Sleep(500) ; Думаю, этого вполне
    WEnd
EndFunc
 

StarEdik

Новичок
Сообщения
365
Репутация
4
Alofa
Sleep(500) ; Думаю, этого вполне
Вы правы, исправил

Alofa
; Из этого цикла нет выхода и даже после "MsgBox()".
У него там
Код:
#include <GUIConstants.au3>
#include <Date.au3>

HotKeySet("{Esc}", "_Exit")

$Form1 = GUICreate("", 189, 222, 338, 125)
$inpTimer = GUICtrlCreateInput("00:00:00", 40, 40, 105, 21)
$LblTimer = GUICtrlCreateLabel("Время", 64, 16, 37, 17)
$inpSync = GUICtrlCreateInput("800", 32, 104, 121, 21)
$LblSync = GUICtrlCreateLabel("Задержка", 64, 80, 55, 17)
$BtnGo = GUICtrlCreateButton("Запуск", 56, 136, 75, 25, 0)
$BtnEnd = GUICtrlCreateButton("Закрыть", 56, 176, 75, 25, 0)
$Pic1 = GUICtrlCreatePic("", 0, 0, 185, 217, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)

While 1
    Switch GUIGetMsg()
        Case $BtnEnd
            Exit
        Case $BtnGo
            $infTimer = GUICtrlRead($inpTimer)
            $infSync = GUICtrlRead($inpSync)
            GUICtrlSetData($LblTimer, $infTimer)
            GUICtrlSetData($LblSync, $infSync)
            _ScheduleStart_Proc($infTimer)
    EndSwitch
    Sleep(10)
WEnd

Func _ScheduleStart_Proc($sStartTime)
    While 1
   If _NowTime() ==$sStartTime Then Return 1
    WEnd
   ;Sleep($nSync)
    ;Send("{Enter}")
   MsgBox(0,"Запуск","Сработало!")
EndFunc

Func _Exit()
    Exit
EndFunc
Код:
HotKeySet("{Esc}", "_Exit")

стоит
 
A

Alofa

Гость
Код:
#include <GUIConstants.au3>
#include <DateTimeConstants.au3>

Opt('TrayMenuMode', 3)

Local $sTimeText, $sSleepText, $iTrigger = False
Local $hGui, $hTime, $hSleep, $Button_1, $Button_2, $hTrayItem_1, $hTrayItem_2

; Создание окна
$hGui = GUICreate('', 189, 222)
; Создание элементов окна
GUICtrlCreateLabel('Время', 64, 16, 37, 17)
GUICtrlCreateLabel('Задержка', 64, 80, 55, 17)
$hTime = GUICtrlCreateDate('', 45, 40, 95, 25, $DTS_TIMEFORMAT)
GUICtrlSetFont(-1, 11)
$hSleep = GUICtrlCreateInput('800', 45, 104, 95, 25, $ES_CENTER)
GUICtrlSetFont(-1, 11)
$Button_1 = GUICtrlCreateButton('Запуск', 56, 136, 75, 25, 0)
$Button_2 = GUICtrlCreateButton('Скрыть окно', 56, 176, 75, 25, 0)
; Создание 2 пунктов меню в системном трее
$hTrayItem_1 = TrayCreateItem('Скрыть/Восстановить окно')
$hTrayItem_2 = TrayCreateItem('Выход')
GUISetState(@SW_SHOW) ; Отображаем окно

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE ; Если нажат крестик - Закрыть
			Exit
		Case $Button_2 ; Если нажата кнопка "Скрыть окно"
			GUISetState(@SW_HIDE)
		Case $Button_1 ; Если нажата кнопка "Запуск"
			If GUICtrlRead($Button_1) == 'Запуск' Then	; Здесь мы вызываем пользовательскую функцию "_Button_1()" с
				_Button_1('Отмена', $GUI_DISABLE)	; параметрами в зависимости от состояния этой кнопки
			Else
				_Button_1('Запуск', $GUI_ENABLE)
			EndIf
	EndSwitch

	Switch TrayGetMsg() ; Опрашивает трей на возникновение какого либо события
		Case $hTrayItem_1 ; Если нажат пункт "Скрыть/Восстановить окно"
			If BitAND(WinGetState($hGui), 2) Then
				GUISetState(@SW_HIDE)
			Else
				GUISetState(@SW_SHOW)
			EndIf
		Case $hTrayItem_2 ; Если нажат пункт "Выход"
			Exit
	EndSwitch
; Если "$iTrigger = True", то начинаем сравнивать заданное время с текущим
	If $iTrigger And @HOUR & @MIN & @SEC = $sTimeText Then ExitLoop
WEnd

MsgBox(64, 'Отчет', 'Будильник сработал!' & @LF & 'Текущее время: ' & @HOUR & ':' & @MIN & ':' & @SEC)
Sleep($sSleepText)
Send('{Esc}')
GUIDelete($hGui)



; =========== ПОЛЬЗОВАТЕЛЬСКАЯ ФУНКЦИЯ ==============
Func _Button_1($sText, $iState)
	If Not $iTrigger Then
		$sSleepText = GUICtrlRead($hSleep) ; Получаем текст из элемента "Задержка"
		$sTimeText = GUICtrlRead($hTime) ; Получаем текст из элемента "Время"
		$sTimeText = StringReplace($sTimeText, ':', '') ; Удаляем из строки знак ":"
		$sTimeText = StringFormat("%06s", $sTimeText) ; Дополняем строку ведущими нулями (при необходимости)
	EndIf
	$iTrigger = Not $iTrigger ; Переключаем значение переменной на противоположное (между "False" и "True")
	
	GUICtrlSetData($Button_1, $sText) ; Меняем текст кнопки
	GUICtrlSetState($hTime, $iState) ; Меняем состояние элемента
	GUICtrlSetState($hSleep, $iState) ; Меняем состояние элемента
EndFunc   ;==>_Button_1
 
Автор
F

fensh

Новичок
Сообщения
3
Репутация
0
Alofa СПАСИБО !
Это просто идеально !
Работа мастера !

Теперь посижу поразбираюсь, на такой красоте поучусь )
 
Верх