2009-11-21 15 views
5

संपादित करने के लिए यहाँ मेरी कोड है:OSX क्वार्ट्ज घटना टैप्स: घटना प्रकार और कैसे घटनाओं

#import <ApplicationServices/ApplicationServices.h> 

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) { 
printf("%u\n", (uint32_t)type); 
return event; 
} 

int main (int argc, const char * argv[]) { 
CFMachPortRef eventTap; 
CFRunLoopSourceRef runLoopSource; 

eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL); 
runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); 
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); 
CGEventTapEnable(eventTap, true); 
CFRunLoopRun(); 
    return 0; 
} 

पहले .. क्या हुआ अगर मैं घटना संपादित करने के लिए चाहते थे? उदाहरण के लिए, मैं कुंजीडाउन ईवेंट सुनता हूं और यदि यह "ए" है तो मैं इसे "बी" में बदलता हूं, या वास्तविक समय में माउस स्थिति संपादित करता हूं, या उदाहरण के लिए बस एक ईवेंट कैप्चर करता है और इसका कोई प्रभाव नहीं पड़ता है (किसी विशेष को अक्षम करना उदाहरण के लिए कुंजी ..)

दूसरा .. CGEventType को एक enum के साथ परिभाषित किया गया है जो केवल कुछ प्रकार सूचीबद्ध करता है .. उदाहरण के लिए जब मैंने सीएमडी मारा तो मुझे 12 मिलते हैं, लेकिन यह enum में निर्दिष्ट मान से मेल नहीं खाता है .. मुझे क्या याद आ रही है ??

+0

डेव डीलॉन्ग यहाँ से अच्छी तरह से उत्तर दिया हो: http://stackoverflow.com/questions/5785630/modify-nsevent-to -send एक अलग-कुंजी-से-एक-कि-गया था दबाया/5785895 # 5785895 – cksubs

उत्तर

2

किसी ईवेंट को संशोधित करने के लिए, विभिन्न CGEventSet ... फ़ंक्शंस हैं। घटना को मारने के लिए, मुझे लगता है कि आपका टैप फ़ंक्शन सिर्फ वापस लौटा सकता है।

घटना प्रकारों के लिए गणना kCGEventFlagsChanged = NX_FLAGSCHANGED शामिल है। यदि आप IOKit/hidsystem/IOLLEvent.h देखो, यह NX_FLAGSCHANGED को परिभाषित करता है 12.

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