2017-05-17 17 views
0

gcc를 사용하여 Linux에 C++ 라이브러리를 작성했습니다. 프로그램은 내가 각 열 브라우저 윈도우의 식별자를 결정하는 Xlib를 사용하여 그 후창이 존재하면 xlib을 어떻게 체크 인 할 수 있습니까?

system("firefox https://www.webpage.com"); 

새로운 브라우저 창에서 웹 페이지를 엽니 다. 그런 다음 프로그램은 각 창 및 OCR의 스크린 샷을하기 위해

XRaiseWindow(display, window) 

사용하여 하나 파이어 폭스 창 하나를 발생시킵니다.

하지만 수동으로 브라우저 창을 닫고 BadWindow 오류를 생성하고 프로그램을 종료 해당 식별자 XRaiseWindow를 사용하려고합니다.

그래서 주어진 window 식별자가있는 창이 xlib에서 체크인 할 수 있습니까? X FAQ에서

답변

0

:

169) 어떻게 윈도우 ID가 유효한지 여부를 확인합니까?
내 프로그램의 ID는 원격 디스플레이에 있습니다. 아무 것도하지 않고 윈도우가 존재하는지 확인하고 싶습니다. X가 비동기이기 때문에

, 윈도우 여전히 당신이 ID를 가지고 시간과 창에 이벤트를 전송하거나 그것을 조작 시간 사이에 존재하는 것이라는 보장은 없습니다. 해야 할 일은 검사하지 않고 이벤트를 보내지 만 에 오류 처리기를 설치하면 BadWindow 오류를 포착하므로 오류 창이 더 이상 나타나지 않는 것으로 나타납니다. . 이 구성표는 [희귀] 경우를 제외하고는 원래 창을 삭제했으며 해당 ID를 다른 창에 재 할당 한 경우를 제외하고는 작동합니다.

이 체계를 사용하여 창에 대한 의 유효성을 검사하는 기능을 만들 수 있습니다. 요청 후 XSync()을 호출하여이 작업을 거의 동기식으로 수행 할 수 있습니다. 그러나 결과 후 창이 존재한다는 보장은 없습니다 (단, 스터버가 잡혀 있지 않은 경우). 전체에서 미리 확인하는 것이 아니라 오류를 잡는 것이 좋습니다.

짧은 이야기 : 당신은 컨트롤을 손상시킬 수 있습니다.