Я пытаюсь перехватить события перемещения мыши с помощью метода CGEvent.tapCreate(tap:place:options:eventsOfInterest:callback:userInfo:)
, как показано ниже:
let cfMachPort = CGEvent.tapCreate(tap: CGEventTapLocation.cghidEventTap,
place: CGEventTapPlacement.headInsertEventTap,
options: CGEventTapOptions.defaultTap,
eventsOfInterest:CGEventMask(CGEventType.mouseMoved.rawValue),
callback: {(eventTapProxy, eventType, event, mutablePointer) -> Unmanaged<CGEvent>? in event
print(event.type.rawValue) //Breakpoint
return nil
}, userInfo: nil)
let runloopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, cfMachPort!, 0)
let runLoop = RunLoop.current
let cfRunLoop = runLoop.getCFRunLoop()
CFRunLoopAddSource(cfRunLoop, runloopSource, CFRunLoopMode.defaultMode)
Я передаю как тип события eventsOfInterest
mouseMoved
события с необработанным значением 5 как видно из документации . Но по какой-то причине мой print()
не выполняется, пока я не щелкну мышью. Проверка события отправки мыши в отладчике дает мне необработанное значение 2, которое согласно документации является событием leftMouseUp
.
В документации для CGEvent.tapCreate(tap:place:options:eventsOfInterest:callback:userInfo:)
там написано:
Отводы событий получают события нажатия клавиш «вверх» и «ключ вниз» [...]
Так что кажется, что метод игнорирует mouseMoved
события в генеральный?! Но как мне слушать 1025 событий? Я пытаюсь предотвратить замену моего курсора (пользовательского курсора) (например, при наведении курсора на панель приложения в нижней части экрана).