Dragging a window is a task a PC user does all the time. This autohotkey script allows for faster dragging by offering the ability to omit the aim-at-the-title-bar part of the task.
Simply move the mouse pointer above the window (focused or not) hold down right mouse button while pressing the left mouse button, then drag the window to a new position. You can optionally release right mouse button after pressing down the left mouse button rather than holding it down the whole time.
I’ve been using this script for many years in a dual screen configuration pc and it is by far my favorite general PC usage productivity enhancer.
(This script is a variation of Easy Window Dragging example )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
; Variation of Easy Window Dragging (requires XP/2k/NT) from autohotkey examples.
; by Foivos Christoulakis
; Normally, a window can only be dragged by clicking on its title bar.
; This script extends that so that any window can be dragged from any point within it.
; To activate this mode, hold down right mouse button while pressing the left mouse button
; then drag the window to a new position.
; Note: You can optionally release right mouse button after
; pressing down the left mouse button rather than holding it down the whole time.
; This script requires v1.0.25+.
; remapping of right button press to right button release in order to avoid registering
; a right button press while trying to activate the easy drag mode of this script.
RButton UP::Send {RButton}
#If (NOT (GetKeyState("Shift", "P") )) ; In this way, shift+ mouse right click works normally.
RButton & LButton::
CoordMode, Mouse ; Switch to screen/absolute coordinates.
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 ; Only if the window isn't maximized
SetTimer, EWD_WatchMouse, 10 ; Track the mouse as the user drags it.
return
EWD_WatchMouse:
GetKeyState, EWD_LButtonState, LButton, P
if EWD_LButtonState = U ; Button has been released, so drag is complete.
{
SetTimer, EWD_WatchMouse, off
return
}
GetKeyState, EWD_EscapeState, Escape, P
if EWD_EscapeState = D ; Escape has been pressed, so drag is cancelled.
{
SetTimer, EWD_WatchMouse, off
WinMove, ahk_id %EWD_MouseWin%,, %EWD_OriginalPosX%, %EWD_OriginalPosY%
return
}
; Otherwise, reposition the window to match the change in mouse coordinates
; caused by the user having dragged the mouse:
CoordMode, Mouse
MouseGetPos, EWD_MouseX, EWD_MouseY
WinGetPos, EWD_WinX, EWD_WinY,,, ahk_id %EWD_MouseWin%
SetWinDelay, -1 ; Makes the below move faster/smoother.
WinMove, ahk_id %EWD_MouseWin%,, EWD_WinX + EWD_MouseX - EWD_MouseStartX, EWD_WinY + EWD_MouseY - EWD_MouseStartY
EWD_MouseStartX := EWD_MouseX ; Update for the next timer-call to this subroutine.
EWD_MouseStartY := EWD_MouseY
return
#If