Использование CGDisplayStream для обнаружения движения окна

Я хочу определить, когда окно перемещается в режиме реального времени, и решил, что CGDisplayStreamCreate и т. д. должны обеспечить именно это. Но мне трудно решить, какое окно перемещается, когда вызывается мой CGDisplayStreamFrameAvailableHandler. Есть ли прямой способ сопоставить обновленные прямоугольники с приложением и его окнами?


person scrrr    schedule 02.03.2014    source источник


Ответы (1)


CGDisplayStream не может сказать вам, какие приложения/окна отвечают за данное обновление экрана. Возможно, вы сможете использовать другой API, например Accessibility, чтобы определить расположение окон, а затем угадать, какой из kCGDisplayStreamUpdateMovedRects соответствует каждому окну, но это будет не очень надежно. Если вы собираетесь пойти по пути специальных возможностей, вы также можете использовать уведомления специальных возможностей для событий перемещения окна: Как мое приложение может обнаружить изменение в окне другого приложения?.

Если вам также нужно пиксельное содержимое окон, когда они перемещаются, вам нужно будет сделать некоторое неудачное выравнивание времени между обратными вызовами CGDisplayStream и Accessibility.

person monoxygen    schedule 07.12.2014