私が使用しているマウスの場合:
ourEvent = CGEventCreate(None);
currentpos = CGEventGetLocation(ourEvent);
キャレットには何を使用できますか?
まず悪いニュース。
すべてのアプリが Cocoa ベースであるとは限りません。また、Cocoa でも Carbon でも 2 つを直接組み合わせたものでもないアプリ (つまり、wxWidgets、Qt、またはその他のクロスプラットフォーム フレームワークに基づくアプリ) は、通常、GUI スタック全体を生のイベントと描画プリミティブ。
つまり、通常、これらのアプリケーションからこの情報を取得する方法はありません (スクリプト化可能で、そのように公開しない限り)。
良いニュースは、Cocoa アプリと一部のCarbon アプリがアクセシビリティを介してこれを公開する可能性があることです。
ユーザーは、システム環境設定で補助デバイスをオンにする必要があります。その条件が満たされると、アクセシビリティ フレームワークを使用して、最前面のアプリケーション、フォーカスされたウィンドウ、フォーカスされたビュー、および選択範囲を取得できます。
挿入ポイントのあるテキスト ビューには、選択範囲が 1 つだけあり、その範囲は空です (長さ = 0)。場所は、挿入ポイントの場所です。
もちろん、これらは文字インデックスであり、画面上の境界ではありません。
そこでパラメータ化された属性の出番です。範囲を境界に変換する属性があります。それはあなたが望むものです。
理論的には(私はこれを試していません)、挿入ポイントの空の範囲を、挿入ポイントの垂直線内のどこかにある空のまたはほぼ空の長方形に変換できるはずです。
スクロール ビュー内のテキスト ビューでこれをテストしてください。特に、挿入ポイントが部分的または完全にスクロールされてビューから外れている場合は注意してください。
Accessibility Inspector を使用して、アプリケーションがどこを見る必要があるかを自分で確認し、個々のアプリケーションをテストして、報告された失敗を調査します。
開発者ダウンロード ページの「アクセシビリティ ツール」ディスク イメージから入手できます。
ウィンドウにフォーカスを当てたい場合、それをクリックするようにマウス イベントを作成するのは悪い考えです。間違ったものをクリックすると、何かが起こる可能性があります。kAXRaiseAction
代わりに、ウィンドウにアクションを送信してください。
テキストビューの挿入ポイントを設定したい場合(そして、マウスイベントをクリックして目的の位置に設定する必要がある場所を探している場合) も、これは悪い方法です。代わりにビューのkAXSelectedTextRangesAttribute
属性を設定してください。繰り返しますが、挿入ポイントは単一の空の範囲です。
以下のようにしてみましたか?
NSPoint p=[[NSApp currentEvent]locationInWindow];
CGFloat X=p.x;
CGFloat Y=p.y;
NSLog(@"%f %f",X,Y);