Ảnh chụp màn hình của cửa sổ không hoạt động


7

Làm thế nào để chụp ảnh màn hình của cửa sổ không hoạt động? Nếu tôi có 2 cửa sổ, tôi muốn chụp ảnh màn hình của cửa sổ đang chạy ẩn.


Thật thú vị, tôi không chắc nếu điều đó có thể.
phunehehe

1
Tôi nghĩ bạn nên cải thiện câu hỏi của mình bằng cách làm rõ những gì có nghĩa là "không hoạt động". Có phải cửa sổ này, có lẽ không phải là cửa sổ được lấy nét, hoàn toàn có thể nhìn thấy hoặc hiển thị một phần hoặc hoàn toàn không nhìn thấy được vì cửa sổ đang hoạt động bao gồm một phần hoặc toàn bộ?

Câu trả lời:


6

Để giải thích một chút về các câu trả lời và nhận xét trước đó, khả năng chụp ảnh màn hình của một cửa sổ không hoạt động (như bị ẩn hoàn toàn hoặc một phần) dường như phụ thuộc vào trình quản lý cửa sổ.

Sử dụng lệnh sau (đã cho):

import -window <windowid> image.png

hoặc là

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

(các -số convertlà dành cho sử dụng đầu vào tiêu chuẩn từ đường ống, xwd:kể định dạng của các đầu vào) ai có vẻ để có thể dưới Giác Ngộ (E17, thử nghiệm với Fedora 19) để chụp một ảnh chụp màn hình của:

  • cửa sổ ẩn hoàn toàn hoặc một phần;
  • cửa sổ thu nhỏ;
  • cửa sổ trên các không gian làm việc khác.

Tôi đã kiểm tra với Openbox (cùng cấu hình) và KDE (với phiên bản Khoa học Linux 4.8 cũ và phiên bản mới nhất của ImageMagick(vâng, thật không thể biên dịch được)) và trong cả hai trường hợp, ảnh chụp màn hình chỉ hiển thị những gì ở trên cùng của các lớp hiển thị - nghĩa là, chỉ những gì đã được hiển thị trên màn hình.

Vấn đề là các importkiểm tra lệnh cho các map_statelĩnh vực được trả về bởi XGetWindowAttributesđược IsViewable, và nếu không nó sẽ trả về một lỗi. Người ta có thể kiểm tra, map_stateví dụ như sử dụng:

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

Nó dường như luôn ở IsViewabledưới e17, trong khi nó IsUnMappednằm dưới openbox và KDE ngay khi cửa sổ được thu nhỏ hoặc bất cứ thứ gì.

Mặc dù không chắc chắn tại sao ảnh chụp màn hình luôn sạch với e17 trong khi nó bị trộn với các cửa sổ khác khi cửa sổ được khôi phục một phần với các WM khác, nhưng rõ ràng nó cũng phải làm theo cách WM xử lý màn hình.

Dù sao, rõ ràng đó là vấn đề của WM. Thật tuyệt khi có một danh sách các WM có thể và không thể chụp ảnh màn hình của các cửa sổ ẩn - Tôi không làm điều đó.


Thú vị cần biết: Bạn nhận được id cửa sổ nếu bạn làm xwininfo | grep -i 'window id'và nhấp vào cửa sổ được đề cập.
erik

không hoạt động nếu cửa sổ hoàn toàn vô hình (trong không gian làm việc khác, không phải cửa sổ hoạt động)
AnonymousLurker

Đối với tôi, cả hai lệnh đều hoạt động tốt ... trừ khi cửa sổ được thu nhỏ (Tôi đang sử dụng Peppermint Linux).
Stefan Reich

2

"Không hoạt động" nghĩa là gì? "Không có tiêu điểm" hoặc "bị ẩn bởi một số cửa sổ khác"? Trong trường hợp đầu tiên, gimp sẽ làm điều đó mà không gặp vấn đề gì (Tệp -> Tạo -> Ảnh chụp màn hình). Trong trường hợp thứ hai, nó khó khăn hơn (nếu có thể).


Có, không hoạt động có nghĩa là không có trọng tâm. Chúng ta có thể chụp ảnh màn hình của một tập trung. Chúng ta có thể làm cho cửa sổ không tập trung được tập trung bằng dòng lệnh không. Nếu vậy làm thế nào có thể được làm điều đó.
dành

Tôi muốn làm trong dòng lệnh, để tự động hóa quá trình.
dành

3
Tôi vừa kiểm tra rằng import(từ bộ ImageMagick) có một -window idtùy chọn. Nếu bạn biết mã định danh cửa sổ sẽ hoạt động, ngay cả trên dòng lệnh. Bạn có thể lấy mã định danh cửa sổ bằng cách sử dụng xwininfo, nhưng đối với điều đó bạn sẽ phải sử dụng chuột ít nhất một lần.
Uwe

Tôi có thể trích xuất cho chiều cao và chiều rộng cố định bằng cách nhập cùng với id cửa sổ. Tôi cũng đang kiểm tra điều đó.
dành

1
cho tôi trong `xprop -root | grep" _NET_CLIENT_LIST_STACKING (WINDOW): id cửa sổ "| tr '#' ',' | tr ',' '\ n' | grep 0x`; do xwininfo -id $ i | grep "Id cửa sổ"; xong

Sử dụng ở trên tôi đã có thể lấy id cửa sổ. và sử dụng

xwininfo
có thể tìm thấy nhãn hoặc tên hoặc tiêu đề của cửa sổ.


2
import -window <window_ID> screenshot.png
dành

Đây là bước cuối cùng để tự động hóa quá trình. Đây là một điều thú vị đối với tôi.
dành

0

Mặc dù câu trả lời này có thể không được mong muốn trong một số trường hợp, tập lệnh này sẽ nâng mọi cửa sổ trên màn hình hiện tại cùng một lúc để chúng có thể được chụp màn hình bằng công cụ chụp màn hình của bạn.

#!/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
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.