【发布时间】:2013-12-22 18:57:56
【问题描述】:
我一直在研究 OSX 中的窗口系统。我正在尝试了解有关我正在处理的一些捕获代码的所有信息。
我想做什么
我希望能够过滤我的窗口查询,以便我仅抓取在任何空间中可见或在任何空间中最小化的窗口。
工作至今
现在,使用 SonOfGrab 测试代码和文档,我创建了一个可以查询窗口服务器并给我这样的列表的程序:
{
"name": "Xcode",
"id": 25314,
"width": 16,
"height": 194,
"visible": "NO",
"desktop": -1,
"owner pid": 37319,
"layer": 0
}
我过滤掉所有桌面元素,只抓取可共享的窗口。
我学到了什么
据我所知,文档有点有限,我的示例程序就是这些东西
- 窗口的可见性属性会告诉你它是否可见 在当前活动空间中。
- 图层似乎很重要。据我所知,我要过滤的窗口仅在第 0 层可用。看起来其他层与停靠栏、工具栏、图标等有关。
- 不可见但位于第 0 层的项目有时是最小化的窗口。
我遇到的问题
以下是我的代码和 SonOfGrab 示例所面临的问题。
- 某些应用程序上的最小化窗口和关闭窗口似乎是相同的。例如使用活动监视器。如果我最小化窗口或关闭它,输出是相同的。是否有其他领域可以帮助我区分这一点?发生这种情况似乎是因为应用程序始终在任务栏中运行。
最小化活动监控
{
"name": "Activity Monitor",
"id": 94,
"width": 703,
"height": 728,
"visible": "NO",
"desktop": -1,
"owner pid": 2353,
"layer": 0
},
关闭活动监控
{
"name": "Activity Monitor",
"id": 94,
"width": 703,
"height": 728,
"visible": "NO",
"desktop": -1,
"owner pid": 2353,
"layer": 0
},
- 即使我过滤掉桌面元素并仅从第 0 层抓取。我仍然看到 SystemUIServer 浮动。当我尝试使用 SonOfGrab 抓取它的窗户时,我什么也得不到。除了按名称过滤之外,还有其他有意义的方法吗?
- 无法查看的窗口。使用 XCODE,我注意到如果我打开了一个项目并且可以查看。我的程序和 SonOfGrab 将在第 0 层显示 5 个窗口。1 个可见,其余不可见。
总结
我希望能够仅列出可在任何空间查看或已最小化且可能被查看的窗口。这似乎是可见性和图层的帮助,但也许我需要更多的窗口细节来解决这个问题。有什么想法:-)?
【问题讨论】:
标签: c++ objective-c macos