Last active
September 29, 2024 04:50
-
-
Save bladeSk/9feeeb6c2ba9939faa3c88cc9133700c to your computer and use it in GitHub Desktop.
AutoHotKey: Make mouse cursor follow window focus
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Makes the mouse cursor follow window focus, but ONLY if the focus change | |
; wasn't caused by the mouse - e.g. Alt-Tab, Win+<Number>, hotkeys, ... | |
; Saves a lot of mousing around on multi-monitor setups! | |
Gui +LastFound | |
lastMouseClickTime := 0 | |
hWnd := WinExist() | |
DllCall("RegisterShellHookWindow", UInt, hWnd) | |
msgNum := DllCall("RegisterWindowMessage", Str, "SHELLHOOK") | |
OnMessage(msgNum, "OnShellMessage") | |
OnMessage(WM_MOUSEMOVE:=0x0201, "OnMouseDown") | |
Return | |
OnShellMessage( wParam, lParam ) | |
{ | |
global | |
; HSHELL_WINDOWACTIVATED | HSHELL_RUDEAPPACTIVATED | |
If (wParam = 4 or wParam = 32772) { | |
; ignore when dragging | |
GetKeyState, mouseDown, LButton | |
if (mouseDown <> "D" and A_TickCount - lastMouseClickTime > 500) { | |
; delay a tiny bit to ignore taskbar focus on Win+Number switching | |
Sleep, 10 | |
CoordMode, Mouse, Screen | |
WinGetPos, wx, wy, width, height, A | |
; puts the cursor in the upper right corner of the active window, tweak to your needs | |
mx := Round(wx + width * 0.85) | |
my := Round(wy + height * 0.35) | |
DllCall("SetCursorPos", int, mx, int, my) | |
} | |
} | |
} | |
*~LButton:: | |
lastMouseClickTime := A_TickCount | |
Return | |
*~RButton:: | |
lastMouseClickTime := A_TickCount | |
Return | |
*~MButton:: | |
lastMouseClickTime := A_TickCount | |
Return |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment