Fenster per Tastenbefehl auf dem Monitor positionieren

tipps&tricks,windows,desktop,autohotkey

Erstellt: 25.01.2018 Lesedauer 2 - 3 Min.

Auf einem Großen Monitor will man mehr als ein Fenster sehen. Die Basisfunktionen ab Windows 8 sind grundsätzlich hilfreich, bei einem richtig großen Monitor ist Halbieren jedoch immer noch zu viel des Guten.

Die Lösung liegt – wie immer öfter in den letzten Tagen – in einem Autohotkey-Skript.

Der Ansatz ist ein Gitter in der Anordnung eines Zahleneingabefelds und der Tasten drumherum. Zusätzlich noch # als „Hyperarbeitsplatz-Fenster“. Wenn das Autoscript installiert ist, stehen diese Befehle zur Verfügung, immer eingeleitet mit der Tastenfolge WIN 0 gefolgt von :

TasteFunktion
1Fenster unten links
2Fenster unten Mitte
3Fenster unten rechts
4Fenster Mitte links
5Fenster Mitte Mitte
6Fenster Mitte rechts
7Fenster oben links
8Fenster oben Mitte
9Fenster oben rechts
0Fenster Mitte Mitte, vergrößert
,Fenster Mitte Mitte, doppelte Höhe
#Fenster Mitte Mitte, doppelt hoch und breit
+Doppelte Höhe für aktuelles Fenster
-Doppelte Breite für aktuelles Fenster
*Volle Höhe für aktuelles Fenster
/Halbe Breite für aktuelles Fenster

Damit ist der Bildschirm in ein Raster 6 Felder breit und 3 Felder hoch aufgeteilt, in dem die Fenster per Tastenbefehl einsortiert werden können. Die „doppelt breit“ bzw. „doppelt hoch“-Funktion beachtet die jeweilige Fensterlage. Links wird es nach rechts breiter und umgekehrt, in der Mitte expanidert das Fenster nach links und rechts – weil das praktisch ist. Die Höhe verhält sich analog mit oben und unten, wobei die Mitte nur nach unten expandiert.

Das Skript kann in eine Skript-Bibliothek eingefügt oder in einer Datei mitgeladen werden.

Die Fensterauswahl lässt sich mit Standard-Windows Shortcuts ( ALT TAB und Pfeiltasten) beschleunigen.

Eine nützliche Ergänzung zur freien und dennoch strukturierten Fensteranordnung ist das Programm WindowGrid.

; Fenstersteuerung
; Der BS wird in neun Bereiche aufgeteilt und mit der Tastatur adressiert ⟨1-9⟩, Anordnung wie NUM-Pad
; Trigger ist WIN 0 und dann die Position, alle anderen Eingaben werden ignoriert und das Skript bricht ab
#Numpad0::
#0::
;#WinActivateForce
WinActivate  ; Aktuelles Fenster nehmen
WinGetActiveTitle, Titel
WinRestore, %Titel%
SysGet Mwa, MonitorWorkArea
Input, Lage, L1, {Enter}
; oben links
If ⟨Lage = 7⟩
    WinMove, %Titel%, , 0, 0, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; oben mitte
If ⟨Lage = 8⟩
    WinMove, %Titel%, , ⟨MwaRight // 3⟩, 0, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; oben rechts
If ⟨Lage = 9⟩
    WinMove, %Titel%, , MwaRight - ⟨MwaRight // 3⟩, 0, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; mitte links
If ⟨Lage = 4⟩
    WinMove, %Titel%, , 0, ⟨MwaBottom // 3⟩, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; Mitte Mitte
If ⟨Lage = 5⟩
  WinMove, %Titel%, , ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; Mitte rechts
If ⟨Lage = 6⟩
  WinMove, %Titel%, , MwaRight - ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; unten links
If ⟨Lage = 1⟩
  WinMove, %Titel%, , 0, MwaBottom - ⟨MwaBottom // 3⟩, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; unten Mitte
If ⟨Lage = 2⟩
  WinMove, %Titel%, , ⟨MwaRight // 3⟩, MwaBottom - ⟨MwaBottom // 3⟩, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; unten rechts
If ⟨Lage = 3⟩
  WinMove, %Titel%, , MwaRight - ⟨MwaRight // 3⟩, MwaBottom - ⟨MwaBottom // 3⟩, ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩
; Mitte Mitte aber aufgezogen
If ⟨Lage = 0⟩
  WinMove, %Titel%, , ⟨MwaRight // 4⟩, ⟨MwaBottom // 4⟩, ⟨MwaRight // 2⟩, ⟨MwaBottom // 2⟩
; Doppelte Höhe im Raster
If ⟨Lage == "+"⟩
{
    WinGetPos, wx, wy, wb, wh, A
    If ⟨wy < ⟨MwaBottom // 2⟩⟩
        WinMove, %Titel%, , wx,wy,wb, MwaBottom - ⟨MwaBottom // 3⟩
    else
     WinMove, %Titel%, , wx, ⟨wy // 2⟩,wb, MwaBottom - ⟨MwaBottom // 3⟩
}
; Volle Höhe im Raster
If ⟨Lage == "*"⟩
{
    WinGetPos, wx, wy, wb, wh, A
    WinMove, %Titel%, , wx,0,wb, MwaBottom
}
; Halbe Breite im Raster
If ⟨Lage == "/"⟩
{
    WinGetPos, wx, wy, wb, wh, A
      If ⟨wx < ⟨MwaRight // 3⟩⟩     ; Fenster liegt links, nach links verkleinern
        WinMove, %Titel%, , wx,wy,⟨wb // 2,wh⟩
      else
          If ⟨wx < ⟨MwaRight // 2⟩⟩   ; Fenster liegt in der Mitte ⟨bleibt da, schrumpt zentriert
                WinMove, %Titel%, ,wx + ⟨wb // 4⟩,wy,⟨wb // 2⟩,wh
           else    ; Fenster liegt rechts, schrumpft nach rechts
              WinMove, %Titel%, , wx + ⟨wb // 2⟩, wy,⟨wb // 2⟩,wh
}
; Doppelte Breite im Raster
If ⟨Lage == "-"⟩
{
    WinGetPos, wx, wy, wb, wh, A
    If ⟨wx < ⟨MwaRight // 3⟩⟩     ; Fenster liegt links, Ausdehnung rechts
        WinMove, %Titel%, , wx,wy,MwaRight - ⟨MwaRight // 3⟩,wh
    else
          If ⟨wx < ⟨MwaRight // 2⟩⟩   ; Fenster liegt in der Mitte ⟨bleibt da, wird breiter
                WinMove, %Titel%, , ⟨wx // 2⟩,wy,MwaRight - ⟨MwaRight // 3⟩,wh
           else    ; Fenster liegt rechts, Ausehnung links
              WinMove, %Titel%, , ⟨wx // 2⟩, wy,MwaRight - ⟨MwaRight // 3⟩,wh
}
; Mitte Mitte doppelt hoch
If ⟨⟨Lage == ","⟩  OR ⟨Lage == "."⟩⟩   ; abhängig von Tastatureinstellung beim Numpad
     WinMove, %Titel%, , ⟨MwaRight // 3⟩, ⟨MwaBottom // 3⟩, ⟨MwaRight // 3⟩, 2*⟨MwaBottom // 3⟩
; Mitte Mitte doppelt hoch und breit
If ⟨Lage == "#"⟩
    WinMove, %Titel%, , ⟨MwaRight // 6⟩ ,⟨MwaBottom // 3⟩,⟨MwaRight // 6⟩*4,2*⟨MwaBottom // 3⟩
Return

Download der AHK-Datei als ZIP (2kB)