[AHK]双击关闭Chrome浏览器的标签页

前言

近日更新最新版本的 Google Chrome,之前一直在使用的 Chrome++ 第三方 DLL 扩展正式失效。由于一直习惯了双击关闭标签页 + 滚轮切换标签页,因此更新后无法使用极度不适,最后通过百度 + 自己修改解决。

AutoHotkey

前往 AutoHotkey 的官方网站下载最新版本的 AutoHotkey 并安装。

AHK 脚本文件

原脚本来自知乎,现做了一些修改。

#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 标题栏空处切换最大化/窗口化时也有概率触发脚本导致标签页关闭,目前解决方法是降低此时双击的频率。