나는 창의 스크린샷을 (스크립트로) 찍어야 하는데, 그 중 일부는 다른 창에 의해 부분적으로 또는 완전히 숨겨질 수 있습니다. 물론, 그러한 경우에는 스크린샷이 쓸모가 없으므로 경고를 인쇄하는 것이 좋습니다.
아쉽게도 제가 사용할 수 있는 상황은 아닙니다숨겨진 창이나 최소화된 창까지 인쇄하는 창 관리자— 저는 오래된 KDE를 사용하고 있습니다.
xwininfo -id <windowid> | grep "Map State"
예를 들어 창(기본적으로 표준 스크린샷 도구가 불평하지 않음을 의미함)을 확인하는 데 사용할 수 있지만 IsViewable
창이 다른 창과 겹치는지 확인하는 방법과 그 정도를 확인하는 방법을 알 수 없는 것 같습니다. 예를 들어 창의 50% 미만이 표시되면 경고를 인쇄할 수 있습니다.
(나는 그것이 존재한다고 믿지 않기 때문에 실제로 해결하려고 노력하고 있기 때문에 누군가 나에게 스크린샷이 가치가 있도록 창을 "가상적으로 다시 그리는" 쉬운 방법을 알려준다면 불평하지 않을 것입니다…)
답변1
내가 아는 한(그러나 나는 X 전문가는 아닙니다) 가시성은 VisibilityNotify
이벤트를 통해서만 추적되며 처럼 쿼리할 수 있는 상태는 아닙니다 IsViewable
. 이를 내보내려면 KDE를 구해야 합니다. 그것이 가능한지는 모르겠습니다.
창에 이벤트를 보내 문제를 해결할 수도 있습니다 VisibilityNotify(state=VisibilityUnobscured)
. 충분할지 모르겠습니다. 이벤트를 보내야 할 수도 있습니다 MapNotify
. 다음은 이벤트를 보내는 테스트되지 않은 Python 코드입니다 VisibilityNotify
.
#! /usr/bin/env python
import re, sys, time
import Xlib.X, Xlib.XK, Xlib.display, Xlib.protocol
def parse_action(string):
state = {
'0': 0,
'1': 1,
'2': 2,
'unobscured': 0,
'partiallyobscured': 1,
'fullyobscured': 2,
'visibilityunobscured': 0,
'visibilitypartiallyobscured': 1,
'visibilityfullyobscured': 2,
}[string.lower()]
return state
def parse_window(display, arg):
wid = int(arg, 0)
return display.create_resource_object('window', wid)
def send_event(display, window, state):
window.send_event(Xlib.protocol.event.VisibilityNotify(window=window,
state=state))
display.sync()
if __name__ == "__main__":
display = Xlib.display.Display()
send_event(display, parse_window(display, sys.argv[1]), parse_action(sys.argv[2]))