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