【问题标题】:xcode ios simulator: how to set focus on specific windowxcode ios模拟器:如何将焦点设置在特定窗口上
【发布时间】:2021-10-23 19:33:36
【问题描述】:

我有n xcode ios 模拟器实例,我想将焦点切换到具有指定 ID 的实例。 我尝试了接下来的事情:

  • 使用“打开”切换焦点:open -a Simulator --args -CurrentDeviceUDID <id>。但它会打开最后一个聚焦的模拟器实例,而不是带有传递 id 的实例。
  • 使用 simctl 工具切换焦点。我试图在模拟器xcrun simctl openurl <id> "https://www.google.com"的特定实例中打开URL,但它并没有改变焦点。
  • 使用 applescript - 它仍然专注于最后一个焦点模拟器实例:
tell application "System Events" to tell process "Simulator"
    perform action "AXRaise" of window 0
end tell

您有什么想法,如何做到这一点?

【问题讨论】:

  • 如果你想使用 System Eventsperform action "AXRaise" of window ... 它需要是 windowname,而不是 编号,因为你目前正在尝试这样做。
  • 如何获取窗口的名称?尝试这样做:set wList to every window whose visible is true,并得到这个(*window id 54456, window id 54541, window id -1*)
  • 我已经用一些附加信息更新了我的答案。如果您对在自己的代码中实施其方法有任何疑问,请查看并告诉我。

标签: xcode applescript ios-simulator simctl


【解决方案1】:

以下示例 AppleScript 代码 是一种适合我的方法:

示例 AppleScript 代码

tell application "Simulator"
    activate
    set winName to the name of ¬
        the first window ¬
            whose visible is true ¬
        and index is not 1
end tell

tell application "System Events" to ¬
    perform action "AXRaise" of ¬
        window winName of ¬
        process "Simulator"

注意事项:

示例 AppleScript 代码假设您有两个可见的模拟器 窗口,它会在两者之间切换加注。显然这只是一个示例,您需要修改该方法并将其合并到您自己的代码中。

在您的示例 AppleScript 代码中,windown指的是它的索引 如:

index(整数):窗口的索引,从前到后排序。

    上面引用的行来自 AppleScript dictionary 用于 Script Editor 中的 Simulator

indexz-order开始于:1

使用系统事件perform action "AXRaise" of window ...可以通过namepropertyindexproperty来完成。

示例 AppleScript 代码,如上所示,在 ma​​cOS Catalina 下的 Script Editor 中进行了测试系统偏好设置 中的 语言和地区 设置设置为 英语(美国)- 主要 并且为我工作没有问题 1.

  • 1 假设 系统偏好设置 > 安全和隐私 > 隐私中的必要和适当的设置已设置/根据需要解决。


注意:示例 AppleScript 代码就是这样,没有任何包含的错误处理 em> 不包含任何适当的附加错误处理。用户有责任根据需要或需要添加任何错误处理。查看AppleScript Language Guide 中的try statementerror statement。另请参阅Working with Errors。此外,在适当的情况下,可能需要在事件之间使用delay 命令,例如delay 0.5延迟设置得当。

【讨论】:

  • 谢谢,你的例子是Cmd + Tab,但我需要更复杂的东西——我需要用指定的ID打开窗口。问题是每次我根据z-index切换到另一个窗口时,windows id的顺序都会发生变化。
  • RE:“谢谢,您的示例可用作 Cmd + Tab,但我需要更复杂的东西”——我明白这只是一个 示例,并不意味着从字面上实现。 -- RE: “问题是每次我根据 z-index 切换到另一个窗口时,windows id 的顺序都会发生变化” -- id propertyindex window 的 i>property 是两个不同的东西,与 z-order 相关的是后者而不是前者。如果您可以明确明确地说明您的需求是什么,我相信我可以为您提供更好的 example AppleScript code.
  • 回复:“如果您可以明确明确地说明您的需求是什么,我相信我可以为您提供更好的 AppleScript 代码示例。”我在一台mac OS机器上有几个模拟器,我需要在其中一个模拟器上执行一些击键,具有模拟器的UUID。因此,在击键执行之前,我需要专注于传递 UUID 的模拟器。这就是为什么我想了解如何使用它们的 id 在窗口之间切换焦点。
  • @Rostislav Shtanko,你如何确定UUID,注意到window id 不是UUID
  • 我可以制作一张地图:模拟器UUID -> 窗口id,模拟器启动时保存这个信息。所以,我需要专注于窗口,使用这个窗口的 id。有可能吗?
猜你喜欢
  • 1970-01-01
  • 2011-07-04
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2011-11-11
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多