2011-02-07 3 views
0

Фон: Недавно я получил два монитора и хочу, чтобы переместить сфокусированное окно на другой экран и наоборот. Я достиг этого, используя API Accessibility. (В частности, я получаю AXUIElementRef, который содержит AXUIElement, связанный с сфокусированным окном, затем я установил значение NSAccessibilityPositionAttribute для перемещения окна.Я хочу оживить движение внешнего окна приложения OS X

У меня это работает практически так, как я хочу, кроме того, что я хочу оживить движение окон. Я подумал, что если бы я каким-то образом смог получить NSWindow, я мог бы получить его слой и использовать CoreAnimation для анимации движения окна.

К сожалению, я узнал, что это невозможно. (Исправьте меня. «Неправильно, хотя, если есть способ сделать это таким образом, было бы здорово!» Поэтому я прошу вас всех о помощи. Как мне нужно оживить движение фокусированного окна, если у меня есть доступ к AXUIElementRef?

-R

- EDIT

Я был в состоянии получить сырую анимацию Собирается создавая время цикла и перемещая положение окна на небольшую величину каждый раз, чтобы сделать успешную анимацию. Тем не менее, результаты довольно субары. Как вы можете догадаться, для этого требуется много ненужной вычислительной мощности, и она по-прежнему очень изменчив. Там должен быть лучшим способом.

ответ

1

Наилучший возможный способ, я могу себе представить, состоять в том, чтобы выполнить некоторое сравнение хакерских свойств между значениями информации AXUIElement для окна и информацией, возвращаемой из CGWindow api. Как только вы сможете узнать, какие окна в API CGWindow соответствуют AXUIElementRefs, вы можете захватить растровые изображения текущего содержимого окна, наложить на экран свой собственный анимационный чертеж поддельных окон, а затем, когда вы отбрасываете наложение, установите реальный AXUIElementRef к позициям желаемой конечной анимации.

Hacky, tho.

+0

Это лучшее, что я смог придумать. Я собираюсь попробовать это и посмотреть, есть ли заметное увеличение производительности по сравнению с простое перемещение позиции окна бит за раз итеративно. – ryanrhee