Коротко — самые простые и надёжные варианты:
1) готовая бесплатная программа с графическим интерфейсом: ShareX (рекомендую);
2) собственный скрипт (PowerShell) + Планировщик заданий Windows (Task Scheduler) — гибко и контролируемо.
Дальше — как сделать оба варианта.
Вариант A — ShareX (быстро и просто)
- Скачайте и установите ShareX: https://getsharex.com
- В ShareX есть «Auto capture» / «Interval capture» (периодический захват). В меню Capture → Automatic capture (или в настройках Task settings создайте задачу для автоматического захвата).
- В настройках сохранения (Destination / File naming) укажите базовую папку (например C:\Screenshots) и шаблон имени/папки по дате (ShareX поддерживает переменные для даты/времени — задайте папку как, например, %y%-%mo%-%d% или используйте GUI для указания «папка по дате»).
- Настройте интервал (каждые N секунд/минут) и тип захвата (весь экран, активное окно и т. д.).
Плюсы: простота, много дополнительных опций (загрузка, горячие клавиши, редактирование). Минус: если нужна тонкая автоматизация / запуск как служба — может не подойти.
Вариант B — PowerShell + Task Scheduler (наиболее надёжно и гибко)
- Пишем скрипт, который:
1) создаёт папку с именем по текущей дате (yyyy-MM-dd),
2) делает скриншот всего экрана и сохраняет PNG с временной меткой.
Пример скрипта (сохраните как C:\Scripts\Screenshot.ps1):
```powershell
Add-Type -AssemblyName System.Drawing
# Папка-родитель (можете изменить)
$baseFolder = "C:\Screenshots"
# Дата/время для названий
$today = Get-Date -Format "yyyy-MM-dd"
$time = Get-Date -Format "HH-mm-ss"
# Создать папку по дате
$dir = Join-Path $baseFolder $today
if (-not (Test-Path $dir)) { New-Item -ItemType Directory -Path $dir | Out-Null }
# Получить размер рабочего стола
$width = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width
$height = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height
$bmp = New-Object System.Drawing.Bitmap $width, $height
$g = [System.Drawing.Graphics]::FromImage($bmp)
$g.CopyFromScreen(0,0,0,0, $bmp.Size)
$filename = Join-Path $dir ($time + ".png")
$bmp.Save($filename, [System.Drawing.Imaging.ImageFormat]::Png)
# очистка
$g.Dispose()
$bmp.Dispose()
```
Важно: чтобы этот скрипт работал, нужно в Task Scheduler учесть поведение интерактивного рабочего стола:
- При создании задачи в Task Scheduler выберите «Create Task».
- На вкладке General: лучше выбрать «Run only when user is logged on» — иначе захват экрана из фоновой / неинтерактивной сессии может не дать ожидаемого результата.
- Triggers → New: поставьте расписание (например Daily), затем включите «Repeat task every» и выберите нужный интервал (например 5 minutes) и «for a duration: 1 day» или «Indefinitely».
- Actions → New: Program/script: powershell.exe
Arguments: -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Screenshot.ps1"
- Conditions/Settings по желанию (не выключать при питании от батареи и т.п.).
Плюсы этого метода: полностью под ваш контроль, можно настраивать формат, интервал, дополнительные фильтры. Минус: нужно немного настроить Task Scheduler и скрипт.
Дополнительно — полезные моменты
- Если требуется запускать при заблокированном экране / без пользователя — скриншоты рабочего стола не будут содержать текущего интерактивного экрана; для таких сценариев может потребоваться запуск удалённой сессии или программное создание «скриншота» виртуального дисплея (более сложная тема).
- Альтернатива PowerShell: ниркоманд (NirCmd) — утилита nircmd.exe имеет команду savescreenshot и её легко вызывать из .bat или Task Scheduler. Но всё равно нужно обеспечить корректное создание папки по дате (удобно делать это через PowerShell).
- Платные решения: Snagit (больше опций и поддержки), OBS (видео, но можно делать скриншоты).
Если хотите, могу:
- прислать готовый файл .ps1 и инструкцию по созданию задачи в Task Scheduler пошагово (с скриншотами/точными пунктами), или
- показать, как настроить именно в ShareX шаблон папок/имен для автоматической сортировки по датам.