#Requires AutoHotkey v2.0 #SingleInstance Force ; ============================================================ ; ETRON Kundendisplay -> automatisch linker Monitor + F11 ; Windows 11 / Google Chrome / AutoHotkey v2 ; ============================================================ ; Das Skript reagiert nur auf Chrome-Fenster, deren Fenstertitel ; einen dieser Begriffe enthaelt. TITLE_WORDS := ["Kundendisplay", "Customer Display"] ; Wie oft nach dem Kundendisplay gesucht wird (Millisekunden) CHECK_INTERVAL := 500 processed := Map() SetTimer(CheckKundendisplay, CHECK_INTERVAL) ; Optionaler Test-Hotkey: ; Strg + Alt + D zeigt den Titel des aktuell aktiven Fensters an. ^!d:: { hwnd := WinExist("A") title := WinGetTitle(hwnd) A_Clipboard := title MsgBox("Fenstertitel:`n`n" title "`n`nDer Titel wurde auch in die Zwischenablage kopiert.") } CheckKundendisplay() { global TITLE_WORDS, processed ; Alte Fenster-Handles wieder aus der Liste entfernen. stale := [] for hwnd, _ in processed { if !WinExist(hwnd) stale.Push(hwnd) } for hwnd in stale processed.Delete(hwnd) ; Nur Chrome-Fenster pruefen. for hwnd in WinGetList("ahk_exe chrome.exe") { if processed.Has(hwnd) continue title := WinGetTitle(hwnd) if !IsCustomerDisplay(title) continue ; Sofort markieren, damit F11 nicht mehrfach getoggelt wird. processed[hwnd] := true targetMonitor := GetLeftMonitor() if !targetMonitor { MsgBox("Kein zweiter Monitor gefunden. Das ETRON-Kundendisplay wurde nicht verschoben.") continue } MonitorGet(targetMonitor, &L, &T, &R, &B) ; Fenster erst in einen normalen Zustand bringen, ; dann exakt auf den linken Monitor verschieben. try WinRestore(hwnd) Sleep(250) try WinMove(L, T, R - L, B - T, hwnd) Sleep(350) ; Kundendisplay aktivieren und echtes Chrome-Vollbild einschalten. try WinActivate(hwnd) Sleep(500) if WinActive(hwnd) { Send("{F11}") } else { ; Zweiter Versuch, falls Chrome beim ersten Mal noch nicht ; den Fokus angenommen hat. try WinActivate(hwnd) Sleep(500) if WinActive(hwnd) Send("{F11}") } } } IsCustomerDisplay(title) { global TITLE_WORDS for word in TITLE_WORDS { if InStr(title, word, false) return true } return false } GetLeftMonitor() { count := MonitorGetCount() if count < 2 return 0 primary := MonitorGetPrimary() MonitorGet(primary, &PL, &PT, &PR, &PB) primaryCenterX := (PL + PR) / 2 bestMonitor := 0 bestCenterX := -1000000000 ; Bevorzugt den Monitor links vom Hauptmonitor. Loop count { i := A_Index if i = primary continue MonitorGet(i, &L, &T, &R, &B) centerX := (L + R) / 2 if centerX < primaryCenterX && centerX > bestCenterX { bestCenterX := centerX bestMonitor := i } } ; Falls Windows die Monitore ungewoehnlich angeordnet hat: ; irgendeinen Nicht-Hauptmonitor verwenden. if !bestMonitor { Loop count { i := A_Index if i != primary return i } } return bestMonitor }