我正在尝试编写一个应用程序,使用其processID将其某个TextField上的按键转发到另一个进程。
我听到的代码(下面)在按下按键时(现在,所有按键)都很有效,但问题来自于将事件(keyDown / keyUp)转发到另一个进程。
我尝试过的事情:
CGEvent.postToPid
:不起作用(没有发送到其他进程)CGEvent.postToPSN
:无法让它工作,因为它需要将Process Serial Number作为UnsafeMutableRawPointer(不是我知道如何让PSN首先出现)非常感谢任何帮助。
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 :(得分:0)
其中一条评论表明权限可能是原因,而且是。
我的问题通过转到我的项目的功能部分并禁用默认启用的应用程序沙盒来解决。
请注意,App Sandboxing是您的应用在App Store上的要求(reference)