【问题标题】:OSX: How to filter out the menu bar from CGWindowListCopyWindowInfoOSX:如何从 CGWindowListCopyWindowInfo 中过滤掉菜单栏
【发布时间】:2013-01-11 00:22:08
【问题描述】:

我正在使用 CGWindowListCopyWindowInfo 来获取桌面上的窗口列表。我想使用Window List keys 的值仅过滤掉可见窗口。我遇到问题的一个窗口是 OSX 菜单栏。我想到的一种解决方案是查看窗口边界的 X 和 Y。似乎没有可见的窗口使这两个值都等于 0,但我不确定这种方法有多可靠。

执行此操作的另一种方法是将 PID 编号与 OSX Window Server 的编号进行比较,但我不确定如何获得。谁能指出我正确的 API 或知道过滤菜单栏的可靠方法?

编辑:我有与下面的 kondy 相同的代码,并添加了以下内容,因为 listOptions 本身不够好:


CGRect windowBounds;
CGRectMakeWithDictionaryRepresentation((CFDictionaryRef) [windowInfo objectForKey:(id)kCGWindowBounds], &windowBounds);

if (!(windowBounds.origin.x == 0 && windowBounds.origin.y == 0))
{
    // Work with windows that aren't the Menubar
}

【问题讨论】:

标签: macos core-graphics


【解决方案1】:

我找到了过滤掉“Window Server”的答案:

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

使用这些 ORed 选项,我在“活动管理器”中得到与 mac 的“窗口化进程”相同的结果

希望对你有帮助!

【讨论】:

  • 我有相同的代码并添加了一些内容(编辑了原始答案)。
猜你喜欢
  • 1970-01-01
  • 2017-09-21
  • 2012-04-23
  • 2013-09-16
  • 2011-10-15
  • 2015-12-14
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多