я нашелэтот фрагментэто хорошо работает в цикле для меня, чтобы делать скриншоты в минуту. Я мог бы хешировать результаты и сравнивать два последних скриншота на предмет изменений, следуяэта почта: (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 может быть неочевидным.