Вопрос или проблема
Add-Type -AssemblyName System.Windows.Forms
Add-type -AssemblyName System.Drawing
$FolderName = Read-Host "poweSmell: "
$time = Read-Host "5(секунды): "
# Получить информацию о разрешении экрана
$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen
$Width = $Screen.Width
$Height = $Screen.Height
$Left = $Screen.Left
$Top = $Screen.Top
$bitmap = New-Object System.Drawing.Bitmap $Width, $Height
$Path = "C:\Users\$env:UserName\Desktop\"
New-Item -Path $Path -Name $FolderName -ItemType "directory"
for($i = 1; $i -le 7200; $i++) {
$FileName = "$FolderName-$i.bmp";
$FIle = "$Path$FolderName\$FileName"
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen($Left,$Top,0,0,$bitmap.Size)
$bitmap.Save($File)
# Установить продолжительность и интервал
$duration = 2 * 60 * 60 # 2 часа в секундах
$interval = 5 # 5 секунд
Write-Output "Скриншот сохранен по адресу: $File"
Start-Sleep -Seconds $time
}
Ответ или решение
В данном руководстве мы рассмотрим, как изменить код PowerShell так, чтобы он выполнял снимок экрана с именем файла "powerSmell" каждые 5 секунд в течение 2 часов. Это будет полезно для пользователей, которым необходимо фиксировать экран для мониторинга или проведения анализа. Мы подробно разберем каждый шаг и обеспечим работоспособность кода.
Изучение исходного кода
Исходный код, предоставленный в вашем вопросе, имеет несколько недостатков и ошибок. Основные из них:
- Опечатка в
System.Windows.Forms.SytemInformation
; должно бытьSystem.Windows.Forms.SystemInformation
. - Неправильное использование переменных, таких как
$FolderName
, которое используется как каталог, но также используется как имя файла. - Логика цикла и настройки времени не совсем корректно реализованы.
Исправленный код
Теперь я представлю откорректированный вариант кода.
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Имя папки для сохранения снимков экрана
$FolderName = "powerSmell"
# Путь для сохранения
$Path = "C:\Users\$env:UserName\Desktop\$FolderName"
# Проверка, существует ли папка, если нет - создать
if (-not (Test-Path -Path $Path)) {
New-Item -Path $Path -ItemType "directory"
}
# Получение информации о разрешении экрана
$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen
$Width = $Screen.Width
$Height = $Screen.Height
$Left = $Screen.Left
$Top = $Screen.Top
# Создание объекта Bitmap для захвата экрана
$bitmap = New-Object System.Drawing.Bitmap $Width, $Height
# Установка продолжительности и интервала
$duration = 2 * 60 * 60 # 2 часа в секундах
$interval = 5 # интервал в секундах
$iterations = $duration / $interval
for ($i = 1; $i -le $iterations; $i++) {
$FileName = "$FolderName-$i.bmp"
$FilePath = Join-Path -Path $Path -ChildPath $FileName
# Создание графики для захвата экрана
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen($Left, $Top, 0, 0, $bitmap.Size)
$bitmap.Save($FilePath, [System.Drawing.Imaging.ImageFormat]::Bmp)
# Уведомление о сохранении
Write-Output "Скриншот сохранен в: $FilePath"
Start-Sleep -Seconds $interval
}
# Освобождение ресурсов
$graphics.Dispose()
$bitmap.Dispose()
Объяснение изменений
- Создание директории: Программа автоматически создает папку "powerSmell" на рабочем столе, если она не существует.
- Правильная работа с разрешением экрана: Исправлены опечатки, и теперь код корректно получает размеры экрана.
- Цикл для создания снимков: Цикл выполняется необходимое количество раз исходя из продолжительности работы в секундах и интервала.
- Устранены опечатки: Исправлены имена переменных и их использование для избежания ошибок.
Заключение
Такой подход к созданию скрипта позволит вам автоматизировать процесс создания снимков экрана каждые 5 секунд в течение 2 часов. Убедитесь, что у вас установлены необходимые права доступа для выполнения этих операций на вашем компьютере. Используйте данный код с осторожностью и только для законных целей.
Этот код может быть адаптирован под другие нужды, добавляя различные функции, такие как изменение формата файла или улучшение обработки ошибок.