通过进程 ID 将 KeyEvent 发送到目标窗口

2024-03-23

我需要创建一个关键事件(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

在你的情况下,你需要做的就是打电话后ToPid在你的CGEvent实例,并将 PID 作为参数传递:

let cgEvent = customEvent!.cgEvent
cgEvent?.postToPid(168) 

Edit
您的代码不起作用,因为您只是发送按键事件,而不是 CMD+R。您可以在 AppleScript 中轻松完成此操作。看这个问题:Mac:在 Chrome 或 Firefox 中重新加载文档? https://stackoverflow.com/questions/2091235/mac-reloading-document-in-chrome-or-firefox

Edit 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 测试成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过进程 ID 将 KeyEvent 发送到目标窗口 的相关文章

随机推荐