2009-04-07 20 views
1

MacOS Xではマウスクリックを特定のウィンドウに送信できますか?画面の代わりにマウスクリックをシミュレートする

私は既にCGPostMouseEventで画面全体にクリックを送信しています。 私がコントロールしたいウィンドウはお互いに重なり合うので、私の次のアイデアはクリックをトリガーする前に適切なウィンドウを前面に持って来ることでした。それは動作しますが、完全な混乱で終了します... ;-)

答えて

4

ここでデイブケックからいくつかのコードサンプルで文書化されていない

CGEventPostToPSN 

経由Cocoaアプリケーションにイベントを送信することが可能です。彼は小さなアプリケーションon the mailing listを投稿しました。

customEvent = [NSEvent mouseEventWithType: [event type] 
           location: [event locationInWindow] 
          modifierFlags: [event modifierFlags] | NSCommandKeyMask 
           timestamp: [event timestamp] 
          windowNumber: WID 
            context: nil 
           eventNumber: 0 
           clickCount: 1 
           pressure: 0]; 

CGEvent = [customEvent CGEvent]; 
CGEventPostToPSN(&psn, CGEvent); 

は、それをアーカイブするために、私は参考のためpastie.org

more source codeを貼り付け:全体thread on cocao-dev mailing list

1

おそらくAccessibility APIsを使用できます。

もう少し複雑ですが、うまくいくはずです。

+0

は、私の知る限りでは、あなただけのAXAktionアイテムを送信することができます。マウスクリックはありません。 –

+0

なぜマウスクリックでなければならないのですか?たとえば、AXPressを送信すると、ボタンが正常に動作するはずです。 –

+0

これはうまくいきますが、アプリケーションウィンドウが隠れているかどうかをテストするように注意する必要があります。私の経験でアクセシビリティを損なう可能性があります。 –

1

多分Window Manager API: SetUserFocusWindow()を使用し、マウスイベントを作成することができます。

+0

私は既にAXAction: "AXRise"でこれを行いました。しかし、それは窓のちらつきの混乱で終わる。 –

関連する問題