多螢幕 / 虛擬桌面幾何

snap_windowarrange_grid 與版面規劃器都只取單一主螢幕 (width, height)——它們對多螢幕無感: 無法在第二台顯示器上鋪排、也無法處理負原點的虛擬桌面,而 coordinate_space 只縮放模型網格。本功能補上缺少 的實體層:列舉各螢幕、計算聯集虛擬邊界、查詢某點或某視窗位於哪台螢幕、在虛擬座標與各螢幕區域座標間轉換, 並把某點重映射到另一台螢幕上的等效位置。

幾何運算皆是對純 Monitor dataclass 的算術,因此完全可單元測試;只有 enumerate_monitors 的預設 provider 會碰到 OS(透過 mss),且可注入。不匯入 PySide6

無頭 API

from je_auto_control import (enumerate_monitors, monitor_at_point,
                             virtual_bounds, to_local, remap_point)

monitors = enumerate_monitors()
print(virtual_bounds(monitors))            # 涵蓋所有顯示器的 (x, y, w, h)

here = monitor_at_point(monitors, x, y)    # 此點屬於哪台螢幕
idx, lx, ly = to_local(monitors, x, y)     # 虛擬 -> (螢幕, 區域 x, 區域 y)

# 把某點移到另一台螢幕上的等效相對位置。
second = remap_point(monitors[0], monitors[1], 960, 540)

Monitor 帶有 index, x, y, width, height, scale, primarywork 區域(.bounds / .contains(x, y) / .to_dict())。virtual_bounds 回傳聯集框(原點可能為負);``primary_monitor`` 取主螢幕; monitor_for_window(rect, monitors) 回傳視窗主要佔據的顯示器(最大重疊);``to_virtual`` 是 to_local 的反向; remap_point 保留分數位置,因此可跨不同解析度與 DPI 運作。

執行器命令

AC_enumerate_monitors{count, monitors, virtual_bounds}AC_monitor_at_point``(``x / y)→ {found, monitor}。它們以 MCP 工具 ac_enumerate_monitors / ac_monitor_at_point 以及 Script Builder 中 Window 分類下的命令提供。