Автор Тема: Временная шкала - с ориентировкой на текстовый файл  (Прочитано 402 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн Grell [?]

  • Новичок
  • *
  • Сообщений: 51
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt: 3.3.14.0

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

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

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

Примечания:


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Русское сообщество AutoIt


Оффлайн gunter123 [?]

  • Новичок
  • *
  • Сообщений: 36
  • Репутация: 15
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Обработку ошибок не писал. Тестировал с вашим файлом, работает.

Код: AutoIt [Выделить]
#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

Is it future or is it past?

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
#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
 

« Последнее редактирование: Октябрь 05, 2017, 11:42:28 от Tempo »

Оффлайн Grell [?]

  • Новичок
  • *
  • Сообщений: 51

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Tempo, скрипт при окончании времени - записанном в первой строке - почему-то выдает ошибку.


Внимание: Для просмотра прикреплённых файлов необходимо Войти или Зарегистрироваться

Русское сообщество AutoIt

Re: Временная шкала - с ориентировкой на текстовый файл
« Ответ #3 Отправлен: Октябрь 05, 2017, 20:53:59 »

Помечен как лучший ответ пользователем Grell Отправлен Октябрь 05, 2017, 22:18:42

Оффлайн Tempo [?]

  • Осваивающий
  • **
  • Сообщений: 106
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
выдает ошибку.

А если так

Код: AutoIt [Выделить]
#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
 


Оффлайн Grell [?]

  • Новичок
  • *
  • Сообщений: 51

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
А сейчас все работает.

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

Русское сообщество AutoIt

Re: Временная шкала - с ориентировкой на текстовый файл
« Ответ #5 Отправлен: Октябрь 05, 2017, 22:18:33 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
11 Ответов
5940 Просмотров
Последний ответ Апрель 17, 2010, 01:16:57
от CreatoR
32 Ответов
9483 Просмотров
Последний ответ Сентябрь 16, 2011, 22:57:26
от Trans
1 Ответов
1409 Просмотров
Последний ответ Декабрь 14, 2012, 09:31:57
от madmasles
16 Ответов
4342 Просмотров
Последний ответ Ноябрь 17, 2013, 22:22:06
от sims
5 Ответов
1840 Просмотров
Последний ответ Ноябрь 21, 2014, 12:56:06
от pvnn
3 Ответов
1639 Просмотров
Последний ответ Июль 12, 2015, 17:32:25
от Core2Duo76
3 Ответов
1240 Просмотров
Последний ответ Июль 07, 2015, 13:41:06
от DeeKeiD
0 Ответов
206 Просмотров
Последний ответ Декабрь 20, 2016, 17:29:37
от Maxlinus
2 Ответов
231 Просмотров
Последний ответ Сентябрь 01, 2017, 13:51:13
от VadimKHL
6 Ответов
463 Просмотров
Последний ответ Сентябрь 03, 2017, 18:08:34
от Alexey_A