powershell - mô phỏng Windows-D để xóa và khôi phục màn hình


0

Tôi có một yêu cầu để có được một ảnh chụp màn hình của các biểu tượng máy tính để bàn của người dùng. Tôi có thể sử dụng Powershell để chụp, nhưng cần xóa màn hình trước, chụp, sau đó khôi phục màn hình. Phím tắt 'Windows + D "sẽ làm điều đó, nhưng phím Windows không phải là một tùy chọn để mô phỏng trong Powershell. Có cách nào khác để chụp ảnh màn hình của máy tính để bàn không?

Cảm ơn nhiều!

Câu trả lời:


2

đây là một giải pháp cũng có ảnh chụp màn hình. Tôi đang sử dụng nó trong các kịch bản của mình, nơi tôi cần chụp màn hình một cái gì đó. Tại sao chỉ tự động hóa các phần của nhiệm vụ, khi bạn cũng có thể tự động hóa mọi thứ ;-) phải không?

# 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()

Thật tuyệt vời! Cảm ơn, đó là 'tối thiểu hóa tất cả các cửa sổ' mà tôi cần. Tôi không thấy làm thế nào bạn tìm thấy điều đó, không có cách nào để theo dõi những gì 'Windows + D "thực sự gọi. Cảm ơn rất nhiều !!
JCauble

SimonS, nếu bạn vẫn ở đó, làm cách nào tôi có thể thay đổi dòng "Chụp ảnh màn hình -outfile C: \ Batch \ test4.png" thành một biến? Mọi thứ tôi đã làm cho đến nay đều dẫn đến lỗi tại dòng "$ bmp.Save ($ outfile)", trong đó nêu rõ "" Đường dẫn không phải là một hình thức hợp pháp "". Tùy thuộc vào nơi nó được chạy từ đó, tôi cần thay đổi đường dẫn. Cảm ơn một lần nữa!
JCauble

@ Bạn có thể làm một cái gì đó như thế này $outfile = Z:\somewhere\somewhat.pngvà sau đóTake-Screenshot -outfile $outfile
SimonS

@JCauble nếu bạn có ý nghĩa tên của ảnh chụp màn hình chính nó nên được thay đổi, bạn có thể thêm một DateTime hoặc $env:computernamenhư thế này $DateTime = (get-date).tostring('yyyyMMdd-HHmmss')và sau đóTake-Screenshot -outfile "Z:\somewhere\somewhat-$DateTime-$env:computername.png"
Simons

1

Có ví dụ ở đây .

Tôi đã xem qua mẹo nhỏ này trong khi khám phá đối tượng com shell.application. Nó có các chức năng hữu ích khác như undominimizeall, cửa sổ tầng và nhiều chức năng thám hiểm khác.

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

Bạn cũng có thể hoàn tác thu nhỏ tất cả các cửa sổ bằng cách sử dụng mã dưới đây.

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

SimonS, nếu bạn vẫn ở đó, làm cách nào tôi có thể thay đổi dòng "Chụp ảnh màn hình -outfile C: \ Batch \ test4.png" thành một biến? Mọi thứ tôi đã làm cho đến nay đều dẫn đến lỗi tại dòng "$ bmp.Save ($ outfile)", trong đó nêu rõ "" Đường dẫn không phải là một hình thức hợp pháp "". Tùy thuộc vào nơi nó được chạy từ đó, tôi cần thay đổi đường dẫn. Cảm ơn một lần nữa!
JCauble

VÂNG! Đó chính xác là những gì tôi cần! Tôi không biết tại sao tôi không thể làm cho nó hoạt động trước đây, nhưng tôi đang học và thực sự đánh giá cao những lời khuyên này.
JCauble
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.