2009-07-12 7 views
26

मुझे एक्सकोड का उपयोग कर मैक पर स्क्रीन पर माउस की स्थिति प्राप्त करने की आवश्यकता है। मेरे पास कुछ कोड है जो माना जाता है कि मैं हमेशा x और y को 0:कोको: स्क्रीन पर वर्तमान माउस स्थिति प्राप्त करना

void queryPointer() 
{ 

    NSPoint mouseLoc; 
    mouseLoc = [NSEvent mouseLocation]; //get current mouse position 

    NSLog(@"Mouse location:"); 
    NSLog(@"x = %d", mouseLoc.x); 
    NSLog(@"y = %d", mouseLoc.y);  

} 

मैं क्या गलत कर रहा हूं? आप स्क्रीन पर वर्तमान स्थिति कैसे प्राप्त करते हैं? इसके अलावा, आखिरकार उस स्थिति (एनएसपीओटी में सहेजी गई) को किसी अन्य फ़ंक्शन के साथ उपयोग करने के लिए एक CGPoint में कॉपी करने की आवश्यकता है, इसलिए मुझे इसे x, y निर्देशांक या अनुवाद के रूप में प्राप्त करने की आवश्यकता है।

+1

में इस सवाल का जवाब मिल गया: CGEventRef ourEvent = CGEventCreate (शून्य); बिंदु = CGEventGetLocation (OurEvent); एनएसएलओजी (@ "स्थान? X =% f, y =% f", (float) point.x, (float) point.y); – wonderer

+0

मैं यह देखने में असफल रहा कि आपका प्रारंभिक कोड क्यों काम नहीं कर रहा था, यह कोड मेरे लिए बस प्यारा काम करता है। – Mecki

उत्तर

23
CGEventRef ourEvent = CGEventCreate(NULL); 
point = CGEventGetLocation(ourEvent); 
CFRelease(ourEvent); 
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y); 
+7

उस CGEventRef को जारी करने के लिए मत भूलना! – kperryua

+0

सलाह के लिए धन्यवाद! – wonderer

+0

जैसा कि मार्कन ने उत्तर दिया है, सवाल में उदाहरण एनएसएलओजी के साथ एक त्रुटि के कारण काम नहीं करता है, बाकी ठीक है। –

55

लेखक का मूल कोड काम नहीं करता है क्योंकि वह% d के रूप में फ़्लोट प्रिंट करने का प्रयास कर रहा है। सही कोड होगा:

NSPoint mouseLoc = [NSEvent mouseLocation]; //get current mouse position 
NSLog(@"Mouse location: %f %f", mouseLoc.x, mouseLoc.y); 

ऐसा करने के लिए कार्बन के लिए जाने की जरूरत नहीं है।

+4

क्वार्ट्ज घटना सेवाएं, कार्बन नहीं है यही कारण है कि पर की तरह, लेकिन अन्यथा आप सही कर रहे हैं: कोको ठीक इस काम करेगा, एक बनाने के बिना CGEvent वस्तु। –

+1

हूप्स, 99% कोको लड़का होने के नाते, मैं नीचे की चीजों के नामकरण के साथ इतना अच्छा नहीं हूं। स्पष्टीकरण के लिए धन्यवाद :) – MarcWan

+0

क्या मुझे पॉइंट स्टार्ट पॉइंट, एंड पॉइंट, ऊंचाई, चौड़ाई मिल सकती है .... बस स्क्रीन शासक –

10

सीजी पर्यावरण के साथ एनएस पर्यावरण को मिलाकर सावधान रहें। यदि आपको एनएस माउसलोकेशन विधि के साथ माउस स्थान मिलता है तो CGWarpMouseCursorPosition (cgPoint) का उपयोग करें, आपको अपेक्षित स्क्रीन पर उस बिंदु पर नहीं भेजा जाएगा। समस्या को सीजी से ऊपर छोड़कर (0,0) के रूप में परिणाम मिलता है जबकि एनएस नीचे बाईं ओर उपयोग करता है (0,0)।

+0

पर जैसे मुझे पॉइंट स्टार्ट पॉइंट, एंड पॉइंट, ऊंचाई, चौड़ाई .... जैसे ही मिल सकता है स्क्रीन शासक –

0
NSLog(@"%@", NSStringFromPoint(point)); 

एनएसएलओजी सच है;

5

स्विफ्ट

let currentMouseLocation = NSEvent.mouseLocation() 
let xPosition = currentMouseLocation.x 
let yPosition = currentMouseLocation.y 
+0

शीर्ष से पॉस: CGPoint (NSEvent.mouseLocation()। x, abs (NSEvent.mouseLocation()। y + -NSScreen.mainScreen()! दृश्यमान फ्रेम। हाइट)) – eonist

+0

@Andre मैं हर बार कैसे सूचित कर सकता हूं 'माउस स्थान 'बदल गया था? – ixany

+0

@ixany आपको घटनाओं को लागू करने की आवश्यकता होगी माउस ड्रैग, माउसइंटर, और माउस एक्सक्टेड। यह एप्लिकेशन की खिड़की के लिए ही काम करेगा। –