swift - 区分进程的不同实例或窗口并找到它们的 PID 而不是它们的所有者 PID 以在 macOS 中发送输入事件?
问题描述
如果我打开浏览器的多个窗口/选项卡,并且我想区分它们以便我可以从我的应用程序中单独控制这些窗口,那么方法是什么?如果我以编程方式将命令发送到具有PID
id 的进程,它将将该命令发送到最近活动的窗口,但我想将命令发送到该进程的所有窗口。如果我查询正在运行的进程的 PID,CGWindowListOption
我会得到正在运行的进程的所有者 PID。let windowsListInfo = CGWindowListCopyWindowInfo(options, CGWindowID(0))
我需要知道并使用会同时触发多个窗口/进程的东西。同一进程的不同窗口是否有不同的PID?例如:Chrome tab 1 有一个 pid,tab 2 会有另一个 pid。如何找到那些 PID 而不是只找到所有者 PID?
那么如何找出具有相同所有者PID的多个窗口的进程的不同进程ID或类似属性?
解决方案
这将激活 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
只要有可能,您就想要这样的东西,而不是发送击键。
推荐阅读
- android - npx react-native run-android 不启动应用程序停留在 IDLE
- nuget - 如何从过时的 project.json 格式转换 .net 框架(非核心)项目
- docker - Google Cloud Composer KubernetesPodOperator InvalidImage 错误
- javascript - JavaScript 对象属性引用问题
- sharepoint-2013 - 添加 SharePoint 列表项,但不查看
- ios - UIBarButtonItem 标题文本对齐
- pact-jvm - 如何更新 pact jvm requestFilter 中的传入请求?
- php - 按用户实体参考视图过滤不起作用
- java - 应用性能监控工具 Spring Boot
- ios - Swift 闭包中“弱自我”的 Objective-C 等价物是什么?