我正在添加第二个答案,因为我现在收集您希望实现的是获取对属于单个应用程序的单独、同时运行的实例的窗口的引用,这些窗口是使用 Terminalopen -n 打开的/em>
所以我只是继续做同样的事情。我从 Terminal 启动了第二个 Script Editor 实例,每个实例都有一个名为“Untitled”的窗口。我在其中一个实例中打开了另一个文档(所以一个实例有两个窗口,另一个只有一个)。我已经像这样检索了两个实例的窗口:
tell application "System Events" to get every window of ¬
(every process whose name is "Script Editor")
--> {{window "Untitled" of application process "Script Editor" of application "System Events", ¬
window "Import To Photos" of application process "Script Editor" of application "System Events"}, ¬
{window "Untitled" of application process "Script Editor" of application "System Events"}}
它返回一个列表,但在这个列表中嵌套了两个单独的列表——一个用于脚本编辑器的每个实例——在这些列表中是属于每个列表的窗口实例。如您所料,一个列表有一个项目(因为应用程序的实例只有一个窗口,称为“无标题”),另一个列表有两个项目(对于它的两个窗口,其中一个也称为“无标题”)。
但如果我只对名为“Untitled”的窗口感兴趣,那么我可以运行这个:
tell application "System Events" to get window "Untitled" of ¬
(every process whose name is "Script Editor")
--> {window "Untitled" of application process "Script Editor" of application "System Events", ¬
window "Untitled" of application process "Script Editor" of application "System Events"}
这次只是一个列表,我的两个看似相同的窗口。
可以通过使用应用程序进程的 unix id 来区分它们:
tell application "System Events" to get [window "Untitled", unix id] of ¬
(every process whose name is "Script Editor")
--> {{window "Untitled" of application process "Script Editor" of application "System Events", ¬
window "Untitled" of application process "Script Editor" of application "System Events"}, ¬
{73822, 73913}}
您还可以使用进程的 id 属性而不是它们的 unix id,如果您想定位其中一个窗口,它的好处是可以轻松引用单行。 id 和 unix id 是不同的属性,并且是独一无二的:
tell application "System Events" to get [id, unix id] of ¬
(processes whose name is "Script Editor")
--> {{42006541, 42100772}, {73822, 73913}}
所以我可以像这样定位特定实例的特定窗口:
tell application "System Events" to ¬
get window "Untitled" of process id 42006541
--> window "Untitled" of application process "Script Editor" of application "System Events"