Wie kann ich den Bildschirm in Windows PowerShell erfassen? Ich muss in der Lage sein, den Bildschirm auf der Festplatte zu speichern.Wie kann ich eine Bildschirmaufnahme in Windows PowerShell machen?
Antwort
Sie auch .NET den Screenshot zu nehmen programmatisch nutzen können (die Sie eine feinere Kontrolle gibt):
[Reflection.Assembly]::LoadWithPartialName("System.Drawing")
function screenshot([Drawing.Rectangle]$bounds, $path) {
$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($path)
$graphics.Dispose()
$bmp.Dispose()
}
$bounds = [Drawing.Rectangle]::FromLTRB(0, 0, 1000, 900)
screenshot $bounds "C:\screenshot.png"
Diese PowerShell-Funktion erfasst den Bildschirm in PowerShell und speichert ihn in einer automatisch nummerierten Datei. Wenn der Schalter -OfWindow verwendet wird, wird das aktuelle Fenster erfasst.
Dies funktioniert mit den integrierten PRINTSCREEN/STRG-PRINTSCREEEN-Tricks, und es verwendet einen Bitmap-Encoder, um die Datei auf der Festplatte zu speichern.
function Get-ScreenCapture
{
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)
}
}
this helps
Gibt es zusätzliche Schritte erforderlich, um diese auf Windows 7 zu arbeiten? Beim Ausführen der Funktion wird der folgende Fehler angezeigt: "Typ [Windows.Forms.Sendkeys] kann nicht gefunden werden: Stellen Sie sicher, dass die Assembly, die diesen Typ enthält, geladen wird." und dann ein weiterer Fehler "Typ [Windows.Forms.Clipboard] kann nicht gefunden werden: Stellen Sie sicher, dass die Assembly, die diesen Typ enthält, geladen wird." , und dann noch ein Fehler (aber ich denke, weil die vorherigen zwei Anrufe fehlgeschlagen sind). – monojohnny
Sie haben Winforms wahrscheinlich nicht geladen. Ich würde dir empfehlen, einfach das Modul herunterzuladen, auf das sich diese Antwort jetzt befindet: [RoughDraft] (http://gallery.technet.microsoft.com/RoughDraft-cfeb6e98) –
Microsoft ein Skript Powershell haben Sie hier:
http://gallery.technet.microsoft.com/scriptcenter/eeff544a-f690-4f6b-a586-11eea6fc5eb8
Ich habe gerade versucht ich t auf einem Windows-7-Maschine und damit arbeiten, in der Commandline am Beispiel bereitgestellt:
Take-ScreenShot -screen -file "C:\image.png" -imagetype png
Wo platzieren Sie diese .ps1-Datei, so dass Sie nicht den gesamten Netzwerkpfad eingeben müssen? – Aaron
@Aaron, nicht ganz sicher, wie dies am besten zu tun ist - aber wahrscheinlich in Powershell-Profil (vielleicht entweder durch Bearbeiten der PATH-Variable oder mit einem Alias): Dieser Artikel kann helfen: http: //stackoverflow.com/questions/714877/setting-windows-powershell-pfadvariable – monojohnny
Öffnen mit ... führt zu keinem Ergebnis. Die Eingabe in der Konsole, die sie dann aufruft, erzeugt auch keine Eingabe. Das ist Windows 10 und dieser Thread ist seit Jahren hier, ohne dass es Input gibt. –
Aus Gründen der Fertigstellung dieses Skript Sie Screenshots über mehrere Monitore nehmen können.
Basiscode stammt aus Jeremy
[Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
function screenshot($path)
{
$width = 0;
$height = 0;
$workingAreaX = 0;
$workingAreaY = 0;
$screen = [System.Windows.Forms.Screen]::AllScreens
foreach ($item in $screen)
{
if($workingAreaX -gt $item.WorkingArea.X)
{
$workingAreaX = $item.WorkingArea.X
}
if($workingAreaY -gt $item.WorkingArea.Y)
{
$workingAreaY = $item.WorkingArea.Y
}
$width = $width + $item.Bounds.Width;
if($item.Bounds.Height -gt $height)
{
$height = $item.Bounds.Height;
}
}
$bounds = [Drawing.Rectangle]::FromLTRB($workingAreaX, $workingAreaY, $width, $height)
$bmp = New-Object Drawing.Bitmap $width, $height
$graphics = [Drawing.Graphics]::FromImage($bmp)
$graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)
$bmp.Save($path)
$graphics.Dispose()
$bmp.Dispose()
}
kann mit dem heißen: Screenshot "D: \ screenshot.png"
- 1. Bildschirmaufnahme von Windows-Dienst
- 2. Bildschirmaufnahme in Haskell?
- 3. Wie erhalte ich eine Bildschirmaufnahme mit doppelter Auflösung?
- 4. Wie kann ich System.Xml.XmlWriter in Powershell
- 5. Wie kann ich eine HTTPS-Anfrage in Haskell machen?
- 6. Bildschirmaufnahme mit Espresso
- 7. Wie kann ich eine Rasteransicht editierbar machen?
- 8. Schnelle Bildschirmaufnahme Java
- 9. Wie kann ich Powershell-Ausnahmebeschreibungen in eine Zeichenfolge eingeben?
- 10. Wie kann ich eine Konfigurationsdatei in Powershell-Skripte einbinden?
- 11. Wie repariere ich eine defekte Powershell-Installation?
- 12. Bildschirmaufnahme ohne Hauptfenster
- 13. Wie kann ich Variableneigenschaften in Powershell vergleichen?
- 14. Wie kann ich Dateien in Powershell großumbenennen?
- 15. Wie kann ich ein Python-Skript zu einem Drop-In für eine ausführbare Windows-Datei machen?
- 16. Wie bekomme ich die NetworkCategory vor Windows 8 in PowerShell?
- 17. Generieren einer Website-Bildschirmaufnahme in iOS
- 18. Wie kann ich eine ComboBox in .NET nicht editierbar machen?
- 19. Wie kann ich eine Änderung in RTC (Eclipse) redigierbar machen?
- 20. Wie kann ich eine Binärcodierung eines Strings in Python machen?
- 21. Wie kann ich eine Sitzung in MVC5-Identität ungültig machen?
- 22. Wie kann ich eine Exe in NetBeans machen?
- 23. Wie kann ich eine Matrixaddition in rethinkDB machen?
- 24. Wie kann ich eine 'ODER' Anweisung in ActiveRecord machen?
- 25. Wie kann ich in MySQL eine umgekehrte Bedingung machen?
- 26. Wie kann ich eine jsonp Anfrage in PHP machen?
- 27. Wie kann ich eine Textbox nur lesbar in PHP machen
- 28. Wie kann ich eine vorhandene C# -Bibliothek UWP-kompatibel machen?
- 29. Ich kann Repo auf Windows mit Powershell nicht klonen
- 30. Wie erstelle ich Datei Hardlink in PowerShell unter Windows 10?
Großartig - wie schwer wäre es, das Fenster zu erfassen einer bestimmten Anwendung? Ich erstelle eine IE-Instanz wie folgt: $ ie = new-object -com "InternetExplorer.Application" - wäre es beispielsweise möglich, nur die Ausgabe dieses Fensters zu erfassen? – monojohnny
vor 7 Jahren und immer noch arbeiten – hoangpx