Screen-Capture-Spezifischen Fenster
Ist es möglich, screen-capture ein bestimmtes Fenster (auch evtl. von einem anderen Prozess?)
Derzeit bin ich der Erfassung der gesamten desktop, von einem bestimmten monitor, aber was ich wirklich will ist das erfassen der Inhalte von einem bestimmten Fenster (unabhängig von seiner position).
Es ist einfach: Sie tun eine
Roman R., Wie finde ich das Rechteck von Interesse? Gibt es eine Möglichkeit, zu iterieren über alle Fenster und finden Sie Ihre Rechtecke?
Wenn Sie spezielle Fenster, dann haben Sie Ihre
Ich habe kein Griff, nur den Namen des Fensters.
BitBlt
von desktop-DC in Ihrer bitmap. Für bestimmte Fenster, das Sie kopieren Sie nicht den gesamten desktop, sondern nur das Rechteck von Interesse (die ist GetWindowRect
Ihrer spezifischen Fenster). Ja, es kann sein, ein Fenster von einem anderen Prozess verwendet.Roman R., Wie finde ich das Rechteck von Interesse? Gibt es eine Möglichkeit, zu iterieren über alle Fenster und finden Sie Ihre Rechtecke?
Wenn Sie spezielle Fenster, dann haben Sie Ihre
HWND
Griff. GetWindowRect
gibt Sie Ihren Bildschirm-Koordinaten.Ich habe kein Griff, nur den Namen des Fensters.
FindWindow
bekommt man die HWND
dann. Oder Sie müssen EnumWindows
zu finden, die Sie brauchen, und sein Griff.InformationsquelleAutor ronag | 2012-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, es ist. Alles, was Sie brauchen, bekommen Sie Griff zum Fenster, das Sie erfassen möchten, und verwenden WinAPI-Funktion PrintWindow zum Beispiel:
Hier Sie haben PrintWindow Dokumentation.
Ja, tut es 🙂
Wie gehen Sie und speichern Sie den screenshot (oder die Daten) nach PrintWindow?
Aus der PrintWindow Dokumentation: "Die Anwendung, der das Fenster besitzt verweist hWnd [...] erhält ein WM_PRINT Nachricht oder [...] eine WM_PRINTCLIENT Nachricht." - In anderen Worten: Die Quelle-Fenster implementieren muss, um ein
WM_PRINT
/WM_PRINTCLIENT
message handler. Wenn nicht, istPrintWindow
wird nicht funktionieren. Dies ist nicht eine Allgemeine Lösung.InformationsquelleAutor Blood
Ja, Genauso einfach, wie die Aufnahme den gesamten Bildschirm. Verwenden Sie einfach
GetWindowDC()
auf das gewünschte Fenster, anstattGetDesktopWindow()
, dannBitBlt()
aus, die zu Ihren Ziel-DC. Sie können auch Holen Sie sich die richtige Größe mithilfeGetWindowRect()
.Beachten Sie, dass diese Methode ermöglicht auch das erfassen von versteckt/abgedeckt windows, wo ein full screenshot mit ein umschließendes Rechteck nicht.
Sehen diese Frage für einige weitere details.
InformationsquelleAutor Deanna