2010-06-21 4 views
1

내 응용 프로그램 (프로세스)에 속한 모든 창을 의미합니다. 나는 그들 모두를 위해 (NSWindow *)와 같은 것을 얻을 필요가있다. 일부 Windows는 타사 플러그인에 의해 생성되었으며 [NSApp windows]에서 액세스 할 수 없습니다. 예, Quartz Window Services는 모든 윈도우를 PID로 반환 할 수 있습니다. 하지만 NSWindow를 CGWindowID로 어떻게 얻을 수 있습니까? 감사!Mac에서 내 응용 프로그램의 Windows 계층 구조에 액세스하는 방법은 무엇입니까?

+0

"응용 프로그램"의 의미를 분명히 할 수 있습니까? 작성중인 응용 프로그램입니까, 아니면 Mac에서 실행하는 모든 응용 프로그램입니까? – Yuji

+0

질문 자체를 분명히했습니다. – shoumikhin

+0

"타사 플러그인에서 생성 한 일부 창은 [NSApp 창]에서 액세스 할 수 없습니다"라는 것은 무엇을 의미합니까? 예를들 수 있습니까? –

답변

2

보통 NSWindowList()은 윈도우 ID를 제공합니다. 도움이 될 Quartz Window Services도 있습니다.

  • [NSApp windowWithWindowNumber: (NSInteger)windowID] 방법이있다 NSWindow* (코코아)를 얻으려면.
  • WindowRef (Carbon)을 얻으려면 HIWindowFromCGWindowID() 기능이 있습니다.

위의 두 가지가 작동하지 않으면 해당 창은 CoreGraphics Private API로 작성되었음을 의미합니다. 리버스 엔지니어링 덕분에 그 정의는 is available입니다.

Mac의 X11 창과 관련하여 폐쇄 된 소스 인 Xplugin 라이브러리와 CoreGraphics Private API를 사용하여 만들어졌습니다.

4

창 번호를 얻으려면 NSWindowList을 시도하고 NSWindows를 얻으려면 -[NSApplication windowWithWindowNumber:]을 시도하십시오.

+0

NSWindowList는 모든 응용 프로그램에서 올바른 수의 창을 반환하지만 windowWithWindowNumber (Cocoa) 및 HIWindowFromCGWindowID (Carbon)는 nil을 반환합니다. – shoumikhin

+0

이것은 올바른 대답입니다 - NSWindowList는 모든 프로세스의 모든 윈도우를 반환하므로 windowWithWindowNumber가 nil을 반환하면 윈도우가 응용 프로그램에 속하지 않는다는 의미입니다. NSWindowListForContext는 특정 프로세스의 창만 반환하지만 실행중인 응용 프로그램의 컨텍스트 ID를 전달하려면 개인 메서드 ([NSApp contextID])를 호출해야합니다. –

관련 문제