powershell - эмулировать Windows-D для очистки и восстановления экрана

powershell - эмулировать Windows-D для очистки и восстановления экрана

У меня есть запрос на получение скриншота значков рабочего стола пользователя. Я могу использовать Powershell для захвата, но сначала нужно очистить экран, сделать снимок, а затем восстановить экран. Нажатия клавиш «Windows+D» сделают это, но клавиша Windows не является опцией для имитации в Powershell. Есть ли другой способ сделать снимок рабочего стола?

Большое спасибо!

решение1

вот решение, которое также делает снимок экрана. Я использую его в своих скриптах, где мне нужно сделать снимок экрана чего-либо. зачем автоматизировать только часть задачи, когда можно автоматизировать все ;-) верно?

# Take Screenshot function - reads width and height from WMI, saves in outfile path
function Take-Screenshot([string]$outfile) 
{
    [int]$PrtScrnWidth = (gwmi Win32_VideoController).CurrentHorizontalResolution
    [int]$PrtScrnHeight = (gwmi Win32_VideoController).CurrentVerticalResolution
    $bounds = [Drawing.Rectangle]::FromLTRB(0, 0, $PrtScrnWidth, $PrtScrnHeight)
    $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($outfile)
    $graphics.Dispose()
    $bmp.Dispose()
}

# Minimize all the Windows
$shell = New-Object -ComObject "Shell.Application"
$shell.minimizeall()

#sleep to make sure not to screenshot while everything is still minimizing
sleep -s 2

# Take the Screenshot - choose your outfile path
Take-Screenshot -outfile C:\Batch\test4.png

# get your screen back
$shell.undominimizeall()

решение2

Есть примерздесь.

Я наткнулся на этот небольшой совет, исследуя объект shell.application com. Он имеет и другие полезные функции, такие как undominimizeall, каскадные окна и многие другие функции проводника.

$shell = New-Object -ComObject "Shell.Application"
$shell.minimizeall()

Вы также можете отменить сворачивание всех окон, используя приведенный ниже код.

$shell = New-Object -ComObject "Shell.Application"
$shell.undominimizeall()

Связанный контент