为了详细说明以前的答案和评论,捕获非活动窗口(如完全或部分隐藏)的屏幕截图的能力似乎取决于窗口管理器。
使用以下(已经给出)命令:
import -window <windowid> image.png
Run Code Online (Sandbox Code Playgroud)
或者
xwd -id <windowid> | convert xwd:- image.png
Run Code Online (Sandbox Code Playgroud)
(the -ofconvert用于使用来自管道的标准输入,xwd:告诉输入的格式)似乎可以在Enlightenment(e17,用 Fedora 19 测试)下捕获以下屏幕截图:
我检查了Openbox(相同的配置)和KDE(使用旧的 Scientific Linux 4.8 和最新版本的ImageMagick(是的,它编译得令人难以置信……)),在这两种情况下,屏幕截图都只显示显示层顶部的内容——也就是说,只有屏幕上已经可见的内容。
关键是该import命令检查map_state由XGetWindowAttributesto be返回的字段IsViewable,如果没有,则返回错误。可以检查map_state例如使用:
xwininfo -id <windowid> | grep 'Map State'
Run Code Online (Sandbox Code Playgroud)
它似乎总是IsViewable在 e17 下,而IsUnMapped一旦窗口最小化或其他什么,它就在 openbox 和 KDE 下。
不确定为什么当窗口与其他 WM 部分恢复时,屏幕截图总是使用 e17 保持干净,而它与其他窗口混合,但显然这也与 WM 处理显示的方式有关。
无论如何,显然这是WM的问题。最好有一个 WMs 列表能够和不能做隐藏窗口的屏幕截图——我没有这样做。
for i in `xprop -root|grep "_NET_CLIENT_LIST_STACKING(WINDOW): 窗口 id" |tr '#' ','|tr ',' '\n'| grep 0x`;do xwininfo -id $i|grep "窗口 ID" ;完成
使用上面的内容我能够获取 Windows id。并使用
微信信息能够找到窗口的标签或名称或标题。