首页 > 解决方案 > 区分进程的不同实例或窗口并找到它们的 PID 而不是它们的所有者 PID 以在 macOS 中发送输入事件?

问题描述

如果我打开浏览器的多个窗口/选项卡,并且我想区分它们以便我可以从我的应用程序中单独控制这些窗口,那么方法是什么?如果我以编程方式将命令发送到具有PIDid 的进程,它将将该命令发送到最近活动的窗口,但我想将命令发送到该进程的所有窗口。如果我查询正在运行的进程的 PID,CGWindowListOption我会得到正在运行的进程的所有者 PID。let windowsListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))

我需要知道并使用会同时触发多个窗口/进程的东西。同一进程的不同窗口是否有不同的PID?例如:Chrome tab 1 有一个 pid,tab 2 会有另一个 pid。如何找到那些 PID 而不是只找到所有者 PID?

那么如何找出具有相同所有者PID的多个窗口的进程的不同进程ID或类似属性?

标签: swiftmacospid

解决方案


这将激活 TextEdit 中的每个窗口并发送空格键击。

activate application "TextEdit"

tell application "System Events"
    tell application process "TextEdit"
        repeat with theWindow in windows
            perform action "AXRaise" of theWindow
            keystroke " "
        end repeat
    end tell
end tell

但是要注意这在不按键的情况下如何工作,以下将“A”附加到所有当前打开的文档中,而不会将任何内容带到前台或干扰用户的输入。

tell application "TextEdit"
    repeat with theDocument in documents
        set text of theDocument to (text of theDocument) & "A"
    end repeat
end tell

只要有可能,您就想要这样的东西,而不是发送击键。


推荐阅读