I've created an AutoHotKey script which allows me to switch between virtual desktops more comfortably but there is a weird issue that makes a random (but most often the most recent) app ask for attention.
^!LButton:: Send #^{Left}
^!RButton:: Send #^{Right}An app highlighting itself:
Changing ^ (Ctrl) to + (Shift) doesn't remove the issue.
Changing the whole input sequence to F4 (for one case) and F8 for another removed the issue, but it's not ergonomic and they aren't the keys I'd like to use.
1 Answer
Try this
^!LButton:: Send #^{Left} Click up FocusForemostWindow()
return
^!RButton:: Send #^{Right} FocusForemostWindow()
return
#If GetKeyState("Ctrl") and GetKeyState("Alt") LButton:: RButton:: return
#If
; Give focus to the foremost window on the current desktop.
FocusForemostWindow() { list := "" WinTitle := "" ; ToolTip ; get a list of all windows on the current desktop WinGet, id, list,,, Program Manager Loop, %id% { this_ID := id%A_Index% WinGetTitle, WinTitle, ahk_id %this_ID% If (WinTitle="") continue WinGet, exStyle, exStyle, ahk_id %this_ID% If !(exStyle & 0x100) continue If !IsWindowOnCurrentVirtualDesktop(this_ID) continue IfWinNotActive, ahk_id %this_ID% { WinActivate, ahk_id %this_ID% WinWaitActive, ahk_id %this_ID% } ; ToolTip, %WinTitle% break } Sleep, 30
}
;
; Indicates whether the provided window is on the currently active virtual desktop:
IsWindowOnCurrentVirtualDesktop(hWnd) { onCurrentDesktop := "" CLSID := "{aa509086-5ca9-4c25-8f95-589d3c07b48a}" IID := "{a5cd92ff-29be-454c-8d04-d82879fb3f1b}" IVirtualDesktopManager := ComObjCreate(CLSID, IID) Error := DllCall(NumGet(NumGet(IVirtualDesktopManager+0), 3*A_PtrSize), "Ptr", IVirtualDesktopManager, "Ptr", hWnd, "IntP", onCurrentDesktop) ObjRelease(IVirtualDesktopManager) if !(Error=0) return false, ErrorLevel := true return onCurrentDesktop, ErrorLevel := false
} 1