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