복붙노트

[SWIFT] 스위프트 글로벌 수정 키를 눌러 감지

SWIFT

스위프트 글로벌 수정 키를 눌러 감지

해결법


  1. 1.당신이 deviceIndependentFlagsMask와의 modifierFlags 교차로를 확인하고 그 결과 키를 확인할 수 있도록 뷰 컨트롤러에 .flagsChanged 일치하는 이벤트에 대한 글로벌 모니터를 추가 할 수 있습니다.

    당신이 deviceIndependentFlagsMask와의 modifierFlags 교차로를 확인하고 그 결과 키를 확인할 수 있도록 뷰 컨트롤러에 .flagsChanged 일치하는 이벤트에 대한 글로벌 모니터를 추가 할 수 있습니다.

    class func addGlobalMonitorForEvents(matching mask: NSEventMask, handler block: @escaping (NSEvent) -> Void) -> Any?
    
    import Cocoa
    class ViewController: NSViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            NSEvent.addGlobalMonitorForEvents(matching: .flagsChanged) {
                switch $0.modifierFlags.intersection(.deviceIndependentFlagsMask) {
                case [.shift]:
                    print("shift key is pressed")
                case [.control]:
                    print("control key is pressed")
                case [.option] :
                    print("option key is pressed")
                case [.command]:
                    print("Command key is pressed")
                case [.control, .shift]:
                    print("control-shift keys are pressed")
                case [.option, .shift]:
                    print("option-shift keys are pressed")
                case [.command, .shift]:
                    print("command-shift keys are pressed")
                case [.control, .option]:
                    print("control-option keys are pressed")
                case [.control, .command]:
                    print("control-command keys are pressed")
                case [.option, .command]:
                    print("option-command keys are pressed")
                case [.shift, .control, .option]:
                    print("shift-control-option keys are pressed")
                case [.shift, .control, .command]:
                    print("shift-control-command keys are pressed")
                case [.control, .option, .command]:
                    print("control-option-command keys are pressed")
                case [.shift, .command, .option]:
                    print("shift-command-option keys are pressed")
                case [.shift, .control, .option, .command]:
                    print("shift-control-option-command keys are pressed")
                default:
                    print("no modifier keys are pressed")
                }
            }
        }
    }
    
  2. from https://stackoverflow.com/questions/41927843/global-modifier-key-press-detection-in-swift by cc-by-sa and MIT license