近日更新最新版本的 Google Chrome,之前一直在使用的 Chrome++ 第三方 DLL 扩展正式失效。由于一直习惯了双击关闭标签页 + 滚轮切换标签页,因此更新后无法使用极度不适,最后通过百度 + 自己修改解决。
前往 AutoHotkey 的官方网站下载最新版本的 AutoHotkey 并安装。
原脚本来自知乎,现做了一些修改。
#NoEnv #SingleInstance force IniRead, doubleclick, settings.ini, option, doubleclick,Check IniRead, scrolltab, settings.ini, option, scrolltab,Check IniRead, rightclick, settings.ini, option, rightclick,Check EmptyMem() menu, tray, NoStandard menu, tray, add, 启用双击关闭标签页 menu, tray, add, 启用滚轮切换标签页 menu, tray, add, 启用右键关闭标签页 menu, tray, %doubleclick%, 启用双击关闭标签页 menu, tray, %scrolltab%, 启用滚轮切换标签页 menu, tray, %rightclick%, 启用右键关闭标签页 menu, tray, add ;分割线 menu, tray, add, 退出 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 退出: ExitApp return 启用双击关闭标签页: if doubleclick<>Check { menu, tray, Check, 启用双击关闭标签页 doubleclick=Check } Else { menu, tray, unCheck, 启用双击关闭标签页 doubleclick=unCheck } IniWrite, %doubleclick%, settings.ini, option, doubleclick EmptyMem() return 启用滚轮切换标签页: if scrolltab<>Check { menu, tray, Check, 启用滚轮切换标签页 scrolltab=Check } Else { menu, tray, unCheck, 启用滚轮切换标签页 scrolltab=unCheck } IniWrite, %scrolltab%, settings.ini, option, scrolltab EmptyMem() return 启用右键关闭标签页: if rightclick<>Check { menu, tray, Check, 启用右键关闭标签页 rightclick=Check } Else { menu, tray, unCheck, 启用右键关闭标签页 rightclick=unCheck } IniWrite, %rightclick%, settings.ini, option, rightclick EmptyMem() return #IfWinActive ahk_class Chrome_WidgetWin_1 ~$WheelDown:: ~$WheelUp:: if scrolltab=Check { MouseGetPos,, ypos If (ypos>40) Or (ypos<0) Return IfEqual,A_ThisHotkey,~$WheelDown, Send ^{PgDn} Else Send ^{PgUp} EmptyMem() } Return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ~LButton:: if doubleclick=Check { WinGetPos,,, w, h, A MouseGetPos,xpos, ypos WinGet,Mom,MinMax If ((ypos>45)And(Mom<1))Or((ypos>28)And(Mom>0)) Or (ypos<0) Return If (A_PriorHotkey="~LButton") and (A_TimeSincePriorHotkey<200) ; 此处和知乎版本不同 ↓ send ^w ; 此处和知乎版本不同 ↑ EmptyMem() } Return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ~RButton Up:: ~RButton:: if rightclick=Check { MouseGetPos,xpos, ypos WinGet,Mom,MinMax If ((ypos>45)And(Mom<1))Or((ypos>28)And(Mom>0)) Or (ypos<0) Return if GetKeyState("1") Return IfEqual,A_ThisHotkey,~RButton, Send {Click Middle} Else Send {Click middle} EmptyMem() } Return #IfWinActive EmptyMem(PID="AHK Rocks"){ pid:=(pid="AHK Rocks") ? DllCall("GetCurrentProcessId") : pid h:=DllCall("OpenProcess", "UInt", 0x001F0FFF, "Int", 0, "Int", pid) DllCall("SetProcessWorkingSetSize", "UInt", h, "Int", -1, "Int", -1) DllCall("CloseHandle", "Int", h) }若需托盘不显示图标,则在第一行前新建一行插入 #NoTrayIcon 即可,实测支持最新 Chrome 81。
已知双击 Chrome 标题栏空处切换最大化/窗口化时也有概率触发脚本导致标签页关闭,目前解决方法是降低此时双击的频率。