Einfache Fensterverschiebung (benötigt XP/2k/NT)

Normalerweise kann ein Fenster nur verschoben werden, wenn die Titelleiste angeklickt wird. Dieses Skript erweitert diese Funktion, sodass jeder Punkt in einem Fenster angeklickt werden kann. Um diesen Modus zu aktivieren, drückt man die linke Maustaste, während man die Feststell-Taste oder mittlere Maustaste gedrückt hält, und zieht das Fenster auf eine neue Position.

Dieses Skript herunterladen | Andere Beispiel-Skripte | Home

; Hinweis: Die Feststelltaste oder mittlere Maustaste kann optional losgelassen werden, nachdem
; die Maustaste gedrückt wurde, anstatt die Taste die ganze Zeit gedrückt zu halten.
; Dieses Skript benötigt v1.0.25+.

~MButton & LButton::
CapsLock & LButton::
CoordMode, Mouse  ; Auf Bildschirm-/absolute Koordinaten wechseln.
MouseGetPos, EWD_MouseStartX, EWD_MouseStartY, EWD_MouseWin
WinGetPos, EWD_OriginalPosX, EWD_OriginalPosY,,, ahk_id %EWD_MouseWin%
WinGet, EWD_WinState, MinMax, ahk_id %EWD_MouseWin% 
if EWD_WinState = 0  ; Nur, wenn das Fenster nicht maximiert ist
    SetTimer, EWD_WatchMouse, 10 ; Den Mauszeiger verfolgen, wenn er vom Benutzer gezogen wird.
return

EWD_WatchMouse:
GetKeyState, EWD_LButtonState, LButton, P
if EWD_LButtonState = U  ; Taste wurde losgelassen, daher ist das Ziehen abgeschlossen.
{
    SetTimer, EWD_WatchMouse, Off
    return
}
GetKeyState, EWD_EscapeState, Escape, P
if EWD_EscapeState = D  ; Escape wurde gedrückt, daher wird das Ziehen abgebrochen.
{
    SetTimer, EWD_WatchMouse, Off
    WinMove, ahk_id %EWD_MouseWin%,, %EWD_OriginalPosX%, %EWD_OriginalPosY%
    return
}
; Ansonsten das Fenster neu positionieren, damit es den Mauskoordinaten entspricht,
; bedingt durch das Ziehen des Mauszeigers:
CoordMode, Mouse
MouseGetPos, EWD_MouseX, EWD_MouseY
WinGetPos, EWD_WinX, EWD_WinY,,, ahk_id %EWD_MouseWin%
SetWinDelay, -1   ; Fenster wird schneller/flüssiger verschoben.
WinMove, ahk_id %EWD_MouseWin%,, EWD_WinX + EWD_MouseX - EWD_MouseStartX, EWD_WinY + EWD_MouseY - EWD_MouseStartY
EWD_MouseStartX := EWD_MouseX  ; Für den nächsten Timer-Aufruf auf diese Subroutine aktualisieren.
EWD_MouseStartY := EWD_MouseY
return