2

私はこれに対する解決策を永遠に探していたので、私よりも優れた精神の頭脳を探し出すことにしました. Accessibility API を使用して別のプログラムを操作する Cocoa アプリを開発しています (これはホットキー アプリです)。私が制御しているアプリでは通常、複数のウィンドウが開いており、一部のウィンドウは他のウィンドウの背後に隠れています。私がやりたいことは、可能であれば、アクセシビリティ API を使用して、ウィンドウのボタンを前面に表示せずに押す方法でマウス イベントをウィンドウに送信することです (ウィンドウと対話しますが、アクティブにしないでください)。 . 私がこれをしようとしている理由は、この他のウィンドウにマウス イベントを送信すると、それが強制的に最前面に表示され、最前面のウィンドウとのユーザーのやり取りが中断されるためです。

これは Windows でも可能です - どうやら、私のようなアプリがそこでそれを行うため - しかし、ウィンドウ マネージャーの動作方法を考えると、これは Cocoa では不可能だと感じています。私は間違っていますか?

4

1 に答える 1

2

アクセシビリティはそれよりも高いレベルです。たとえば、AXPressアクションをAXButtonオブジェクトに送信しますが、「プレス」は必ずしもクリックではありません。たとえば、ビューがフォーカスされているときにスペースバーを押すことも「プレス」です。AXPressは、「自分のことを行う」ことを意味する高レベルのアクションです。これは明らかに、一部のビュー (ボタンなど) では意味があり、他のビュー (フィールドなど) では意味がありません。

アプリケーションをアクティブ化するアクセシビリティは、その意図された目的から見ると理にかなっています。つまり、障害のあるユーザーのための補助デバイスです。ユーザーが何らかの方法で何かを「押す」場合、おそらくアプリケーションをアクティブにしてそこで作業するつもりです。

Quartz Event Servicesを使えば、ほぼ目標を達成できます。制御したいプロセスのイベント タップを作成し、イベントを偽造してタップに送信できます。キャッチは、タップが発火したとき、つまり、アプリケーションが処理するイベントを既に持っている場合にのみ、タップにイベントを送信できることです。そうでないときは、行き詰まっています。

于 2010-05-02T00:03:43.370 に答える