--- scripts/watcher.py 2026-10-05 15:36:41.365744391 +0000 +++ scripts/watcher.py 2026-10-05 15:36:41.365744391 +0000 @@ -115,6 +115,11 @@ 'A8': 0, 'A9': 900, 'A10': 1800, } +# 窗名搜尋字串(自選 windowname 補丁):enforce_window_geometry 同 _get_browser_window_id 由原本 +# 兩套字串('Arena' vs 'Chrome')統一用同一個;可用 env W11_WINDOW_SEARCH 覆寫。 +# 另:設 W11_STRICT_PIXEL=1 會令像素關卡搵唔到窗時 fail-closed(預設唔設=維持原本 fail-open)。 +W11_WINDOW_SEARCH = os.environ.get("W11_WINDOW_SEARCH") or "Arena" + def enforce_window_geometry(sid): """強制 browser window 尺寸(2026-10-05 19:49 HKT owner 下令:硬性規定) 硬規則:如果唔係 1408x900,一律唔准運行,必須鎖死喺呢個尺寸。 @@ -126,7 +131,7 @@ import subprocess try: result = subprocess.run( - ['xdotool', 'search', '--onlyvisible', '--name', 'Arena'], + ['xdotool', 'search', '--onlyvisible', '--name', W11_WINDOW_SEARCH], capture_output=True, text=True, timeout=5, env={**os.environ, 'DISPLAY': ':99'} ) @@ -961,7 +966,7 @@ """攞 browser window ID(最大嗰個 Chrome window)""" import subprocess try: - out = subprocess.run(['xdotool', 'search', '--name', 'Chrome'], + out = subprocess.run(['xdotool', 'search', '--name', W11_WINDOW_SEARCH], capture_output=True, text=True, timeout=5, env={**__import__('os').environ, 'DISPLAY': ':99'}) wids = [w for w in out.stdout.strip().split('\n') if w] @@ -1047,6 +1052,9 @@ try: wid = _get_browser_window_id() if not wid: + if os.environ.get("W11_STRICT_PIXEL"): + log(sid, "像素關卡搵唔到窗(W11_STRICT_PIXEL=1)→ fail-closed,唔當過") + return False return True # 第1套:紫色(優先) — check (715,415) #f3e9f7 → click (580,605)