2009-11-16 5 views
5

アクセシビリティAPIを使用して、外国のOSXアプリケーションを自動化しようとしています。 の中には、APIを介してアプリケーションの状態が利用できないものがあるため、 画面スクレイピングで取得します。これを行うには、アクセシビリティオブジェクトのCGWindowIDを 'Window Role'に設定する必要があります。AXUIElementのCGWindowID

「ウィンドウロール」アクセシビリティオブジェクトのCGWindowIDを直接取得する方法はありますか? のようなウィンドウのさまざまな属性をサイズ、タイトル、場所などに合わせることで、経験的に知ることができますが、これは実際にはハッキーです。 アプリケーションがコーナーケースをサポートしていたとしても彼らはそうではありません。

答えて

4

これを行う方法はありません。アクセシビリティ階層は実際のウィンドウ/ビュー階層から完全に切り離されます。あなたのマッチングがうまくいくと思います。これはしかし適用のようなものを使用する方法について

extern "C" AXError _AXUIElementGetWindow(AXUIElementRef, CGWindowID* out); 

通常の注意点:

+2

お返事ありがとうございます。私はすでにそれを疑っていましたが、他の人にそれを確認させてもらいました。とにかく、私のマッチング論理は、位置とサイズのマッチングを通して、私の目的のために十分に働くだけでなく、衝突の場合にはウィンドウを左/右/上/下に動かすために使用されるいくつかの追加のロジックを持っています。 – Sami

8

は、少なくともヒョウとアップ(まだ周り10.7.3のような)からの機能があります。次回のOSアップデートの直後に変更される可能性があります。

+0

どうやってこのAPIを見つけましたか? – Jason

+1

@Jason主にotool(nmode、ldd、objdumpなどと同等のXcode)、それに基づいて逆アセンブルなどの意味を理解するのに役立つハックがあります。このスタックオーバーフロースレッドは参考になります:http://stackoverflow.com/questions/9494495/what-is-your-favorite-disassembler-tool-in-mac-os-x – mjmt

+0

これは引き続き動作しますか?これをSwiftからどうやって使うのですか?私はしようとエラー "未解決の識別子 '_AXUIElementGetWindow'の使用" –

関連する問題