【发布时间】:2014-04-03 16:21:15
【问题描述】:
我想实时检测窗口何时被移动,并认为 CGDisplayStreamCreate 等应该提供这一点。但是当我的 CGDisplayStreamFrameAvailableHandler 被调用时,我很难确定要移动哪个窗口。有没有一种直接的方法可以将更新后的矩形与应用程序及其窗口相匹配?
【问题讨论】:
标签: macos quartz-core
我想实时检测窗口何时被移动,并认为 CGDisplayStreamCreate 等应该提供这一点。但是当我的 CGDisplayStreamFrameAvailableHandler 被调用时,我很难确定要移动哪个窗口。有没有一种直接的方法可以将更新后的矩形与应用程序及其窗口相匹配?
【问题讨论】:
标签: macos quartz-core
CGDisplayStream 无法告诉您哪些应用程序/窗口负责给定屏幕更新。您可能可以使用其他 API(如 Accessibility)来确定窗口位置,然后猜测 kCGDisplayStreamUpdateMovedRects 中的哪个对应于每个窗口,但这不是很可靠。如果你打算走辅助功能的路线,你也可以使用辅助功能通知来处理窗口移动事件:How can my app detect a change to another app's window?。
如果您还需要窗口移动时的像素内容,那么您需要在 CGDisplayStream 和 Accessibility 回调之间进行一些不幸的时间对齐。
【讨论】: