Как с помощью PowerShell можно сравнить два снимка экрана в буфере?

Как с помощью PowerShell можно сравнить два снимка экрана в буфере?

я нашелэтот фрагментэто хорошо работает в цикле для меня, чтобы делать скриншоты в минуту. Я мог бы хешировать результаты и сравнивать два последних скриншота на предмет изменений, следуяэта почта: (Get-FileHash $fileA).hash -ne (Get-FileHash $fileC).hashвнутри оператора If.

Я думал о том, чтобы ссылаться на скриншоты в буфере, а не сохранять их на жестком диске. Я имею в виду, что я хочу хранить скриншоты в буфере, а затем сравнивать их, пока этот фрагмент их сохраняет.

решение1

С указанным вами кодом это невозможно.

$File = "E:\temp\myscreenshot.bmp"
Add-Type -AssemblyName System.Windows.Forms
Add-type -AssemblyName System.Drawing

# Gather Screen resolution information
$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen

# .. monitor width in pixels..
$Width = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width

# .. monitor height in pixels..
$Height = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height

# .. Capture points
$Left = 0 # ..monitor starting left pixel..
$Top = 0 # ..monitor starting top pixel, normally zero..

Отладка для бедных — использование сжатия переменных для назначения и отображения выходных результатов. Удалите скобки по краям перед доставкой.

# Create bitmap using the top-left and bottom-right bounds
($bitmap = New-Object System.Drawing.Bitmap $Width, $Height)

# Create Graphics object
($graphic = [System.Drawing.Graphics]::FromImage($bitmap))

# Capture screen
($graphic.CopyFromScreen($Left, $Top, 0, 0, $bitmap.Size))

# Save to file
$bitmap.Save($File)

Вы заметите, что ничего, связанного с физической/файловой системой, в приведенном выше выводе нет, и вы не найдете ничего, что можно было бы использовать в вашем конкретном случае.

Конечно, вы можете использовать код как есть, увеличивать имя файла изображения, сравнивать и решать, какой из них удалить.

Командлеты FileSystem (например...Получить-FileHashи т. д.), означает, что вы работаете с сериализованным файлом.

Получить хэш файла

Модуль:Microsoft.PowerShell.Utility

Вычисляет хеш-значение для файла, используя указанный алгоритм хеширования.

Обновление для OP

Лично я никогда не пробовал и не имел ни одного случая использования, где это когда-либо было бы необходимо. Так что это концепция, но возможная, это все предположения на данный момент относительно всего, что я понимаю. Особенно хеширование и сериализация этого после того, как вы сделаете то, что вы планируете с этим сделать. Командлеты файловой системы будут работать только в файловой системе по замыслу.

Что касается помещения вещей в буфер. Я отсылаю вас к посту в блоге Тревора Салливаназдесь, где он демонстрирует инициализацию массива байтов в PowerShell.

Иногда вам нужно инициализировать новый буфер как массив байтов. Например, если вы хотите сгенерировать случайные данные с помощью метода NextBytes() класса System.Random, вам нужно передать буфер массива байтов для записи в метод. Создание массива байтов в PowerShell может быть неочевидным.

Связанный контент