3

次のコードを使用して、すべてのウィンドウを取得しています。

CFArrayRef windows = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID);

これにより、次のような辞書の配列が得られます。CGWindowListCopyWindowInfoを使用した最前面のウィンドウ

次に、それらの境界をチェックして、マウスがその中にあるかどうかを確認します。最初に見つけたのは、マウスが上にあるものです。

それでは動かせるようにしたいと思います。AXUIElementSetAttributeValueウィンドウを移動する方法は知っていますAXUIElementRefが、辞書から抜け出す方法がわからないので、が必要です。

どうすればこれを解決できますか?

4

1 に答える 1

3

ウィンドウ番号から。に移動する方法はありませんAXUIElementRef

最も近い方法は、ウィンドウの所有者を見つけてから、アクセシビリティを通じてそのウィンドウを探し、同じタイトルのウィンドウを探すことです。ただし、アプリには同じタイトルのウィンドウが複数ある場合があるため、把握する必要があります。その場合に何をするかを考えてください。

別のアプリケーションのウィンドウを移動する唯一の方法は、AppleScriptまたはアクセシビリティによるものです。アクセシビリティの使用は、 AppleScriptよりもはるかに信頼性があります(ほとんどではないにしても、多くのアプリは不完全なスクリプトサポートや不安定なスクリプトサポートを備えています)。プロセスIDとウィンドウタイトルは、ウィンドウ番号を示す同じウィンドウディクショナリから取得できますが、それは取得できる限り具体的です。AppleScriptでは、アプリケーションのウィンドウリスト内でのみウィンドウのインデックスを使用でき、インデックスの計算と使用の試行の間でリストの順序が一瞬で変更されていないことを期待できます。

于 2012-06-28T22:51:41.633 に答える