Ich möchte eine App machen, die den Benutzer zwingt für eine bestimmte Zeit eine Pause zu machen. Ich kann keinen Weg finden, das zu tun. Bis jetzt wollte ich CGEvent verwenden, um eine Benachrichtigung zu erhalten, wenn eine Taste gedrückt wird, aber nur für die Mauseingabe arbeiten.Wie deaktiviere ich Tastatureingaben in MacOs?
let eventMask = CGEventType.keyDown.rawValue //| (1 << CGEventType.keyUp.rawValue)
guard let eventTap = CGEvent.tapCreate(tap: .cgSessionEventTap,
place: .headInsertEventTap,
options: .defaultTap,
eventsOfInterest: CGEventMask(eventMask),
callback: myCGEventCallback,
userInfo: nil) else {
print("failed to create event tap")
exit(1)
}
let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes)
CGEvent.tapEnable(tap: eventTap, enable: true)
CFRunLoopRun()
Egal welche Ereignismaske gesetzt ist, Callback wird nur von der Mausaktion ausgelöst.
So ist meine Frage in zwei Teile gespalten:
- oben Code Warum nicht auf keydown
- auslöst Ist eine andere Möglichkeit, diese Aufgabe zu erreichen?
Danke.
Ist der aktuelle Runloop der Haupt Runloop? In Objective-C muss ich jeden Ereignistyp mit 'CGEventMaskBit' in eine Maske umwandeln. – Willeke
Ja ist die Haupt-Runloop. Wenn ich CGEventMaskBit verwende, ist die EventTap null. –
Der Haupt-Runloop läuft bereits. Wie benutzt man 'CGEventMaskBit'? – Willeke