Screenshot des nicht aktiven Fensters

7

Wie mache ich einen Screenshot eines nicht aktiven Fensters? Wenn ich zwei Fenster habe, möchte ich den Screenshot des Fensters aufnehmen, das im Hintergrund ausgeführt wird.

spendyala
quelle
Interessant, ich bin mir nicht sicher, ob das möglich ist.
Phunehehe
1
Ich denke, Sie sollten Ihre Frage verbessern, indem Sie klarstellen, was unter "nicht aktiv" zu verstehen ist. Ist dieses Fenster, vermutlich nicht das im Fokus, vollständig sichtbar oder teilweise sichtbar oder überhaupt nicht sichtbar, weil das aktive Fenster einen Teil oder alles davon abdeckt?

Antworten:

6

Um ein wenig auf frühere Antworten und Kommentare einzugehen, scheint die Fähigkeit, einen Screenshot eines nicht aktiven Fensters (wie vollständig oder teilweise ausgeblendet) aufzunehmen, vom Fenstermanager abzuhängen.

Verwenden Sie den folgenden (bereits angegebenen) Befehl:

import -window <windowid> image.png

oder

xwd -id <windowid> | convert xwd:- image.png

(Das -of convertist für die Verwendung von Standardeingaben aus der Pipe vorgesehen und gibt xwd:das Format der Eingabe an.) Unter Aufklärung (e17, getestet mit Fedora 19) scheint es möglich zu sein, einen Screenshot von:

  • ganz oder teilweise versteckte Fenster;
  • minimierte Fenster;
  • Fenster in anderen Arbeitsbereichen.

Ich habe mit Openbox (gleiche Konfiguration) und KDE (mit einem alten Scientific Linux 4.8 und der neuesten Version von ImageMagick(ja, unglaublich kompiliert…)) nachgefragt und in beiden Fällen zeigen Screenshots nur, was sich über den Anzeigeebenen befindet - das heißt nur was ist schon auf dem Bildschirm sichtbar.

Der Punkt ist, dass der importBefehl prüft , ob das von zurückgegebene map_stateFeld XGetWindowAttributesist IsViewable, und wenn nicht, einen Fehler zurückgibt. Man kann map_statezB überprüfen mit:

xwininfo -id <windowid> | grep 'Map State'

Es scheint immer IsViewableunter e17 zu sein, während es IsUnMappedunter Openbox und KDE ist, sobald das Fenster minimiert ist oder was auch immer.

Ich bin mir zwar nicht sicher, warum der Screenshot mit e17 immer sauber ist, während er mit anderen Fenstern gemischt wird, wenn das Fenster teilweise mit anderen WMs wiederhergestellt wird, aber es hat natürlich auch mit der Art und Weise zu tun, wie das WM mit der Anzeige umgeht.

Wie auch immer, es ist eindeutig eine Frage von WM. Es wäre schön, eine Liste von WMs zu haben, die Screenshots von versteckten Fenstern machen können oder nicht - ich mache das nicht.

Skippy le Grand Gourou
quelle
Interessant zu wissen: Sie erhalten die Fenster-ID, wenn Sie dies tun xwininfo | grep -i 'window id'und auf das betreffende Fenster klicken.
Erik
funktioniert nicht, wenn das Fenster vollständig unsichtbar ist (in einem anderen Arbeitsbereich, nicht im aktiven)
AnonymousLurker
Für mich funktionieren beide Befehle einwandfrei ... es sei denn, das Fenster ist minimiert (ich verwende Peppermint Linux).
Stefan Reich
2

Was meinst du mit "nicht aktiv"? "Den Fokus nicht haben" oder "von einem anderen Fenster versteckt"? Im ersten Fall macht Gimp dies ohne Probleme (Datei -> Erstellen -> Screenshot). Im zweiten Fall ist es schwieriger (wenn es überhaupt möglich ist).

Uwe
quelle
Ja, nicht aktiv bedeutet, den Fokus nicht zu haben. Wir können einen Screenshot von einem fokussierten machen. Können wir das Fenster, das keinen Fokus hat, über die Befehlszeile fokussieren? Wenn ja, wie kann das gemacht werden?
Spendyala
Ich möchte in der Kommandozeile tun, um den Prozess zu automatisieren.
Spendyala
3
Ich habe gerade überprüft, ob import(aus der ImageMagick-Suite) eine -window idOption vorhanden ist. Wenn Sie die Fensterkennung kennen, die auch in der Befehlszeile funktionieren soll. Sie können die Fensterkennung mit abrufen xwininfo, müssen dafür jedoch mindestens einmal die Maus verwenden.
Uwe
Kann ich mithilfe des Imports zusammen mit der Fenster-ID eine feste Höhe und Breite extrahieren? Ich überprüfe das auch.
Ausgaben
1
für i in `xprop -root | grep" _NET_CLIENT_LIST_STACKING (WINDOW): Fenster-ID "| tr '#' ',' | tr ',' '\ n' | grep 0x`; do xwininfo -id $ i | grep "Window id"; done

Mit den oben genannten konnte ich die Windows-ID erhalten. und mit

xwininfo
in der Lage, die Beschriftung oder den Namen oder Titel des Fensters zu finden.

spendyala
quelle
2
import -window <window_ID> screenshot.png
Spendyala
Dies ist der letzte Schritt zur Automatisierung des Prozesses. Das ist interessant für mich.
Ausgaben
0

Obwohl diese Antwort in einigen Situationen möglicherweise nicht wünschenswert ist, öffnet dieses Skript jedes Fenster auf dem aktuellen Desktop nacheinander, damit sie mit Ihrem Screenshot-Tool du jour als Screenshot angezeigt werden können.

#!/bin/bash
# raiseAll - Mark Belanger - raise all windows

# get the ID of the current desktop
thisDT=`wmctrl -d |grep ' \* ' | awk '{print $1}'`

echo Raising windows for desktop $thisDT
for window in `wmctrl -l |grep " $thisDT " | awk '{print $1}'`
do
  echo Raising $window - put your screenshot command here
  wmctrl -i -a $window
  sleep 1
done
Mark Belanger
quelle