Что нового

Временная шкала - с ориентировкой на текстовый файл

Grell

Новичок
Сообщения
127
Репутация
0
Версия AutoIt: 3.3.14.0

Описание:
Доброе утро, мастера autoit.
Помогите решить вопрос.

Как в автоит реализовать простую временную шкалу?
Она записана в файле Шкала.txt:
Первая строка - это общее время длительности работы скрипта. Например - общая длительность 1 минута (00:01:00).
Ниже - идут временные отметки и адреса файлов, которые должны запускаться - по достижению данной временной отметки (программой по-умолчанию)
Как только время записанное в первой строке истекает (то есть проходит 1 минута) - скрипт закрывается.

Как это реализовать этот скрипт при помощи автоит ?

Примечания:
 

Вложения

  • Шкала.txt
    80 байт · Просмотры: 7

gunter123

Продвинутый
Сообщения
159
Репутация
69
Обработку ошибок не писал. Тестировал с вашим файлом, работает.

Код:
#include <Array.au3>
#include <File.au3>

HotKeySet("{ESC}", "_Exit")
Func _Exit()
   Exit
EndFunc

$aFile = FileReadToArray(@ScriptDir & "/Шкала.txt")		; Читаем файл в массив
If @error Then
   MsgBox(4096, "Шкала.txt", "Файл не найден")
   Exit
EndIf

$time = StringSplit($aFile[0], ":", 2)
$aFile[0] = $time[0] * 3600 + $time[1] * 60 + $time[2]  ; Переводим строку в секунды

For $i = 1 To UBound($aFile) - 1						; Тоже самое для каждой строки
   $time = StringLeft($aFile[$i], 8)
   $time = StringSplit($time, ":", 2)
   $aFile[$i] = ($time[0] * 3600 + $time[1] * 60 + $time[2]) & StringTrimLeft($aFile[$i], 8)
Next

;_ArrayDisplay($aFile)

$currentTime = -1

While $currentTime <> $aFile[0]

   Sleep(1000)
   $currentTime += 1

   If UBound($aFile) = 1 Then
	  ContinueLoop
   EndIf

   If $currentTime = StringLeft($aFile[1], StringInStr($aFile[1], " ")) Then

	  $filePath = StringTrimLeft($aFile[1], StringInStr($aFile[1], " "))

	  If FileExists($filePath) Then
		 ShellExecute($filePath)
	  Else
		 ConsoleWrite("Файл не найден - " & $filePath & @CRLF)
	  EndIf

	  _ArrayDelete($aFile, 1)

   EndIf

WEnd
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <Timers.au3>
Opt("TrayAutoPause", 0)

Global $sTimingsPath = @ScriptDir & "\Шкала.txt", $aTimings, $aOut, $iWait, $iTimer, $hWnd
$aTimings = FileReadToArray($sTimingsPath)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка шкалы.")
$hWnd = WinGetHandle(AutoItWinGetTitle())

$aOut = StringRegExp($aTimings[0], "([0-9]{2}):([0-9]{2}):([0-9]{2})", 1)
If @error Then Exit MsgBox(16, "Ошибка", "Не удалось получить общее время работы.")
$iTimer = _Timer_SetTimer($hWnd, $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000, "_TimerExit")
$hTimer = TimerInit()

For $i = 1 To UBound($aTimings) - 1
	$aOut = StringRegExp($aTimings[$i], "([0-9]{2}):([0-9]{2}):([0-9]{2}) (.+)", 1)
	If Not @error Then
		$iWait = $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000
		Do
			Sleep(10)
		Until TimerDiff($hTimer) >= $iWait
		ShellExecute($aOut[3])
	EndIf
Next

While 1
	Sleep(10)
WEnd

Func _TimerExit($hWnd, $uMsg, $IDTimer, $dwTime)
	_Timer_KillTimer($hWnd, $iTimer)
	Exit
EndFunc   ;==>_TimerExit
 
Автор
G

Grell

Новичок
Сообщения
127
Репутация
0
Tempo, скрипт при окончании времени - записанном в первой строке - почему-то выдает ошибку.
 

Вложения

  • скриншот ошибки.png
    скриншот ошибки.png
    54.6 КБ · Просмотры: 7

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Grell сказал(а):

А если так

Код:
#include <Timers.au3>
Opt("TrayAutoPause", 0)
OnAutoItExitRegister("_OnExit")

Global $sTimingsPath = @ScriptDir & "\Шкала.txt", $aTimings, $aOut, $iWait, $iTimer, $hScriptWnd
$aTimings = FileReadToArray($sTimingsPath)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка шкалы.")
AutoItWinSetTitle(@ScriptFullPath)
$hScriptWnd = WinGetHandle(@ScriptFullPath)

$aOut = StringRegExp($aTimings[0], "([0-9]{2}):([0-9]{2}):([0-9]{2})", 1)
If @error Then Exit MsgBox(16, "Ошибка", "Не удалось получить общее время работы.")
$iTimer = _Timer_SetTimer($hScriptWnd, $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000, "_TimerExit")
$hTimer = TimerInit()

For $i = 1 To UBound($aTimings) - 1
	$aOut = StringRegExp($aTimings[$i], "([0-9]{2}):([0-9]{2}):([0-9]{2}) (.+)", 1)
	If Not @error Then
		$iWait = $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000
		Do
			Sleep(10)
		Until TimerDiff($hTimer) >= $iWait
		ShellExecute($aOut[3])
	EndIf
Next

While 1
	Sleep(10)
WEnd

Func _TimerExit($hWnd, $uMsg, $IDTimer, $dwTime)
	Exit
EndFunc   ;==>_TimerExit

Func _OnExit()
	_Timer_KillTimer($hScriptWnd, $iTimer)
EndFunc   ;==>_OnExit
 
Автор
G

Grell

Новичок
Сообщения
127
Репутация
0
А сейчас все работает.

Tempo, gunter123 , большое спасибо за ответы.
 
Верх