Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:将击键转发到其他进程_Swift_Macos_Cocoa - Fatal编程技术网

Swift:将击键转发到其他进程

Swift:将击键转发到其他进程,swift,macos,cocoa,Swift,Macos,Cocoa,我正在尝试编写一个应用程序,使用它的processID将其中一个文本字段上的按键转发到另一个进程 我得到的代码(如下)在监听按键(现在,所有按键)方面运行良好,但问题在于将事件(keyDown/keydup)转发到另一个进程 我尝试过的事情: cgfevent.postToPid:不起作用(没有发送到其他进程) CGEvent.postToPSN:无法使其工作,因为它需要进程序列号作为不可配置的指针(我不知道如何首先获取PSN) 手动创建CGEvent,然后尝试1。二, 阅读关于类及其函数的文档

我正在尝试编写一个应用程序,使用它的processID将其中一个文本字段上的按键转发到另一个进程

我得到的代码(如下)在监听按键(现在,所有按键)方面运行良好,但问题在于将事件(keyDown/keydup)转发到另一个进程

我尝试过的事情:

  • cgfevent.postToPid
    :不起作用(没有发送到其他进程)
  • CGEvent.postToPSN
    :无法使其工作,因为它需要进程序列号作为不可配置的指针(我不知道如何首先获取PSN)
  • 手动创建CGEvent,然后尝试1。二,
  • 阅读关于类及其函数的文档(它们似乎没有那么流行)
  • 任何帮助都将不胜感激

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

    其中一条评论认为权限可能是原因,事实确实如此

    我的问题通过转到项目的“功能”部分并禁用默认启用的应用程序沙箱来解决


    请记住,应用程序沙盒是应用程序在应用程序商店中的一项要求()

    这并不是一个快速的问题。这是一个macOS/Cocoa问题。此外,我认为您的发布应用程序需要添加到安全和隐私系统首选项窗格隐私选项卡中的辅助功能应用程序列表中。你做到了吗?另一个过程也是你的过程吗?这里的确切情况是什么?@robmayoff谢谢你的建议。事实证明,必须在Xcode项目的“功能”部分禁用(默认情况下启用)应用程序沙盒。我现在可以前进按键了。