オブザーバーをアクティブなウィンドウ (私のものだけでなく、任意のプログラムである可能性があります) に追加して、動いているかどうかを教えてくれます。オブザーバーを実行ループに追加する方法は次のとおりです。
AXObserverAddNotification(m_observer, (AXUIElementRef)activeWindow, kAXMovedNotification, (__bridge void*)self);
CFRunLoopAddSource( [[NSRunLoop currentRunLoop] getCFRunLoop], AXObserverGetRunLoopSource(m_observer),kCFRunLoopDefaultMode );
現在、オブザーバーに関連付けられているコールバックは、出力ウィンドウに何かを出力するだけです。私が観察したことは、アクティブなウィンドウ (これもアプリのウィンドウである可能性があります) をドラッグしているときは何も出力されませんが、停止するとすぐに複数の printf 結果が出力されることです。一度に実行するためのアイドル時間が発生するまで、コールバックへの呼び出しがキューに入れられているようです。
アイドル時間を待たずにコールバックを実行する方法はありますか? たぶん、それを行うCFRunLoopModeですか?