如何获取NSRunningApplication的窗口

pvi*_*nis 8 cocoa nsapplication nsworkspace nsrunningapplication

我想获取正在运行的应用程序的窗口列表.我可以从中获取正在运行的应用程序列表[[NSWorkspace sharedWorkspace] runningApplications],但窗口列表仅可用于NSApplication.有没有办法转换NSRunningApplicationNSApplication,或某种方式更直接地获取窗口列表?

Ken*_*agh 8

您需要查看CoreGraphics调用CGWindowListCopyWindowInfo.

你这样称呼它

    CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);
Run Code Online (Sandbox Code Playgroud)

然后迭代窗口信息数组,找到您感兴趣的应用程序中的信息,然后用它做你想做的事情.

  • 嘿肯!这是一个很好的答案/提示,但它仍然没有告诉如何获得`CG/NSWindow` ;-)`NSRunningApplication`不提供窗口/窗口编号而且我在尝试时崩溃(可能做错了)使用`CGWindowListCopyWindowInfo'获得的`CGWindowID`来获取`NS/CGWindow` (3认同)
  • 那是因为您不能为另一个应用程序创建NSWindow。至于获取特定应用程序的窗口,您可以检查kCGWindowOwnerPID键的值并将其与NSRunningApplication的processIdentifier属性进行比较。 (2认同)