1

所以我正在使用 power shell 运行 ui 测试。

当我收到错误时,我想只截取 ie 窗口的屏幕截图,这可以通过 alt print scrn 完成

%{prtsc}

但它只需要活动窗口的 jpg。

我试过这个
$h = (Get-Process iexplore).MainWindowHandle SetForegroundWindow((Get-Process -name iexplore).MainWindowHandle) sleep -sec 2 $h = (Get-Process -id $pid).Ma​​inWindowHandle

此外,任何有关识别错误的方法的帮助都将非常感谢。

function screenshot
{
    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)
    }
}
4

2 回答 2

2

您是否注意捕获没有 % 的整个屏幕:

Add-Type -Assembly System.Windows.Forms
Start-Sleep -seconds 1

## Capture the entire screen 
[System.Windows.Forms.Sendkeys]::SendWait("{PrtSc}") 

## Capture the current window 
[System.Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")
于 2011-07-17T09:37:23.593 回答
2

设置活动窗口

您需要做一些不同的事情。首先,您需要以这种方式设置活动窗口:

如何从 Powershell 事件订阅者操作​​设置前台窗口

获取正确的窗口

接下来,您需要处理 IE 产生至少两个进程的事实。所以你需要抓住正确的窗口。

$h = Get-Process | Where-Object {$_.MainWindowTitle -like "My website*"} | Select-Object -ExpandProperty MainWindowHandle

截屏

现在您可以通过以下两种方式之一来截取屏幕截图。

  1. 像 JPBlanc 向您展示的那样发送 PrtSc。

    Add-Type -Assembly System.Windows.Forms
    Start-Sleep -seconds 1
    
    ## Capture the current window 
    [System.Windows.Forms.Sendkeys]::SendWait("%{PrtSc}")
    
  2. 来自 PoschCode 的截图脚本

于 2011-08-18T16:16:57.657 回答