は、私が試したものです:MacOSのSwiftでキーストロークをグローバルに検出する方法は?ここ
NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in
print(event.keyCode)
}
残念ながら、それは何も印刷されません。
いいえ、それはthisの複製ではない、その質問は修飾キーについてですが、私の質問はキーストロークに関するものです。
は、私が試したものです:MacOSのSwiftでキーストロークをグローバルに検出する方法は?ここ
NSEvent.addGlobalMonitorForEvents(matching: [.keyDown]) { (event) in
print(event.keyCode)
}
残念ながら、それは何も印刷されません。
いいえ、それはthisの複製ではない、その質問は修飾キーについてですが、私の質問はキーストロークに関するものです。
"duplicate"マークが削除されたように見えますが、私はコメントセクションにkludgedしました。したがって、後継のため:
これはうまくいかない理由は、.keyDownイベントのグローバルモニタが、他のイベントハンドラのいくつかよりも多くのアクセス許可を必要とするためです。これは主に、グローバルな.keyDownモニターがキーロガーなどの悪意のある目的で使用されるためです。したがって、我々が合法であることを確認するための追加のセキュリティ対策があります。
1)あなたのアプリケーションにコード署名が必要です。
2)アプリはないにアプリケーションサンドボックスが有効になっている必要があり、かつ:
3)あなたのアプリはユーザー補助の下で、セキュリティに登録する必要があり、プライバシー設定ペイン。これらの事の
3つ目は、ユーザーが有効にする必要がありますが、このコードでその方向でそれらを微調整することができます:彼/彼女に選択肢を与え、これがユーザーに求めます
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
if !accessEnabled {
print("Access Not Enabled")
}
アプリケーションが署名されサンドボックスされていないと仮定して、グローバルな.keyDownモニタが動作するようにするアクセシビリティAPIを使用して、コンピュータ上でコンピュータを制御できるようにする適切な環境設定パネルを自動的に開きます。
soooたくさんありがとう! –
ありがとう! –