PowerShell を使用して、バッファー内で 2 つのスクリーンショットを比較するにはどうすればよいですか?

PowerShell を使用して、バッファー内で 2 つのスクリーンショットを比較するにはどうすればよいですか?

私は見つけたこのスニペットこれはループでうまく機能し、1分ごとにスクリーンショットを撮ることができます。結果をハッシュ化し、最新の2つのスクリーンショットの変更を比較することができます。この郵便受け: (Get-FileHash $fileA).hash -ne (Get-FileHash $fileC).hashIf ステートメント内。

私は、スクリーンショットを HDD に保存するのではなく、バッファ内で参照することを考えていました。つまり、スクリーンショットをバッファ内に保存しておき、そのスニペットが保存している間に比較したいのです。

答え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 コマンドレット (... など)取得-ファイルハッシュなど)は、シリアル化されたファイルで作業していることを意味します。

ファイルハッシュの取得

モジュール:Microsoft.PowerShell.Utility

指定されたハッシュ アルゴリズムを使用してファイルのハッシュ値を計算します。

OP のアップデート

個人的には、試したことはなく、必要なユースケースもありませんでした。つまり、これは概念ではありますが、可能であり、現時点では私が理解している限りすべて推測にすぎません。特に、計画している操作を実行した後にハッシュ化とシリアル化を行うことです。ファイルシステム コマンドレットは、設計上、ファイルシステムでのみ機能します。

バッファにデータを入れる方法については、Trevor Sullivanのブログ記事を参照してください。ここここでは、PowerShell でバイト配列を初期化するデモを行っています。

場合によっては、新しいバッファーをバイト配列として初期化する必要があります。たとえば、System.Random クラスの NextBytes() メソッドを使用してランダム データを生成する場合は、メソッドが書き込むバイト配列バッファーを渡す必要があります。PowerShell でバイト配列を作成することは、すぐにはわからないかもしれません。

関連情報