2

次のワークフローが必要です。

  • ユーザーがホットキーまたはステータス バーのメニュー ボタンを押す
  • ユーザーがウィンドウをクリックする
  • ウィンドウがアプリに「登録」されました
  • アプリは、登録されているすべてのウィンドウからマウス イベントをインターセプトします。

私は CGEvents、CGEventTaps、NSEvents について多くのことを読みました。CGEvents と CGEventTaps を使用してグローバル イベントをインターセプトし、新しいイベントを投稿できますが、NSEvent には windowNumber のようなウィンドウ情報はなく、PSD のみです (そして、それらの使用方法がわかりません)。登録されたウィンドウ。一方、NSEvent ではグローバル イベントを傍受できず、localMonitor を介したローカル イベントのみを傍受できます。

どうすれば目的の機能を実現できますか?

4

1 に答える 1

0

Mac OS X Accessibility API を使用して、現在フォーカスされているウィンドウまたはアプリケーションに関する詳細を取得できます。

UIElementInspector Apple サンプル コードには、多くの例が示されています。

// Given a uiElement and its attribute, return the value of an accessibility object's attribute.
+ (id)valueOfAttribute:(NSString *)attribute ofUIElement:(AXUIElementRef)element;

kAXFocusedApplicationAttributeまたはkAXFocusedWindowAttribute属性を使用してvalueOfAttribute:ofUIElement:、ウィンドウ/アプリをアプリに「登録」するときに取得します。

が入ってきたらCGEvent、現在フォーカスされているウィンドウ/アプリを登録済みのウィンドウ/アプリのリストと比較して、イベントをインターセプトする必要があるかどうかを判断します。

于 2015-02-05T22:45:43.637 に答える