質問: ### 前提・実現したいこと OSXのアプリをSwiftで作成しています。 自アプリが非アクティブのときに、ドラッグされたイベントを正しく取得したいのです。 つまり、外部アプリのドラッグアンドドロップ操作をフックしたい。 NSEvent.addGlobalMonitorForEventsMatchingMask を使用して実現しようとしていますが、 ドラッグ開始1秒後〜ドラッグ終了直前までのイベントが正しく取得できません。 OSXのバージョン 10.11.2 Xcode Version 7.2.1 BaseSDK OSX 10.11 ### 現象 以下の画像は、マウスカーソルを(280, 320)から右方向におおよそ一定の速度でドラッグを行ったときのログです。 最初の方はイベントを取得できていますが、最後の2行を見ると、 (347, 319)から(1187, 319)まで一気に飛んでいます。 これはドラッグを終了した地点です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/885b05dbc54cd52adb4ef5eabbccbabc.png) ### ソースコード ``` class ViewController: NSViewController { override func viewDidLoad() { super.viewDidLoad() } override func viewWillAppear() { super.viewWillAppear() NSEvent.addGlobalMonitorForEventsMatchingMask(.LeftMouseDraggedMask, handler: { (event: NSEvent) -> Void in print(NSDate.init(), event.locationInWindow) }) } override var representedObject: AnyObject? { didSet { } } } ``` ### 補足情報 イベント監視の解放処理などは除いています。 自アプリのイベントを取得する NSEvent.addLocalMonitorForEventsMatchingMask では、ドラッグ処理を正しく取得できることを確認しています。
回答: 自己解決。 コードに問題はなかった。 動作確認する場所が悪かった。 Xcode上でドラッグしていたため、ログ出力が止まっていただけだった。