AutoHotKey 脚本使用 ^!LButton 和 ^!RButton 在虚拟桌面之间切换,从开始菜单中突出显示一个应用程序

AutoHotKey 脚本使用 ^!LButton 和 ^!RButton 在虚拟桌面之间切换,从开始菜单中突出显示一个应用程序

我创建了一个 AutoHotKey 脚本,它允许我更舒适地在虚拟桌面之间切换,但是存在一个奇怪的问题,它会导致一个随机(但通常是最新的)应用程序要求注意。

^!LButton:: Send #^{Left}

^!RButton:: Send #^{Right}

一款突出其本身特色的应用程序:

在此处输入图片描述

^将( )更改Ctrl+( Shift) 并不能解决问题。将整个输入序列更改为F4(对于一种情况)并F8对于另一种情况可以解决问题,但这不符合人体工程学,而且它们不是我想要使用的键。

答案1

尝试这个

^!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
}

; https://autohotkey.com/boards/viewtopic.php?p=64295#p64295
; 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
}

相关内容