2013-03-04 101 views
6

早在2010年,Pierrethis問題(他接受的答案不適用於我)。模擬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

好吧,顯然MacOSX需要鼠標正好處於屏幕邊緣才能顯示! 因爲我把我在屏幕的左側碼頭(由於許多程序保持重要的按鈕在窗戶的底部),所有我必須做的是說

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

和它的工作!

我也使用KenThomases'的想法翹曲光標也是如此。

(此答案被標記正確的,因爲它可以讓我展現了被告席 - 但是仍然有一些不響應鼠標輸入的應用程序)

+0

您應該考慮屏幕的其他邊緣。而且,對於多臺顯示器,屏幕的原點可能具有負面分量。 – 2013-03-16 22:27:42

+0

是的,會做。 好的,我不知道有關額外的顯示器......謝謝! (我的項目將使用額外的顯示器......幸運的你告訴我了!​​) – 2013-03-17 06:25:21

3

我會扭曲光標並生成鼠標移動事件。例如,我從經驗中知道,翹曲光標(雖然它本身不生成事件)會修改隨後的鼠標移動事件,以將移動的距離包括在其鼠標三角洲中。我不知道您的合成移動事件是否會自行包含適當的增量值。

+1

添加'CGWarpMouseCursorPosition(點);'在PostMouseEvent底部方法沒有幫助 - 這是你的意思嗎? – 2013-03-16 10:27:26

+1

如果觸摸屏幕邊緣,添加它可將鼠標傳送到(0,0)。 – 2013-03-16 10:34:07

+1

那麼,在發佈事件之前我會扭曲,因爲扭曲會在下一個事件中增加三角。如果那不是您指定的點,不能告訴您爲什麼它會到(0,0)。 – 2013-03-16 10:50:34