我有一个请求,要求获取用户桌面图标的屏幕截图。我可以使用 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()