- BrightnessController enumerates monitors, opens each via dxva2 and reads/writes
brightness directly (sub-ms); falls back per monitor to screen_brightness_control
(WMI) for panels without DDC/CI (laptop internal screens)
- native dim sets each monitor to its minimum; restore sets saved value
- tagged v1-wmi-only before this change as safe rollback point
- black screen now appears immediately (window creation), while the slow
screen-brightness-control WMI queries (get+set) run in a daemon thread and
are invisible behind the black overlay
- one-folder COLLECT build removes the ~2-3s one-file archive extraction
- fixes second monitor not fully covered (gap at top): each monitor now gets its
own window sized exactly to its rcMonitor in device coords, with per-monitor V2
DPI awareness, so it covers the full screen regardless of layout/DPI
- dropped pygame; black fill + 'ESC - exit' hint drawn via GDI
- global ESC via low-level keyboard hook (works without window focus)
- logging to %TEMP%\black_screen_dim.log (start, monitor rects, brightness, errors)
- requirements.txt: pygame removed
- get_virtual_screen_rect(): bounds of the whole virtual desktop (negative x/y OK)
- window pinned topmost across every monitor via SetWindowPos + SetForegroundWindow
- brightness saved/restored as a per-monitor list (was only first monitor)
- resource_path() so icon.ico is found in the frozen exe; spec now bundles it