2013-03-04 16 views
6

2010 में, Pierre से पूछा गया this प्रश्न (उसका स्वीकृत उत्तर मेरे लिए काम नहीं करता है)।नकली MouseEvent ठीक से काम नहीं कर रहा है ओएसएक्स

मुझे एक ही समस्या है: मैं अपने कोको एप्लिकेशन से प्रोग्राम को प्रोग्राम रूप से चारों ओर (और बंद!?!) स्क्रीन को सफलतापूर्वक स्थानांतरित करने में सक्षम हूं, हालांकि माउस को मेरे डॉक के स्थान पर लाया नहीं जाता है यह (और कुछ अन्य अनुप्रयोगों के लिए, माउस ले जाया घटना दर्ज की नहीं कर रहे हैं जैसे कि माउस को दूर खेल।)

विधि मैं उपयोग कर रहा हूँ इस प्रकार है:

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

ठीक है, इसलिए जाहिर है कि मैकोज़क्स को माउस को दिखाने के लिए स्क्रीन के किनारे पर होना चाहिए! (कई कार्यक्रमों उनकी खिड़कियों के निचले भाग में महत्वपूर्ण बटन रखने के कारण) क्योंकि मैं स्क्रीन के बाईं ओर पर मेरी गोदी रखने के लिए, सभी मैं करना पड़ा कहना

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

था और यह काम किया!

मैं भी कर्सर को घुमाने के लिए KenThomases के विचार का उपयोग कर रहा हूं।

(यह जवाब सही चिह्नित है के रूप में यह मुझे गोदी दिखाने के लिए अनुमति देता है - लेकिन अभी भी कुछ अनुप्रयोगों है कि माउस इनपुट पर प्रतिक्रिया नहीं कर रहे हैं)

+0

आपको स्क्रीन के अन्य किनारों को ध्यान में रखना चाहिए। साथ ही, कई मॉनीटर के साथ, स्क्रीन के मूल बिंदु के लिए ऋणात्मक घटकों के लिए यह संभव है। –

+0

हां, करेंगे। ठीक है, मुझे नहीं पता था कि अतिरिक्त मॉनीटर के बारे में ... धन्यवाद! (मेरी परियोजना अतिरिक्त मॉनीटर का उपयोग करेगी ... भाग्यशाली तुमने मुझे बताया!) –

3

मैं कर्सर को घुमाता हूं और माउस-मूव इवेंट उत्पन्न करता हूं। मैं अनुभव से जानता हूं, उदाहरण के लिए, कर्सर को घुमाता है, जबकि यह एक घटना उत्पन्न नहीं करता है, उसके माउस डेल्टा में स्थानांतरित दूरी को शामिल करने के लिए बाद के माउस चाल घटना को संशोधित करता है। मुझे नहीं पता कि आपके संश्लेषित चाल कार्यक्रम में उचित डेल्टा मूल्य शामिल होंगे या नहीं।

+1

'CGWarpMouseCursorPosition (बिंदु) जोड़ रहा है; PostMouseEvent के तल पर' विधि मदद नहीं की - क्या यह तुम्हारा मतलब है? –

+1

यदि यह स्क्रीन के किनारे को छूता है तो इसे माउस को (0,0) में टेलीपोर्ट करता है। –

+1

खैर, मैं घटना को पोस्ट करने से पहले वार्प करूंगा क्योंकि युद्धपोत अगले कार्यक्रम में डेल्टा जोड़ता है। आपको यह नहीं बता सका कि यह क्यों (0, 0) होगा यदि यह आपके द्वारा निर्दिष्ट बिंदु नहीं है। –

संबंधित मुद्दे