Обнаружение перетаскивания ЛЮБОГО окна - PullRequest
1 голос
/ 14 марта 2011

Есть ли способ (без использования недокументированного API) выяснить, перетаскивается ЛЮБОЕ окно (не только приложение, из которого выполняется код)?

Я могу использовать

[NSEvent addGlobalMonitorForEventsMatchingMask:]

но это только для общего перетаскивания, и нет никакого способа узнать, перетаскивается ли окно или нет.

Спасибо!

Обновление: я думаю, что ответ может лежать сэти две функции: CGSGetWindowBounds CGSNewRegionWithData Если кто-то может сказать мне, что эти функции делают, и где я могу найти документацию для них, было бы здорово!Благодаря.

Ответы [ 2 ]

0 голосов
/ 28 января 2013

Ваш единственный жизнеспособный, поддерживаемый системой API - это Accessibility Framework .Таким способом вы можете получать уведомления для окон других приложений, но доступ для чтения / изменения ограничен положением / размером.

0 голосов
/ 14 марта 2011

Я не уверен, есть ли лучший подход, но вот один из способов сделать это:

Создать BOOL ивар, который отслеживает, перемещается окно или нет.Затем зарегистрируйтесь для уведомлений NSWindowWillMoveNotification и NSWindowDidMoveNotication:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(windowWillMove:) name:NSWindowWillMoveNotification object:nil];
[nc addObserver:self selector:@selector(windowDidMove:) name:NSWindowDidMoveNotification object:nil];

Затем обработайте уведомления и установите ивар соответствующим образом:

- (void)windowWillMove:(NSNotification*)notification
{
    windowBeingDragged = YES;
}

- (void)windowDidMove:(NSNotification*)notification
{
    windowBeingDragged = NO;
}

Теперь вы можете просто проверить значениеivar (* в этом случае windowBeingDragged, чтобы проверить, перетаскивается ли окно).

...