Как я могу сделать снимок экрана в Windows PowerShell?

Как я могу получить экран в Windows PowerShell? Я должен смочь сохранить экран на диск.

33
задан Start-Automating 3 June 2010 в 19:59
поделиться

2 ответа

Вы также можете использовать .NET для программного создания снимка экрана (что дает вам более тонкий контроль):

[Reflection.Assembly]::LoadWithPartialName("System.Drawing")
function screenshot([Drawing.Rectangle]$bounds, $path) {
   $bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height
   $graphics = [Drawing.Graphics]::FromImage($bmp)

   $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)

   $bmp.Save($path)

   $graphics.Dispose()
   $bmp.Dispose()
}

$bounds = [Drawing.Rectangle]::FromLTRB(0, 0, 1000, 900)
screenshot $bounds "C:\screenshot.png"
39
ответ дан 27 November 2019 в 18:06
поделиться

Эта функция PowerShell захватит экран в PowerShell и сохранит его в автоматически пронумерованный файл. Если используется переключатель -OfWindow, то будет захвачено текущее окно.

Это работает с использованием встроенных трюков PRINTSCREEN / CTRL-PRINTSCREEEN и использует кодировщик растровых изображений для сохранения файла на диск.

function Get-ScreenCapture
{
    param(    
    [Switch]$OfWindow        
    )


    begin {
        Add-Type -AssemblyName System.Drawing
        $jpegCodec = [Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | 
            Where-Object { $_.FormatDescription -eq "JPEG" }
    }
    process {
        Start-Sleep -Milliseconds 250
        if ($OfWindow) {            
            [Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")        
        } else {
            [Windows.Forms.Sendkeys]::SendWait("{PrtSc}")        
        }
        Start-Sleep -Milliseconds 250
        $bitmap = [Windows.Forms.Clipboard]::GetImage()    
        $ep = New-Object Drawing.Imaging.EncoderParameters  
        $ep.Param[0] = New-Object Drawing.Imaging.EncoderParameter ([System.Drawing.Imaging.Encoder]::Quality, [long]100)  
        $screenCapturePathBase = "$pwd\ScreenCapture"
        $c = 0
        while (Test-Path "${screenCapturePathBase}${c}.jpg") {
            $c++
        }
        $bitmap.Save("${screenCapturePathBase}${c}.jpg", $jpegCodec, $ep)
    }
}

Надеюсь, это поможет

11
ответ дан 27 November 2019 в 18:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: