2017-11-29 12 views
1

私は、そのプロセスIDを使用して、そのTextFieldのキー押しを別のプロセスに転送するアプリケーションを作成しようとしています。スウィフト:前方のキーストロークを別のプロセスに

私が持っているコード(以下)は、キープレス(現在はすべてのキープレス)を聞くという点ではうまく機能しますが、イベント(keyDown/keyUp)を他のプロセス。

物事私が試してみました:

  1. CGEvent.postToPid:それはUnsafeMutableRawPointerとしてプロセスのシリアル番号を必要とする、それが仕事を得ることができませんでした(:(他のプロセスに送信されたものを)
  2. CGEvent.postToPSN動作しません
  3. CGEventを手動で作成してから、1.と2を試してみてください。
  4. クラスとその機能についてのドキュメントを読んでいます(それらはそうではありません人気)

ご協力いただければ幸いです。

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) 
    } 
} 
+0

reference)アプリケーションサンドボックスは、App Storeの上にあるように、あなたのアプリケーションのための必要条件であることに留意してください。これはmacOS/Cocoaの質問です。また、セキュリティ&プライバシーシステム環境設定パネルの[プライバシー]タブで、あなたの投稿アプリをアクセシビリティアプリのリストに追加する必要があると思います。あなたはそれをしましたか? –

+0

他のプロセスもプロセスですか?ここの正確な状況はどうですか? – matt

+0

@robmayoff提案していただきありがとうございます。 XcodeプロジェクトのCapabilitiesセクションで、App Sandboxを無効にしなければならなかった(デフォルトで有効にする)必要がありました。私は今、キー押しを転送することができます。 – fort08

答えて

0

コメントの1つは、アクセス許可が原因である可能性があります。

私の問題は、プロジェクトのCapabilitiesセクションに移動し、デフォルトで有効になっているApp Sandboxingを無効にすることで解決しました。

は、これは本当にスウィフト問題ではない

関連する問題