TUIO で JUCE を使用して、「ホット キー」コマンドを他のアプリケーションに送信するマルチタッチ ユーティリティを開発しています (TUIO メッセージを送信する USB タッチ フレームを使用しています)。たとえば、ユーザーがタッチ アンド ホールドしてキー コンボをプログラムし、そのボタンをタップしてプログラムされたキー コンボを別のアプリに送信できるインターフェイスを提供します。OSXでこれを実現する方法は、ユーティリティを「バックグラウンドのみ」のアプリケーションとして実行することです(NSApplicationActivationPolicyProhibited
)。[NSWindow setCanHide: NO]
バックグラウンド アプリとして実行されている場合でも、ユーティリティの GUI が表示されるように使用します。
別のアプリケーションのウィンドウが私のウィンドウの上にある場合を除いて、うまく機能します。何が起こるかというと、タッチが他のアプリを介して私のアプリに渡され、アプリで意図しないボタンが押されることです。通常、アプリがアクティブなアプリケーションである場合は常に TUIO タッチ コールバックのみをリッスンすることができます[NSApp isActive]
。しかし、私のアプリはバックグラウンドのみであるため、アクティブになることはなく、タッチを防ぐために別のウィンドウがそれを覆っているかどうかを知る方法がありません.
では、「バックグラウンドのみ」のアプリが他のすべてのウィンドウの上にあるかどうかを判断できる方法はありますか? または、アプリ内から他のアプリケーションからすべての Cocoa ウィンドウのリストを取得し、それらが「バックグラウンドのみ」のアプリの上に表示されているかどうかを確認できる方法はありますか?
また、Windowsで上記のすべてをどのように行うか知っている人はいますか? 言い換えれば、Windows は何に相当しNSApplicationActivationPolicyProhibited
、他のアプリケーションのウィンドウでカバーされているかどうかを知ることができますか?