2015-12-12 15 views
7

以下は私の単純なAppDelegate.swiftクラスです。Swift NSEvent not working

// AppDelegate.swift 

import Cocoa 

@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    func applicationDidFinishLaunching(aNotification: NSNotification) { 
     NSEvent.addGlobalMonitorForEventsMatchingMask(NSEventMask.KeyDownMask, handler: keyDown); 
    } 

    func keyDown(event:NSEvent!) { 
     print("key down is \(event.keyCode)"); 
    } 

} 

どのようにキーダウンイベントが表示されないのですか?私は何が欠けていますか? 私は周りを探索しようとしましたが、それを理解することはできません。 addGlobalMonitorForEventsMatchingMask:handler:NSEvent.hによると

答えて

6

:アクセスが を有効になっている場合や、アプリケーションがアクセシビリティのアクセスに対して信頼されている場合

キー関連のイベントのみを監視することができる(AXUIElement.hで AXIsProcessTrustedを参照してください)。自分のアプリケーションに送信されるイベントに対しては、ハンドラは を呼び出さないことに注意してください。

+0

をこれは働いていた、セキュリティとプライバシーに入った - >アクセシビリティ - >私のアプリ – user3813948

+0

可、どのパス私は開発中NSEvent機能をテストするために指定する必要がありますか? – Trent

+0

これを必要とせず、キープレスにも対応するクリップボードマネージャがたくさんありますが、どうやってそれをしますか?私はそれを許さなければなりませんでしたが、後に私はそれを取り除き、まだ働いています。 –

7

NSEventを現在使用しているようにグローバルに使用するには、アプリケーションがアクセシビリティ設定によって信頼できるようにする必要があります。あなたがNSEventを使用する場合は、ローカルにあなたができる:

func applicationDidFinishLaunching(aNotification: NSNotification) { 
    NSEvent.addLocalMonitorForEventsMatchingMask(NSEventMask.KeyDownMask, handler: keyDown); 
} 

func keyDown(event: NSEvent!) -> NSEvent { 
    NSLog("key down is \(event.keyCode)"); 
    return event 
} 
+1

他の人が彼が最初の理由で答えるのを受け入れましたが、助けてくれてありがとう – user3813948