HammerSpoon 同一アプリで複数ウィンドウを開いている場合にそれぞれのウィンドウを制御する方法
概要
アプリ名で絞り込んでからウィンドウの一覧を取得する方法もありますがプロセスとして独立してる場合にはそれだと取得できないことがあるのですべてのアプリを取得してからアプリ名でウィンドウを絞り込み操作します
環境
- macOS 15.2
- HammerSpoon 1.0.0
サンプルコード
hs.hotkey.bind({"cmd", "alt"}, "S", function()
local activeWindows = {}
local apps = hs.application.runningApplications()
for _, app in ipairs(apps) do
if app:name() == "MuMu Android Device" then
local windows = app:allWindows()
for i, win in ipairs(windows) do
table.insert(activeWindows, win)
end
end
end
local width = 275
local height = 527
local center_device_x = 960 - (275 / 2)
local toolbar_mergin_height = 25
local positions = {
{x = center_device_x, y = 0, w = width, h = height},
{x = center_device_x - width, y = 0, w = width, h = height},
{x = center_device_x + width, y = 0, w = width, h = height},
{x = center_device_x - (width * 2), y = 0, w = width, h = height},
{x = center_device_x + (width * 2), y = 0, w = width, h = height},
{x = center_device_x, y = height + toolbar_mergin_height, w = width, h = height},
{x = center_device_x - width, y = height + toolbar_mergin_height, w = width, h = height},
{x = center_device_x + width, y = height + toolbar_mergin_height, w = width, h = height},
{x = center_device_x - (width * 2), y = height + toolbar_mergin_height, w = width, h = height},
{x = center_device_x + (width * 2), y = height + toolbar_mergin_height, w = width, h = height},
}
for i, win in ipairs(activeWindows) do
if positions[i] then
win:setFrame(positions[i])
end
end
end)
最後に
制御するウィンドウをハッシュに登録してあとからウィンドウを操作するようにしています