Cocoa 如何在Mac上访问我的应用程序的windows层次结构?

Cocoa 如何在Mac上访问我的应用程序的windows层次结构?,cocoa,macos,Cocoa,Macos,我指的是属于我的应用程序进程的所有窗口。我需要为所有人买一些像NSWindow*的东西。请注意,某些窗口是由第三方插件创建的,[NSApp windows]无法访问。是的,我知道,Quartz窗口服务可以通过PID返回所有窗口。但是我怎样才能通过CGWindowID获得NSWindow呢?谢谢 尝试NSWindowList获取窗口编号,然后-[NSApplicationWindowWithWindowNumber:]获取NSWindows。尝试NSWindowList获取窗口编号,然后-[NSA

我指的是属于我的应用程序进程的所有窗口。我需要为所有人买一些像NSWindow*的东西。请注意,某些窗口是由第三方插件创建的,[NSApp windows]无法访问。是的,我知道,Quartz窗口服务可以通过PID返回所有窗口。但是我怎样才能通过CGWindowID获得NSWindow呢?谢谢

尝试NSWindowList获取窗口编号,然后-[NSApplicationWindowWithWindowNumber:]获取NSWindows。

尝试NSWindowList获取窗口编号,然后-[NSApplicationWindowWithWindowNumber:]获取NSWindows。

通常,NSWindowList将提供窗口ID。也有人来帮忙

要获取NSWindow*Cocoa,有[NSApp windowWithWindowNumber:NSIntegerwindowID]方法。 要获取WindowRef,有HIWindowFromCGWindowID函数。 如果上述两项都不起作用,则表示该窗口是使用CoreGraphics专用API创建的。它的定义得益于逆向工程

关于Mac上的X11窗口,它们是由Xquartz使用Xplugin库创建的,Xquartz是封闭源代码,也使用CoreGraphics私有API。

通常NSWindowList会提供窗口ID。也有人来帮忙

要获取NSWindow*Cocoa,有[NSApp windowWithWindowNumber:NSIntegerwindowID]方法。 要获取WindowRef,有HIWindowFromCGWindowID函数。 如果上述两项都不起作用,则表示该窗口是使用CoreGraphics专用API创建的。它的定义得益于逆向工程


关于Mac上的X11窗口,它们是由Xquartz使用Xplugin库创建的,Xquartz是封闭源代码,也使用CoreGraphics私有API。

您能澄清一下您的应用程序是什么意思吗?是您正在编写的应用程序,还是您在mac上启动的所有应用程序?我澄清了问题本身。您所说的“某些由第三方插件创建的窗口……无法被[NSApp windows]访问”是什么意思?你能举个例子吗?好的,我会在另一个过程中解释。例如,如果您通过SIMBL插件入侵xorg.x.X11应用程序并在那里调用[[NSApp windows]count],那么不管运行x客户端的实际数量如何,您总是会得到2个。似乎客户端的窗口是以某种方式创建的,与[[NSWindow alloc]init…]不同。但它们可以通过Quartz Window Services API访问。那么,如何在X11进程中获取对它们的引用呢?您能澄清一下您的应用程序是什么意思吗?是您正在编写的应用程序,还是您在mac上启动的所有应用程序?我澄清了问题本身。您所说的“某些由第三方插件创建的窗口……无法被[NSApp windows]访问”是什么意思?你能举个例子吗?好的,我会在另一个过程中解释。例如,如果您通过SIMBL插件入侵xorg.x.X11应用程序并在那里调用[[NSApp windows]count],那么不管运行x客户端的实际数量如何,您总是会得到2个。似乎客户端的窗口是以某种方式创建的,与[[NSWindow alloc]init…]不同。但它们可以通过Quartz Window Services API访问。那么如何在X11进程内获取对它们的引用呢?NSWindowList从所有应用程序返回正确数量的窗口,但windowWithWindowNumber Cocoa和HIWindowFromCGWindowID返回零。这是正确的答案-NSWindowList返回所有进程的所有窗口,因此,如果windowWithWindowNumber返回nil,则表示该窗口不属于您的应用程序。NSWindowListForContext仅返回特定进程的窗口,但您需要调用私有方法[NSApp contextID]以传入正在运行的应用程序的上下文ID。NSWindowList从所有应用程序返回正确数量的窗口,但是windowWithWindowNumber和HIWindowFromCGWindowID返回nil。这是正确的答案-NSWindowList返回所有进程的所有窗口,因此如果windowWithWindowNumber返回nil,则表示该窗口不属于您的应用程序。NSWindowListForContext仅返回特定进程的窗口,但您需要调用私有方法[NSApp contextID]来传递运行中应用程序的上下文ID。