Я разрабатываю настольное приложение, которое поддерживает одну из функций через горячую клавишу. Я использую Event Tap, чтобы это работало.
Но иногда (случайным образом) обратный вызов не вызывается; Горячая клавиша не работает и, следовательно, эта функция, кажется, не работает.
Может ли кто-нибудь помочь мне определить проблему здесь.
Ниже приведен фрагмент кода:
-( 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
}