我想编写一些AppleScript,它会迭代应用程序的(非最小化)窗口,并为每个应用程序将其带到前面并触发另一个应用程序BTT(将移动窗口)中的某些内容。目的是将应用程序的所有窗口移动到同一位置。移动部分已处理(由 BTT),我只需要帮助使这种情况发生在应用程序的所有窗口上。
(这个问题涉及BetterTouchTool,但它并不是真正的问题 - 我认为 - 我怀疑你不需要了解任何有关 BTT 的知识来回答......)
我正在尝试编写一个 AppleScript 脚本(当我将其简化为最简单的版本时)激活一些应用程序,并循环遍历其所有窗口,为每个窗口触发 BetterTouchTool“命名触发器”。指定触发器的工作是将当前窗口移动到某个位置,但其细节并不重要。
我觉得这应该很简单,但我似乎无法找到正确的方法。我已经尝试过对它进行货物崇拜,但我没有取得任何进展(除了怀疑我需要涉及“系统事件”)......我是一名经验丰富的程序员,但我从未深入研究过 AppleScript 和发现它做事的方式相当奇怪/令人困惑。
到目前为止,我正在工作的是一个不会在窗口上循环的版本,因此它只会点击“第一个”(在某种意义上的“第一个”,这似乎是“该应用程序最近活跃的”) )。
例如,以下作品。(我已将其硬编码到 VSCode,尽管在我尝试编写的完整内容中,它会迭代应用程序名称列表以及为它们运行的触发器。)
on run
if application "Visual Studio Code" is running then
tell application "Visual Studio Code" to activate
tell application "BetterTouchTool"
trigger_named "Move window: monitor 4k: core"
end tell
end if
end run
Run Code Online (Sandbox Code Playgroud)
这样就会激活 VSCode,然后告诉 BTT 运行命名触发器以将当前窗口移动到屏幕上的某个位置。效果是最近使用的 VSCode 窗口被移动。
好的,这是一个不错的开始,但我想对所有VSCode 窗口(或者理想情况下,当前可见桌面上的所有非最小化窗口)执行此操作。
BTT 的 AppleScript 界面似乎不支持针对特定窗口 - 它只适用于任何活动的应用程序/窗口,因此我需要以某种方式激活/将窗口置于前面(?),然后调用 BTT 触发器。
我想我需要这样的东西(暂时忽略忽略最小化窗口的问题):
on run
if application "Visual Studio Code" is running then
tell application "Visual Studio Code" to activate
repeat with app_window in windows
bring_window_to_front()
tell application "BetterTouchTool"
trigger_named "Move window: monitor 4k: core"
end tell
end repeat
end if
end run
Run Code Online (Sandbox Code Playgroud)
...我不知道如何做这个bring_window_to_front()部分!
(这里也没有考虑:其他桌面;但我认为没有它我也可以生活。)
有人能指出我正确的方向吗?感谢所有帮助!
我想要:
是的,您需要系统事件。它可以为您提供所有正在运行和可见的进程(即=应用程序)以及每个窗口的列表。
更重要的是,您可以直接更新每个窗口的位置。这是示例脚本,它获取所有应用程序的所有打开的窗口并移动“脚本编辑器”的“库”窗口的位置(我打开它进行测试):
tell application "System Events"
set theProcesses to application processes whose visible is true
repeat with aProcess in theProcesses -- loop thru all visible processes
set allWindows to every window of aProcess
repeat with myWindow in allWindows -- for each process, look for all windows
set Pname to name of aProcess
set Wname to name of myWindow
if Pname = "Script Editor" and Wname = "Library" then
set position of myWindow to {400, 900}
end if
end repeat -- window loop
end repeat -- process loop
end tell
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2432 次 |
| 最近记录: |