2012-12-07 47 views
5

我想获取正在运行的应用程序的窗口列表。 我可以从[[NSWorkspace sharedWorkspace] runningApplications]获得正在运行的应用程序列表,但窗口列表仅在NSApplication上可用。 有没有办法将NSRunningApplication转换为NSApplication,或者有些方法可以更直接地获取窗口列表?如何获取NSRunningApplication的窗口

+0

下面是同样的问题,已经回答:http://stackoverflow.com/questions/2107657/mac-cocoa-getting-a-list-of-windows-using-accessibility-api –

+0

即使在这里http:// stackoverflow.com/questions/13759688/how-to-find-out-if-an-instance-of-my-app-is-already-running-or-not/13759928#13759928 –

+0

寡妇列表更直接的意思? –

回答

6

您需要查看CoreGraphics调用CGWindowListCopyWindowInfo

你这样称呼它

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); 

,然后遍历的窗口信息阵列上,发现从你感兴趣的应用程序的部分,做你想要做什么用。

+3

嘿肯!这是一个很好的答案/提示,但它仍然没有说明如何获得'CG/NSWindow' ;-)'NSRunningApplication'不提供窗口/窗口号,并且在尝试时崩溃(可能做错了事)通过'CGWindowListCopyWindowInfo'获得'CGWindowID'获得'NS/CGWindow' –

+1

这是因为你不能为另一个应用程序创建NSWindow。至于获取特定应用程序的窗口,您可以检查并比较'kCGWindowOwnerPID'键的值与'NSRunningApplication'的'processIdentifier'属性的值。 – mattsven