LINUX.ORG.RU

Как сделать скриншот окна?


0

0

Пишу на с++. Недавно стал писать под линукс и возникли вопросы. Нужно делать периодически скриншот окна и следить за определенными параметрами приложения. Я могу сделать скриншот экрана по координатам окна, но если окно перекрыто другим, то я получаю часть другого окна.

1. Можно как-нибудь делать скриншот окна перекрытого другим? Например в винде есть PrintWindow, которая отрисовывает окно в мой контекст. Есть ли что-то подобное в иксах? Или какой-то другой способ?

2. Если по первому пункту ответ «нет», то можно ли как-то по-другому решить вопрос? Мне приходит в голову только плодить дисплеи и размещать окна приложения за которыми хочу следить в них...

>1. Можно как-нибудь делать скриншот окна перекрытого другим? Например в винде есть PrintWindow

Копай в сторону композитных менеджеров. С композитом сиё делается

yoghurt ★★★★★
()
Ответ на: комментарий от Kosyak

нет

Note on X11 that if the given window doesn't have the same depth as the root window, and another window partially or entirely obscures the one you grab, you will not get pixels from the overlying window. The contents of the obscured areas in the pixmap will be undefined and uninitialized.

alex_custov ★★★★★
()

> 2. Если по первому пункту ответ «нет», то можно ли как-то по-другому решить вопрос? Мне приходит в голову только плодить дисплеи и размещать окна приложения за которыми хочу следить в них...

Поднимай окно наверх. В Qt4 это raise или activateWindow, хак, конечно, но что поделаешь?

rival ★★
()

Ъ-way. Инжект в процесс с окном.

tensai_cirno ★★★★★
()

«import -window <id>» же как то заставляет нужное окно отрисовать в буфер, можно код его посмотреть.

Lucky1 ★★★
()
Ответ на: комментарий от Lucky1

Плюсую за просмотр кодов ImageMagic (или можно попроще - scrot какой-нибудь).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Lucky1

спрятанное или частично закрытое окно оно не отрисует правильно, в X11 это невозможно без композитинга.

alex_custov ★★★★★
()
Ответ на: комментарий от Deleted

>>а composite?

это похоже единственный вариант. Sad, but true

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.