Wie können mithilfe von Powershell zwei Screenshots im Puffer verglichen werden?

Wie können mithilfe von Powershell zwei Screenshots im Puffer verglichen werden?

ich fanddieser Ausschnittdas funktioniert bei mir gut in einer Schleife, um Screenshots pro Minute zu machen. Ich könnte die Ergebnisse hashen und die beiden letzten Screenshots auf Änderungen vergleichen, indem ich folgedieser Beitrag: (Get-FileHash $fileA).hash -ne (Get-FileHash $fileC).hashinnerhalb einer If-Anweisung.

Ich dachte daran, auf Screenshots im Puffer zu verweisen, anstatt sie auf der Festplatte zu speichern. Ich meine, ich möchte Screenshots im Puffer behalten und sie dann vergleichen, während dieser Snippet sie speichert.

Antwort1

Mit dem Code, den Sie angeblich verwenden, ist das nicht möglich.

$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..

Debuggen für Arme - Verwenden von Variablen-Squeezing zum Zuweisen und Anzeigen von Ausgabeergebnissen Entfernen Sie die Randklammern vor der Übermittlung

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

Sie werden feststellen, dass die obige Ausgabe nichts Physisches/Dateisystembezogenes enthält, sondern alles, was Sie für Ihren Anwendungsfall benötigen.

Natürlich können Sie den Code so verwenden, wie er ist, den Bilddateinamen erhöhen, den Vergleich durchführen und entscheiden, was gelöscht wird.

Die FileSystem-Cmdlets (wie ...Get-FileHash, usw.) bedeutet, dass Sie an einer serialisierten Datei arbeiten.

Get-File​Hash

Modul:Microsoft.PowerShell.Utility

Berechnet den Hashwert für eine Datei unter Verwendung eines angegebenen Hashalgorithmus.

Update für OP

Ich persönlich habe es nie ausprobiert und hatte auch nie einen Anwendungsfall, bei dem es jemals nötig war. Es ist also ein Konzept, aber möglich, es ist an diesem Punkt alles Spekulation im Verhältnis zu allem, was ich verstehe. Insbesondere das Hashen und Serialisieren, nachdem Sie getan haben, was auch immer Sie damit vorhaben. Dateisystem-Cmdlets funktionieren konzeptgemäß nur auf dem Dateisystem.

Was das Einlegen des Materials in den Puffer betrifft, verweise ich Sie auf Trevor Sullivans BlogbeitragHier, wo er die Initialisierung eines Byte-Arrays in PowerShell demonstriert.

Manchmal müssen Sie einen neuen Puffer als Byte-Array initialisieren. Wenn Sie beispielsweise mit der Methode NextBytes() der Klasse System.Random zufällige Daten generieren möchten, müssen Sie einen Byte-Array-Puffer übergeben, in den die Methode schreiben kann. Das Erstellen eines Byte-Arrays in PowerShell ist möglicherweise nicht sofort offensichtlich.

verwandte Informationen