我需要创建一个键事件(cmd + r用于浏览器窗口的刷新)并传递我尝试定位的窗口的进程ID。让我们说
let customEvent = NSEvent.keyEvent(with: NSEvent.EventType.keyUp,
location: NSPoint(),
modifierFlags: NSEvent.ModifierFlags.command,
timestamp: TimeInterval(),
windowNumber: 0,
context: NSGraphicsContext(),
characters: "",
charactersIgnoringModifiers: "",
isARepeat: false,
keyCode: 0x0F);
let cgEvent = customEvent!.cgEvent
cgEvent!.postToPid(688) // I want to post to a process with pid 688
答案 0 :(得分:0)
在您的情况下,您需要做的就是在 CGEvent 实例上调用 postToPid ,并将PID作为参数传递:
let cgEvent = customEvent!.cgEvent
cgEvent?.postToPid(168)
修改强>
您的代码无法正常工作,因为您只是发送了一个密钥启动事件,而不是CMD + R.您可以在AppleScript中轻松完成此操作。请参阅此问题:Mac: reloading document in Chrome or Firefox?
修改2
没有AppleScript,我就是这样做的:
let src = CGEventSource(stateID: .hidSystemState)
if let event = CGEvent(keyboardEventSource: src, virtualKey: 0x0f, keyDown: true)
{
event.flags = .maskCommand
event.postToPid(your_browser_pid)
}
使用Safari成功测试。