Usando o PowerShell, como duas capturas de tela podem ser comparadas no buffer?

Usando o PowerShell, como duas capturas de tela podem ser comparadas no buffer?

eu encontreieste trechoisso está funcionando bem em loop para eu fazer capturas de tela por minuto. Eu poderia fazer o hash dos resultados e comparar as duas capturas de tela mais recentes em busca de alterações seguindoesta postagem: (Get-FileHash $fileA).hash -ne (Get-FileHash $fileC).hashdentro de uma instrução If.

Eu estava pensando em me referir às capturas de tela no buffer em vez de salvá-las no disco rígido. Quero dizer, quero manter as capturas de tela no buffer e compará-las enquanto o trecho as salva.

Responder1

Não é possível com o código que você diz estar usando.

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

Depuração do pobre homem - usando compressão de variável para atribuir e exibir resultados de saída Remova os parênteses de borda antes da entrega

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

Você notará que nada relacionado ao sistema físico/de arquivos, por meio da saída acima, fornece tudo o que você pode obter para o seu caso de uso.

Claro, você pode usar o código como ele, incrementar o nome do arquivo de imagem, fazer a comparação e decidir qual deletar.

Os cmdlets FileSystem (como...Obter-FileHash, etc...), significa que você está trabalhando em um arquivo serializado.

Obter hash de arquivo

Módulo:Microsoft.PowerShell.Utility

Calcula o valor de hash de um arquivo usando um algoritmo de hash especificado.

Atualização para OP

Pessoalmente, nunca tentei e nunca tive um caso de uso em que fosse necessário. Então, é um conceito, mas possível, é tudo especulação neste momento em relação a tudo que entendo. Especialmente hash e serialização depois de fazer o que você planeja fazer com ele. Os cmdlets do sistema de arquivos só funcionarão no sistema de arquivos por design.

Quanto a colocar as coisas no buffer. Direciono você para a postagem do blog de Trevor Sullivanaqui, onde ele demonstra a inicialização de uma matriz de bytes no PowerShell.

Às vezes você precisará inicializar um novo buffer como uma matriz de bytes. Por exemplo, se você deseja gerar dados aleatórios usando o método NextBytes() na classe System.Random, você precisa passar um buffer de matriz de bytes para o método gravar. A criação de uma matriz de bytes no PowerShell pode não ser imediatamente óbvia.

informação relacionada