Загрузка данных


Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$form = New-Object System.Windows.Forms.Form
$form.Text = "Shutdown Timer"
$form.Size = New-Object System.Drawing.Size(450,320)
$form.StartPosition = "CenterScreen"
$form.BackColor = "#121212"
$form.ForeColor = "White"
$form.FormBorderStyle = "FixedSingle"
$form.MaximizeBox = $false

# Заголовок
$title = New-Object System.Windows.Forms.Label
$title.Text = "⏻ SHUTDOWN TIMER"
$title.Font = New-Object System.Drawing.Font("Segoe UI",16,[System.Drawing.FontStyle]::Bold)
$title.Location = New-Object System.Drawing.Point(90,10)
$title.AutoSize = $true
$form.Controls.Add($title)

# Подзаголовок
$subtitle = New-Object System.Windows.Forms.Label
$subtitle.Text = "Выбери время до выключения"
$subtitle.Location = New-Object System.Drawing.Point(120,45)
$subtitle.AutoSize = $true
$form.Controls.Add($subtitle)

# Слайдер
$track = New-Object System.Windows.Forms.TrackBar
$track.Minimum = 1
$track.Maximum = 180
$track.Value = 30
$track.Size = New-Object System.Drawing.Size(360,45)
$track.Location = New-Object System.Drawing.Point(40,80)
$form.Controls.Add($track)

# Текст времени
$timeLabel = New-Object System.Windows.Forms.Label
$timeLabel.Text = "30 минут"
$timeLabel.Font = New-Object System.Drawing.Font("Segoe UI",12)
$timeLabel.Location = New-Object System.Drawing.Point(170,120)
$timeLabel.AutoSize = $true
$form.Controls.Add($timeLabel)

$track.Add_ValueChanged({
    $timeLabel.Text = "$($track.Value) минут"
})

# Обратный отсчёт
$countdown = New-Object System.Windows.Forms.Label
$countdown.Text = ""
$countdown.Font = New-Object System.Drawing.Font("Segoe UI",11)
$countdown.Location = New-Object System.Drawing.Point(130,150)
$countdown.AutoSize = $true
$form.Controls.Add($countdown)

# Кнопка старт
$start = New-Object System.Windows.Forms.Button
$start.Text = "▶ Запустить"
$start.Size = New-Object System.Drawing.Size(140,40)
$start.Location = New-Object System.Drawing.Point(60,200)
$start.BackColor = "#00c853"
$start.FlatStyle = "Flat"
$form.Controls.Add($start)

# Кнопка отмена
$cancel = New-Object System.Windows.Forms.Button
$cancel.Text = "■ Отменить"
$cancel.Size = New-Object System.Drawing.Size(140,40)
$cancel.Location = New-Object System.Drawing.Point(240,200)
$cancel.BackColor = "#d50000"
$cancel.FlatStyle = "Flat"
$form.Controls.Add($cancel)

# Уведомления
$notify = New-Object System.Windows.Forms.NotifyIcon
$notify.Icon = [System.Drawing.SystemIcons]::Information
$notify.Visible = $true

# Таймер
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 1000

$global:sec = 0

$timer.Add_Tick({
    if ($global:sec -gt 0) {
        $global:sec--
        $m = [math]::Floor($global:sec / 60)
        $s = $global:sec % 60
        $countdown.Text = "Осталось: $m мин $s сек"

        if ($global:sec -eq 60) {
            $notify.BalloonTipTitle = "Скоро выключение"
            $notify.BalloonTipText = "Осталась 1 минута!"
            $notify.ShowBalloonTip(3000)
        }
    }
})

# Запуск
$start.Add_Click({
    $minutes = $track.Value
    $global:sec = $minutes * 60

    shutdown -s -t $global:sec
    $timer.Start()

    $notify.BalloonTipTitle = "Запущено"
    $notify.BalloonTipText = "ПК выключится через $minutes минут"
    $notify.ShowBalloonTip(3000)
})

# Отмена
$cancel.Add_Click({
    shutdown -a
    $timer.Stop()
    $countdown.Text = ""

    $notify.BalloonTipTitle = "Отмена"
    $notify.BalloonTipText = "Выключение отменено"
    $notify.ShowBalloonTip(3000)
})

$form.Topmost = $true
[void]$form.ShowDialog()