2013-03-04 7 views
6

2010年に戻ると、Pierreが質問しましたthis質問(彼の受け入れられた回答は私のためには機能しません)。シミュレートされたMouseEventが正常に動作しないOSX

私は同じ問題を抱えています:マウスをドックの場所に持ってきても、私のCocoaアプリケーションからプログラムを使って画面を正常に動かすことができました。それ(およびいくつかの他のアプリケーションが例えば、マウスイベントを移動し登録していないマウスを削除ゲーム。)

私が使用している方法は、このようにある:

void PostMouseEvent(CGMouseButton button, CGEventType type, const CGPoint point) 
{ 
    CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, point, button); 
    CGEventSetType(theEvent, type); 
    CGEventPost(kCGSessionEventTap, theEvent); 
    CFRelease(theEvent); 
} 

そして、私が移動したいですマウスを実行する:

PostMouseEvent(0, kCGEventMouseMoved, mouseLocation); 

このコードはリンクなどのマウスオーバーイベントを生成することに注意してください。

これで2013年ですが、この問題を修正することは可能ですか?

ありがとうございました!

答えて

0

OK、ドックを表示するには、MacOSXが画面の端に正確に位置する必要があります。 私は(自分のウィンドウの下部にある重要なボタンを保つことにより、多くのプログラムへ)、画面の左側に私のドックを保つので、私がしなければならなかったすべては

if (mouseLocation.x < 0) 
{ 
    mouseLocation.x = 0; 
} 

を言ったそしてそれは働きました!

また、私もKenThomasesのアイデアを使ってカーソルを歪ませています。 `PostMouseEventの下部にある;` CGWarpMouseCursorPosition(ポイント)を追加する

+0

画面の他の端を考慮する必要があります。また、複数のモニタでは、画面の原点が負の成分を持つ可能性があります。 –

+0

はい、そうなります。 OK、私は余分なモニターについては知らなかった...ありがとう! (私のプロジェクトは余分なモニターを使用しています...ラッキーは私に言った!) –

3

私はカーソルをワープして、マウス移動イベントを生成します。例えば、カーソルの歪みはイベント自体を生成しませんが、その後のマウス移動イベントを変更してマウスデルタに移動距離を含めるという経験から知っています。あなたの合成された移動イベントがそれ自身の適切なデルタ値を含むかどうかはわかりません。

+1

-

(ただし、マウスの入力に応答していない一部のアプリケーションが残っている、それは私がドックを表示することができますように、この答えが正しいマークされています)方法は助けにはなりませんでした - これはあなたが意味するものですか? –

+1

これを追加すると、画面の端にタッチするとマウスが(0,0)にテレポートされます。 –

+1

ワーピングはデルタを次のイベントに追加するので、イベントをポストする前にワープします。それがあなたが指定したポイントでない場合、なぜそれが(0、0)に行くのかを教えてくれませんでした。 –

関連する問題