1
私は、そのプロセスIDを使用して、そのTextFieldのキー押しを別のプロセスに転送するアプリケーションを作成しようとしています。スウィフト:前方のキーストロークを別のプロセスに
私が持っているコード(以下)は、キープレス(現在はすべてのキープレス)を聞くという点ではうまく機能しますが、イベント(keyDown/keyUp)を他のプロセス。
物事私が試してみました:
CGEvent.postToPid
:それはUnsafeMutableRawPointerとしてプロセスのシリアル番号を必要とする、それが仕事を得ることができませんでした(:(他のプロセスに送信されたものを)CGEvent.postToPSN
動作しません- CGEventを手動で作成してから、1.と2を試してみてください。
- クラスとその機能についてのドキュメントを読んでいます(それらはそうではありません人気)
ご協力いただければ幸いです。
import Cocoa
class ViewController: NSViewController {
var pid: Int32 = 12345
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
(event) -> NSEvent? in
self.keyDown(with: event)
return event
}
// For some reason, keyUp is triggered twice
NSEvent.addLocalMonitorForEvents(matching: .keyUp) {
(event) -> NSEvent? in
self.keyUp(with: event)
return event
}
}
override func keyDown(with event: NSEvent) {
print("Down " + String(event.keyCode))
var cgEvent = event.cgEvent
cgEvent?.postToPid(pid)
}
override func keyUp(with event: NSEvent) {
print("Up " + String(event.keyCode))
var cgEvent = event.cgEvent
cgEvent?.postToPid(pid)
}
}
(reference)アプリケーションサンドボックスは、App Storeの上にあるように、あなたのアプリケーションのための必要条件であることに留意してください。これはmacOS/Cocoaの質問です。また、セキュリティ&プライバシーシステム環境設定パネルの[プライバシー]タブで、あなたの投稿アプリをアクセシビリティアプリのリストに追加する必要があると思います。あなたはそれをしましたか? –
他のプロセスもプロセスですか?ここの正確な状況はどうですか? – matt
@robmayoff提案していただきありがとうございます。 XcodeプロジェクトのCapabilitiesセクションで、App Sandboxを無効にしなければならなかった(デフォルトで有効にする)必要がありました。私は今、キー押しを転送することができます。 – fort08