Start-Timer

Таймер выполняет определенные действия с заданным интервалом, в то время как скрипт может выполнять другую работу.

Запустить таймер
Параметры

  • -Name Имя таймера

  • -Interval Периодичность срабатывания таймера

  • -Action Скрипт-блок, который будет выполнять таймер

Примеры

  • Раз в секунду проверять цвет в координатах 100, 100. В случае совпадения, будет запущен калькулятор, и работа таймера будет завершена. Скрипт в это время может выполнять другие задачи, и в данном случае будет завершен, если работа таймера будет остановлена.

    Wake up, Neo, select all

    cls
    # Код, который будет выполнять таймер
    $action = {
    $color = Get-Color 100, 100
    if($color -eq "F2F7FE"){
    Write-Host "Цвет обнаружен, запускаю калькулятор" -ForegroundColor Green
    Start calc
    Delete-Timer $timerName
    }
    }

    # Запустить таймер
    $timerName = "waitColor"
    Start-Timer $timerName 1000 $action

    # Работа основного потока скрипта
    while(Get-Timer $timerName){
    Write-Host "Скрипт работает" -ForegroundColor Green
    Sleep -m 200
    }
  • Раз в секунду вызывать блок таймера. Можно использовать для периодической проверки какого-то условия, например, поиск изображения, цвета.

    Wake up, Neo, select all

    Clear-Host
    # этот блок выполняется в таймере
    $action = {
    Write-Host "Этот код выполняется в таймере" -ForegroundColor Cyan
    }

    Start-Timer timer0 1000 $action # запустить таймер, раз в секунду будет вызван блок action

    $time = (Get-DAte).AddSeconds(5) # выполнять цикл 5 секунд
    while((Get-Date) -lt $time){
    Write-Host "Этот код выполняется в цикле" -ForegroundColor Green
    Pause-Script 300
    }

    Delete-Timer timer0 # удалить таймер
  • Пример как отслеживать запуск блокнота и калькулятора, закрывать если они открыты.

    Wake up, Neo, select all

    Clear-Host
    # Код, который будет выполнять таймер с именем Timer0
    $Action0 = {
    $prc = Get-Process calc*, notepad # найти процесс калькулятора или блокнота
    if($prc){ # если найден
    $prc.Kill() # закрыть его
    Write-Host "Был закрыт блокнот или калькулятор" -ForegroundColor Green
    }
    }

    # Код, который будет выполнять таймер с именем Timer1
    $Action1 = {
    if(Get-KeyState Escape){ # если нажата клавиша Escape
    Write-Host "Escape нажат" -ForegroundColor Green
    Write-Host "Скрипт остановлен, таймер остановлен" -ForegroundColor Red
    Close-Hint "1" # закрыть окно подсказки
    Delete-Timer Timer0 # Удалить таймер
    Delete-Timer Timer1 # Удалить таймер
    }
    }

    # Запустить таймеры, каждые 200 мсек будет вызван блок Action0 и Action1
    Start-timer Timer0 200 $Action0
    Start-timer Timer1 200 $Action1

    # параметры для Show-Hint
    $HintParam = @{
    Position = 300, 100
    Duration = 0
    Vision = $true
    BgColor = "00FF00"
    FColor = "FF0000"
    Size = 20
    }

    Show-Hint "Нажать Escape для остановки скрипта
    Если открыть блокнот или калькулятор, то скрипт их закроет" -Name "1" @HintParam

    # Очистить данные о нажатии клавиши
    Clear-KeyState Escape

    # Выполнять скрипт пока таймер работает
    while(Get-Timer Timer0){
    Write-Host "Скрипт работает" -ForegroundColor Cyan
    Pause-Script 500
    }
  • Обращение к переменным скрипта из таймера, используя $Global:<имя переменной>.

    Wake up, Neo, select all

    Clear-Host
    $x = 0
    $action = {
    $Global:x++ # увеличить переменную на 1
    if($Global:x -gt 100){ # если переменная больше 100
    Delete-Timer timer0 # удалить таймер
    }
    }

    Start-Timer timer0 100 $action

    while(Get-Timer timer0){ # выполнять цикл пока таймер работает
    Write-Host "Переменная x равна: $x" -ForegroundColor Cyan
    Pause-Script 1000
    }