2013-03-04 14 views
6

çalışmıyor, Pierre (onun kabul cevabı benim için çalışmaz) this soru soruldu.Taklit MouseEvent 2010 yılında Geri düzgün OSX

Aynı sorunu yaşıyorum: Başarıyla Kakao Uygulamamdan programlı olarak fareyi (ve kapalı!?!) Ekranı başarılı bir şekilde hareket ettirebiliyorum, ancak fareyi rıhtıma yerleştirmeme gösteriyorum. o (ve bazı diğer uygulamalar, fare hareket olayı kayıt edilmez örneğin fare kaldırmak oyunları.)

kullanıyorum yöntem böylece geçerli:

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

sonra taşımak istediğinizde çalıştırdığım fare:

PostMouseEvent(0, kCGEventMouseMoved, mouseLocation); 

Bu kodun, bağlantılar gibi şeyler için fare hareketi olayları oluşturduğunu unutmayın.

İşte bu 2013, bu sorunu çözmek mümkün mü?

Zaman ayırdığınız için teşekkürler!

cevap

0

Tamam, besbelli MacOSX dok göstermek için ekranın tam kenarında olması için fareyi ihtiyacı var! Ben ekranın sol tarafında benim yuvası tutmak için (nedeniyle çok sayıda programdan pencerelerinden altındaki hayati düğmeleri tutmaya), yapmam gereken tüm

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

demek olduğunu Ve işe yaradı!

Ayrıca KenThomases'ın imleci de çözme fikrini de kullanıyorum. PostMouseEvent altındaki `;` CGWarpMouseCursorPosition (noktasını) ekleme

+0

Ekranın diğer kenarlarını dikkate almalısınız. Ayrıca, birden fazla monitör ile, ekranın başlangıç ​​noktasının negatif bileşenlere sahip olması mümkündür. –

+0

Evet, yapacak. Tamam, ekstra monitörler hakkında bilmiyordum ... Teşekkürler! (projem ekstra monitör kullanıyor olacak ... Şansın bana söyledin!) –

3

İmleci hem çözerim hem de fare hareket olayını oluşturur. Deneyimden, örneğin, bir olayın kendisinin üretmemesine rağmen imlecin eğrilmesinin, fare deltasında taşınan mesafeyi dahil etmek için sonraki fare hareketi olayını değiştirdiğini biliyorum. Sentezlenmiş hareket etkinliğinizin, kendi başına uygun delta değerlerini içerdiğini bilmiyorum.

+1

-

(ancak fare girişine yanıt olmayan bazı uygulamalar hala vardır o rıhtım göstermek için beni izin verdiği bu cevap doğru işaretlenmiş) yöntem yardımcı olmadı - ne demek istediniz? –

+1

Eklendiğinde, ekranın kenarına değdiğinde fareyi (0,0) ışınlar. –

+1

Çarpışma, bir sonraki olaya delta eklediğinden, olayı yayınlamadan önce çözgü halinde gelirdim. Belirttiğiniz konu bu değilse, neden (0, 0) olacağını söyleyemem. –