1
我想製作一個應用程序,強制用戶在特定時間休息一下。 我找不到這樣做的方法。到現在爲止,我正要使用CGEvent按鍵時收到通知,但僅適用於鼠標輸入。如何在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()
無論設置了什麼事件掩碼,回調僅從鼠標動作觸發。
所以我的問題是一分爲二:
- 爲什麼上面的代碼不上的keydown
- 觸發器是任何其他方式來實現這一任務?
謝謝。
目前的runloop是主要的runloop?在Objective-C中,我必須使用'CGEventMaskBit'將每個事件類型轉換爲一個掩碼。 – Willeke
是的主循環。如果我使用CGEventMaskBit,則eventTap爲空。 –
主要的runloop已經在運行。你如何使用'CGEventMaskBit'? – Willeke