2009-11-21 53 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; 
} 

首先..如果我想編輯的事件是什麼?例如,我監聽keyDown事件,如果它是「a」,我將它轉換爲「b」,或者實時編輯鼠標位置,或者例如簡單地捕獲事件並使其無效(禁用特定鍵例如..)

第二.. CGEventType定義一個枚舉,只列出幾種類型..例如,當我打CMD我得到一個12,但是不符合枚舉中指定的值..我在想什麼?

+0

由戴維·德隆在這裏回答得很好: http://stackoverflow.com/questions/5785630/modify-nsevent-to - 發送-A-不同密鑰高於所述酮該-被按壓/ 5785895#5785895 – cksubs 2011-08-28 20:35:16

回答

2

要修改事件,有各種CGEventSet ...函數。爲了殺死這個事件,我認爲你的tap函數可以返回NULL。

事件類型的枚舉包括kCGEventFlagsChanged = NX_FLAGSCHANGED。如果你看到了由於IOKit/hidsystem/IOLLEvent.h,它定義NX_FLAGSCHANGED是12