我正在開發一個桌面應用程序,通過熱鍵支持其中一項功能。我正在使用Event Tap來運作。熱鍵回調事件點擊(CFMachPortRef)問題未被調用
但是,有時(隨機)回調不會被調用;熱鍵不起作用,因此該功能似乎不起作用。
有人可以幫我找出問題在這裏。
以下是代碼片段:
-(void)startEventTapinThread //Called in a separate thread.
{
NSAutoreleasePool *pool =[ [ NSAutoreleasePool alloc] init];
CFRunLoopRef runloop =(CFRunLoopRef)CFRunLoopGetCurrent();
CGEventMask interestedEvents = CGEventMaskBit(kCGEventFlagsChanged)|CGEventMaskBit(kCGEventKeyDown);
CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, interestedEvents, myCGEventCallback, self); //self is the object pointer our method
CFRunLoopSourceRef source = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
CFRunLoopAddSource((CFRunLoopRef)runloop , source, kCFRunLoopCommonModes);
CFRunLoopRun();
[ pool release];
}
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon)
{
CGEventType eventType = CGEventGetType(event);
//execute the code related to feature
}
經過數小時的調試後,我注意到myCGEventCallback僅在kCGEventFlagsChanged中被調用;它僅在kCGEventKeyDown時才被調用。我究竟做錯了什麼? – spd 2011-03-28 06:21:22