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()