
У меня есть запрос на получение скриншота значков рабочего стола пользователя. Я могу использовать 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()