使用CGDisplayStream检测窗口移动



我想实时检测窗口何时移动,并认为CGDisplayStreamCreate等应该提供这一点。但是当我的CGDisplayStreamFrameAvailableHandler被调用时,我很难决定移动哪个窗口。有没有一种直接的方法可以将更新的矩形与应用程序及其窗口相匹配?

CGDisplayStream 无法告诉您哪些应用程序/窗口负责给定的屏幕更新。您可以使用另一个 API 如辅助功能来确定窗口位置,然后猜测哪个 kCGDisplayStreamUpdateMovedRects 对应于每个窗口,但这不会很可靠。如果你打算采用辅助功能的路线,不妨对窗口移动事件使用辅助功能通知:我的应用如何检测到对另一个应用窗口的更改?。

如果你还需要窗口移动时的像素内容,那么你需要在CGDisplayStream和辅助功能回调之间做一些不幸的时间对齐。

最新更新