多螢幕 / 虛擬桌面幾何
snap_window、arrange_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, primary 與 work 區域(.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 分類下的命令提供。