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()
どのようなイベントマスクが設定されても問題はありませんが、コールバックはマウスの操作からのみトリガされます。
だから私の質問は2つに分割されています。なぜコードの上
- のKeyDown
- でトリガしませんが、そのタスクを達成するための他の方法ですか?
ありがとうございます。
現在のランループがメインランループですか? Objective-Cでは、 'CGEventMaskBit'を使って各イベントタイプをマスクに変換する必要があります。 – Willeke
はい、メインrunloopです。 CGEventMaskBitを使用すると、eventTapはnullになります。 –
メインrunloopはすでに実行されています。あなたは 'CGEventMaskBit'をどのように使っていますか? – Willeke