将窗口聚焦在鼠标下方并发送热键

将窗口聚焦在鼠标下方并发送热键

当在 Chrome 下使用指针按下“Ctrl + WheelUp/Down”时,我想聚焦 Chrome 窗口一次,然后发送 ^+tab 热键,如我的代码所示:

Ctrl & WheelUp::
MouseGetPos,,, WinUMID
WinGetClass, class, ahk_id %WinUMID%

if (InStr(class,"Chrome_WidgetWin_1")) {
send, {Ctrl down}{Shift down}{tab}
send, {Ctrl up}{Shift up}
}

if not (InStr(class,"Chrome_WidgetWin_1")) {
    IfWinNotActive, ahk_class Chrome_WidgetWin_1
    WinActivate, ahk_class Chrome_WidgetWin_1
}
return

Ctrl & WheelDown::
MouseGetPos,,, WinUMID
WinGetClass, class, ahk_id %WinUMID%

if (InStr(class,"Chrome_WidgetWin_1")) {
send, {Ctrl down}{tab}
send, {Ctrl up}
}

if not (InStr(class,"Chrome_WidgetWin_1")) {
    IfWinNotActive, ahk_class Chrome_WidgetWin_1
    WinActivate, ahk_class Chrome_WidgetWin_1
}
return

我不希望每次执行“Ctrl + WheelUp/Down”时此窗口都聚焦,因为它会减慢选项卡切换速度,因为我在将鼠标滚轮朝一个方向↑↓移动时多次执行^+tab代码。

答案1

评论#1:如果两个事件的代码相同,则可以对两个组合使用相同的代码,如下所示:

Ctrl & WheelUp::
Ctrl & WheelDown::

    MouseGetPos,,, WinUMID
    WinGetClass, class, ahk_id %WinUMID%

    if (InStr(class,"Chrome_WidgetWin_1")) {
        send, {Ctrl down}{tab}
        send, {Ctrl up}
    }

    if not (InStr(class,"Chrome_WidgetWin_1")) {
        IfWinNotActive, ahk_class Chrome_WidgetWin_1
            WinActivate, ahk_class Chrome_WidgetWin_1
    }

return

评论#2:你实际上并没有问一个问题,但我从帖子中猜测A)代码有效,但B)它触发事件太快或太频繁,这导致窗口焦点出现问题(?)

如果是这种情况,您可以尝试使用变量来跟踪 A_TickCount,并且如果 wheelup/down 事件的函数调用之间没有足够长的延迟,则简单返回...

if (A_TickCount<(lastTick+500)) ; this event is <500ms from last event?
&& (A_ThisHotkey=lastHotkey)    ; scroll direction still the same?
    return

lastTick := A_TickCount
lastHotkey := A_ThisHotkey

此外,如果您最终将此类代码移入函数,则需要将“最后”变量声明为静态,以便在函数调用之间保留它们的值。

相关内容