Skip to content

[BUG?] 浏览器或窗口切换 #241

Description

@daidaiworm

版本:2.0-beta33
不知道是我操作不对,还是程序不太完美。

chrome虽然有surfingkeys等插件,但更喜欢MyKeymap的command模式。
需要频繁切换chrome多标签,资源管理器,(sublime完美适配,不做讨论)

【异常】

假如打开了tab-1,tab-2...
如果当前没有切换到tab-1,那么MyKeymap的“启动程序或激活窗口”
似乎查找不到tab-1,于是只能开新窗口

如果有人知道如何解决,就不用看下面啰嗦了。
Image

** 【自己解决,方案1】**

把常用的10个标签都分开了。用了半天,受不了,因为把别的任务栏窗口挤得看不见了。
不得已还是把所有标签合在一起用。

【自己解决,方案2】
第1版,能切换,但是效率低,机制:
不停按ctrl+tab,切换标签,进行查找。效率低,而且窗口内容切换快,费眼睛。

第2版
本来以为是个简单需求,用DeepSeek愣是没搞出来,最后求助Gemini
大概是chrome有些安全机制,以及冷冻标签,所以找不到。
后来用的 chrome自带热键ctrl+shift+a
代码模拟按键,然后查找标签,找不到,再开对应网址。

#Requires AutoHotkey v2.0
#SingleInstance Force

ActivateTabOrOpenUrl(tabName, url) {
    if (tabName == "") {
        if (url != "")
            Run('chrome.exe "' url '"')
        return false
    }

    ; 1. 检查 Chrome 是否运行
    if !ProcessExist("chrome.exe") {
        if (url != "")
            Run('chrome.exe "' url '"')
        return false
    }

    ; 记录当前活动窗口
    oldWin := WinExist("A")

    ; 2. 必须先将 Chrome 激活到前台
    if WinExist("ahk_exe chrome.exe") {
        WinActivate("ahk_exe chrome.exe")
        if !WinWaitActive("ahk_exe chrome.exe", , 1) {
            if (url != "")
                Run('chrome.exe "' url '"')
            return false
        }
    } else {
        if (url != "")
            Run('chrome.exe "' url '"')
        return false
    }

    initialTitle := WinGetTitle("A")

    ; 3. 唤醒 Chrome 官方标签页搜索面板
    Send("^+a")
    Sleep(100)   ; 稍长一点的延迟,确保搜索框完全准备就绪

    ; 4. 【核心修复】:强力清空旧残留,防止 PK_排课 残留干扰 排课
    Send("^a")      ; 全选里面旧的搜索文本
    Sleep(30)
    Send("{BackSpace}") ; 擦除它,确保输入框里空空如也
    Sleep(30)

    ; 5. 使用剪贴板秒贴新词
    savedClipboard := ClipboardAll()
    A_Clipboard := tabName

    Send("^v")
    Sleep(50)

    A_Clipboard := savedClipboard
    savedClipboard := ""

    ; 6. 敲击回车执行跳转
    Send("{Enter}")
    Sleep(180)  ; 稍微多给一点点腾讯文档页面响应和加载的时间

    ; 7. 检查活动窗口标题
    newTitle := WinGetTitle("A")

    ; 如果切过去了,大功告成
    if (newTitle != initialTitle || InStr(StrLower(newTitle), StrLower(tabName))) {
        return true
    }

    ; 8. 【核心修复】:如果没切成功,双重强关搜索面板,扫清一切 Run 的拦截障碍
    Send("{Esc}")
    Sleep(50)
    Send("{Esc}") ; 连发两遍,确保彻底闭合面板
    Sleep(100)    ; 等待 Chrome 顶层 UI 恢复正常状态

    ; 9. 此时 Chrome 处于完全干净的状态,绝不会拦截任何指令
    if (url != "") {
        Run('chrome.exe "' url '"')
    } else {
        if (oldWin)
            WinActivate(oldWin)
    }
    return false
}

; 外部命令行传参接口
if (A_Args.Length >= 1) {
    tabName := A_Args
    url := (A_Args.Length >= 2) ? A_Args : ""
    ActivateTabOrOpenUrl(tabName, url)
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions