私は、macOSのキーストロークをシミュレートし、アクティブなアプリケーションに送信しています。私は「A」を送信するために、例えばhttps://stackoverflow.com/a/27487493/5600424の線に沿ってなく、スウィフト3でそれをやっている:macOSのQuartzイベントでキーストロークをシミュレートするSierra
let eventSource = CGEventSource(stateID: CGEventSourceStateID.hidSystemState)
let key: CGKeyCode = 0 // virtual key for 'a'
let eventDown = CGEvent(keyboardEventSource: eventSource, virtualKey: key, keyDown: true)
let eventUp = CGEvent(keyboardEventSource: eventSource, virtualKey: key, keyDown: false)
let location = CGEventTapLocation.cghidEventTap
eventDown.post(tap: location)
eventUp.post(tap: location)
これはOSXエルキャピタン(スウィフト3、Xcodeの8.0)に罰金働いていたが、それは停止しましたmacOs Sierraにアップデートした後に動作します。アクティブなときにアプリケーション自体がキーストロークを受信しますが、別のアプリケーションがアクティブな場合はイベントが失われているように見えます。私は成功なしに何が起こっているのか把握しようとしましたが、ドキュメンテーションは役に立たない。どんな助けもありがとう、ありがとう!
「CGEventTapLocation.cgSessionEventTap」のように、別のタップ位置に投稿しようとしましたか?または、特定のアプリケーションをターゲットにしている場合は、 'postToPSN()'を使用しますか? –
こんにちは@Ken、私は特定のアプリケーションを対象としていない、私はフォアグラウンドアプリケーションのアクティブなウィンドウ(ユーザーが対話している)イベントを受信したいと思います。それは私が前シエラを意図したように働いていた。私も 'CGEventTapLocation.cgSessionEventTap'を試しましたが、動作は変わりません。別のアプリケーションに切り替えると、イベントは無視されます。おそらく正しい方法は 'NSWorkspace.shared()。runningApplications.first(where:{$ 0.isActive})'でフォアグラウンドアプリケーションを追跡し、 'postToPSN()'を使うことでしょうか? – tin
さて、 'NSWorkspace.shared()。frontmostApplication'を使う方が適切でしょう。 ;)確かにそれを試すことができます。また、シエラがイベントの投稿セキュリティを強化し、キーイベントのタップに必要な補助的なアクセスが必要な場合もあります。 –