단축키를 통해이 기능 중 하나를 지원하는 데스크톱 응용 프로그램을 개발 중입니다. 이 기능을 사용하려면 이벤트 탭을 사용하고 있습니다.핫 키 콜백에 대한 이벤트 탭 (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