2011-01-15 11 views
5

मै मैक के लिए कोड सीखने की कोशिश कर रहा हूं। मैं थोड़ी देर के लिए जावा लड़का रहा हूं, इसलिए मुझे उम्मीद है कि जिस समस्या में मैं दौड़ रहा हूं वह कोको की एक साधारण गलतफहमी है।addGlobalMonitorForEventsMatchingMask केवल माउस की स्थिति लौट रहा है

-(IBAction)beginEventMonitor:(id)sender { 
    _eventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseUpMask) 
    handler:^(NSEvent *incomingEvent) { 
    //NSWindow *targetWindowForEvent = [incomingEvent window]; 
    NSLog(@"Got a mouse click event at %@", NSStringFromPoint([incomingEvent locationInWindow])); 
    }]; 
} 

-(IBAction)stopEventMonitor:(id)sender { 
    if (_eventMonitor) { 
    [NSEvent removeMonitor:_eventMonitor]; 
    _eventMonitor = nil; 
    } 
} 

यह मुझे बताने की जब एक माउस क्लिक एक वैश्विक स्तर पर होता है एक सरल हुक है:

मैं निम्नलिखित कोड मिल गया है। हैंडलर काम कर रहा है, लेकिन आने वाली इवेंट की सामग्री कुछ भी सेट नहीं लगती है। एकमात्र उपयोगी जानकारी जो मुझे मिल सकती है वह क्लिक के समय माउस का स्थान है, और उस विंडो की विंडो आईडी जिसमें क्लिक किया गया था।

क्या मुझे और जानकारी प्राप्त नहीं करनी चाहिए? क्या मैं मॉनीटर को सही तरीके से स्थापित नहीं कर रहा हूं? मैं वास्तव में यह जानना चाहता हूं कि कौन सी विंडो पर क्लिक किया गया था, लेकिन मुझे माउस स्थान या विंडो को बदलने के लिए कोई रास्ता भी नहीं मिल रहा है।

उत्तर

6

आप CGWindow एपीआई (तेंदुआ में नए) का उपयोग कर खिड़की बारे में अधिक जानकारी, उदाहरण के लिए प्राप्त कर सकते हैं:

CGWindowID windowID = (CGWindowID)[incomingEvent windowNumber]; 
CFArrayRef a = CFArrayCreate(NULL, (void *)&windowID, 1, NULL); 
NSArray *windowInfos = (NSArray *)CGWindowListCreateDescriptionFromArray(a); 
CFRelease(a); 
if ([windowInfos count] > 0) { 
    NSDictionary *windowInfo = [windowInfos objectAtIndex:0]; 
    NSLog(@"Name: %@", [windowInfo objectForKey:(NSString *)kCGWindowName]); 
    NSLog(@"Owner: %@", [windowInfo objectForKey:(NSString *)kCGWindowOwnerName]); 
    //etc. 
} 
[windowInfos release]; 

में बहुत सारी जानकारी नहीं है वहाँ (CGWindow.h में देख सकते हैं या उपलब्ध के लिए दस्तावेज़ देखें चांबियाँ)। केवल एक खिड़की के स्क्रीनशॉट बनाने के लिए भी फ़ंक्शन हैं (जो भी आंशिक रूप से दूसरी विंडो द्वारा कवर किया जाता है), कूल सामान!

+0

माउस घटनाओं के साथ बढ़िया काम करता है, क्या आप कुंजीडाउन घटनाओं के लिए कुछ जानते हैं? –

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