2014-02-12 4 views

답변

1

CGEventTap으로 키보드 이벤트를 검사, 수정 및 차단할 수 있습니다.

사용자는 시스템 환경 설정의 보안 패널을 통해 응용 프로그램 보조 권한을 부여해야 이벤트를 게시하기 전에 비활성화 할 수 있습니다. 이 같은

뭔가 :

- (void)setKeyBlocker { 
    // You should filter this better than kCGEventMaskForAllEvents, depending on your needs. 
    CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, kCGEventMaskForAllEvents, cgEventCallback, NULL); 

    CFRunLoopSourceRef runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0); 
    CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes); 
    CGEventTapEnable(eventTap, true); 

    CFRelease(eventTap); 
    CFRelease(runLoopSource); 
} 

CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef cgEvent, void *refcon) { 
    NSEvent *event = [NSEvent eventWithCGEvent:cgEvent]; 

    if (event.type == kCGEventKeyDown) { 
     if ([event.characters isEqualToString:@"a"]) { 
      // Kill event 
      return NULL; 
     } 
    } 

    return cgEvent; 
}