Ich mache eine Bildschirmaufnahme-Anwendung und alles läuft gut. Ich muss nur das aktive Fenster erfassen und einen Screenshot dieses aktiven Fensters machen. Weiß jemand, wie ich das machen kann?
c#
screenshot
active-window
Benutzer
quelle
quelle
Antworten:
http://www.developerfusion.com/code/4630/capture-a-screen-shot/
quelle
zur Erfassung der aktuellen Fensterverwendung
quelle
Ich schlage die nächste Lösung für die Erfassung eines aktuell aktiven Fensters (nicht nur unserer C # -Anwendung) oder des gesamten Bildschirms mit Cursorpositionsbestimmung relativ zur linken oberen Ecke des Fensters bzw. Bildschirms vor:
quelle
Rect
durch System zu ersetzenRectangle
, aber danach hat die Funktion einGetWindowRect
falsches Rechteck zurückgegeben. StattRight
undTop
es festgelegtWidth
undHeight
der Ausgang Rechteck.var thisWindowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
stattdessen verwendenHier ist ein Ausschnitt, mit dem Sie entweder den Desktop oder das aktive Fenster erfassen können. Es enthält keinen Verweis auf Windows Forms.
So erfassen Sie den gesamten Bildschirm:
So erfassen Sie das aktive Fenster:
Ursprünglich hier gefunden: http://www.snippetsource.net/Snippet/158/capture-screenshot-in-c
quelle
Der Code von KvanTTT hat großartig funktioniert. Ich habe es ein wenig erweitert, um ein wenig mehr Flexibilität beim Speichern des Formats sowie die Möglichkeit zum Speichern mit hWnd, .NET Control / Form zu ermöglichen. Mit einigen Optionen können Sie eine Bitmap abrufen oder in einer Datei speichern.
quelle
Ich nehme an, Sie verwenden
Graphics.CopyFromScreen
, um den Screenshot zu erhalten.Sie können P / Invoke verwenden, um GetForegroundWindow abzurufen ( und dann seine Position und Größe abzurufen ), um zu bestimmen, aus welcher Region Sie kopieren müssen.
quelle
Sie können den Code aus dieser Frage verwenden: Wie kann ich einen Screenshot direkt in einer Datei in Windows speichern?
Wechseln
WIN32_API.GetDesktopWindow()
Sie einfach in die Handle-Eigenschaft des Fensters, das Sie erfassen möchten.quelle
Durch eine kleine Änderung der Methode static void ImageSave () erhalten Sie die Option, wo Sie sie speichern können. Das Guthaben geht an Microsoft (http://msdn.microsoft.com/en-us/library/sfezx97z.aspx)
Ihr button_click-Ereignis sollte ungefähr so codiert sein ...
quelle
Wenn Sie verwalteten Code verwenden möchten: Dadurch wird jedes Fenster über die ProcessId erfasst.
Ich habe Folgendes verwendet, um das Fenster zu aktivieren.
Ich habe den Druckbildschirm verwendet, um ein Fenster aufzunehmen.
quelle
Verwenden Sie den folgenden Code:
quelle
Basierend auf der Antwort von ArsenMkrt, aber mit dieser können Sie ein Steuerelement in Ihrem Formular erfassen (ich schreibe beispielsweise ein Tool, das ein WebBrowser-Steuerelement enthält und nur dessen Anzeige erfassen möchte). Beachten Sie die Verwendung der PointToScreen-Methode:
Mit dem Bitmap-Objekt können Sie einfach Speichern aufrufen
Oben wird davon ausgegangen, dass der GC die Bitmap abruft. Vielleicht ist es jedoch besser, das Ergebnis von someControl.getScreenshot () einer Bitmap-Variablen zuzuweisen und diese Variable dann manuell zu entsorgen, wenn Sie mit jedem Bild fertig sind, insbesondere wenn Sie dies häufig tun ( Angenommen, Sie haben eine Liste von Webseiten, die Sie laden und Screenshots davon speichern möchten.
Noch besser ist, dass eine using-Klausel verwendet werden könnte, die den zusätzlichen Vorteil hat, dass die Bitmap-Ressourcen auch im Falle einer Ausnahme innerhalb des using (child) -Blocks freigegeben werden:
Aktualisieren:
Jetzt wird das WebCapture-Tool von ClickOnce ( http://gallery.clipflair.net/WebCapture ) aus dem Web bereitgestellt ( dank ClickOnce bietet es auch eine gute Unterstützung für die automatische Aktualisierung). Den Quellcode finden Sie unter https://github.com/Zoomicon / ClipFlair / tree / master / Server / Tools / WebCapture
quelle