У меня есть следующая (незначительная) проблема, которую я хочу решить программно. Всякий раз, когда я отсоединяю свой дополнительный монитор от моего ноутбука, все окна перемещаются, чтобы быть видимыми в теперь меньшем разрешении. Когда я подключаю свой внешний монитор обратно, мне нужно вручную заменить окна в их правильное положение. Я должен делать это каждое утро ( вздох ).
Теперь я решил написать простую программу командной строки, которая могла бы сохранять позиции всех открытых окон и изменять их положение, когда я хочу восстановить их позиции.
Мне удалось сделать что-то, что отлично работает, с помощью API-интерфейса Accessibility, который позволяет мне контролировать окна, которые не являются частью моего пространства процесса. У меня проблема, хотя: программа может только видеть окна, которые находятся в моем текущем пространстве (я говорю о функции OSX Spaces здесь).
Другими словами, когда я запускаю свою программу для сохранения позиций окон, она сможет сохранить только позиции окон в том пространстве, в котором я сейчас нахожусь.
Некоторые подробности о моей программе:
- Он проходит по всем запущенным процессам и получает их PID.
- Создает элементы приложения из этих PID (
AXUIElementCreateApplication
)
- Получает окна, связанные с этим приложением, а затем их позиции
При получении элементов windows из элемента application, AXUIElementCopyAttributeValues
возвращает мне только окна текущего пространства.
Теперь, есть ли способ управления какими-либо окнами (в разных местах)? В противном случае я не возражаю против изменения пробелов программно, чтобы получить все окна, но это кажется невозможным.
Любая помощь будет оценена!