プログラムで解決したい次の(小さな)問題があります。ラップトップからセカンダリ モニターのプラグを抜くたびに、すべてのウィンドウが移動して、現在は小さい解像度で表示されます。外付けモニターを再び接続したら、手動でウィンドウを正しい位置に戻す必要があります。私は毎朝それをしなければなりません(ため息)。
ここで、開いているすべてのウィンドウの位置を保存し、それらの位置を復元したいときに再配置できる単純なコマンド ライン プログラムを作成することにしました。
Accessibility API を使用することで、問題なく機能することができました。この API を使用すると、プロセス空間の一部ではないウィンドウを制御できます。ただし、問題があります。プログラムは、現在のスペースにあるウィンドウしか表示できません(ここでは、OSX Spaces 機能について話しています)。
つまり、ウィンドウの位置を保存するためにプログラムを実行すると、現在いるスペース内のウィンドウの位置のみを保存できます。
私のプログラムに関する詳細:
- 実行中のすべてのプロセスをループして、それらの PID を取得します。
- これらの PID からアプリケーション要素を作成します (
AXUIElementCreateApplication
) - このアプリケーションに関連付けられたウィンドウとその位置を取得します
アプリケーション要素からウィンドウ要素を取得するAXUIElementCopyAttributeValues
と、現在のスペースのウィンドウのみが返されます。
さて、ウィンドウを (異なる空間で) 制御する方法はありますか? そうでない場合は、すべてのウィンドウを取得するためにプログラムでスペースを変更してもかまいませんが、それは可能ではないようです。
どんな助けでも大歓迎です!