如何使用一个键盘快捷键切换 Google Chrome 用户配置文件?

如何使用一个键盘快捷键切换 Google Chrome 用户配置文件?

问题

我在 Google Chrome 中设置了“工作”和“家庭”用户配置文件。

Google Chrome 用户个人资料切换页面

我想在它们之间切换键盘快捷键。这可能吗?

我不想要什么

  1. 使用一长串键盘快捷键

    可以使用一系列键盘快捷键来切换用户配置文件,如这个答案

    • Ctrl+ Shift+M选择用户按钮
    • Arrow downEnter选择切换人
    • Arrow leftArrow right选择用户配置文件
    • Enter选择配置文件

    我不想按那么多键,因为切换配置文件是我经常执行的操作。

  2. 使用不同的用户配置文件启动 Google Chrome

    我不想做的另一种方法是使用不同的参数启动 Google Chrome,如下所述:如何在启动时使用 Google Chrome 启动不同的配置文件?

  3. 拥有自己的“配置文件”概念的 Google Chrome 扩展程序

    我并不想寻找那些引入自己的“个人资料”概念的扩展,比如个人资料交换器或者多重登录。我想继续使用 Google Chrome 提供的现成用户配置文件。

可能的想法

  1. 只需单击鼠标即可解决此问题。

  2. 也许有 Google Chrome 扩展程序可以做到这一点。我还没有找到。

  3. 也许有 Google Chrome 扩展程序可以让你为 Google Chrome 功能分配键盘快捷键。我还没有找到。

  4. 也许,Google Chrome 开箱即用,只需在 about:flags 中启用它即可。我还没有在那里找到任何东西;只有启用新的配置文件管理系统

系统

  • Windows 7的
  • Google Chrome 41.0.2272.89

编辑 2015.03.24:我目前使用 AutoHotkey 的解决方案

该解决方案使用自动热键灵感来自Zvi Twersky 的回答

; Switch to user profile "Home" with Ctrl+Shift+1
#IfWinActive ahk_class Chrome_WidgetWin_1
^+1::
Send, ^+M
Send, {Down}{Enter}
Sleep, 300
Send, {Right}{Enter}
return

; Switch to user profile "Work" with Ctrl+Shift+2
#IfWinActive ahk_class Chrome_WidgetWin_1
^+2::
Send, ^+M
Send, {Down}{Enter}
Sleep, 300
Send, {Left}{Enter}
return

答案1

使用 AHK 应该会有所帮助。使用 AutoHotkey,您可以将任何按键组合重新映射到一个按键,这应该会有所帮助。

要将M键重新映射到Arrow down+ Enter,您可以执行以下操作:

M::
Send, {DOWN}{Enter}
return

答案2

请检查它是否适合您

/**
 * Description : AutoHotKey script bring specific Chrome Profile windows to the front.
 *             : While Chrome is active press Ctrl+1 ... Ctrl+5 to activate another profile.
 * Tested with : Chrome v84
 * Freelancer  : Art G. - https://www.upwork.com/freelancers/~017155e179702d4657
 * Version     : 2020-07-17
 */

#Warn
#NoEnv
#SingleInstance Force

SetBatchLines -1
SetTitleMatchMode 2

GroupAdd ChromeWindow, ahk_exe chrome.exe ahk_class Chrome_WidgetWin_1

#IfWinActive ahk_group ChromeWindow
    ^1:: ActivateProfile("Default")
    ^2:: ActivateProfile("Profile 2")
    ^3:: ActivateProfile("Profile 3")
    ^4:: ActivateProfile("Profile 4")
    ^5:: ActivateProfile("Profile 5")
#IfWinActive

ActivateProfile(profile) {
    static profiles := {}, hwnds := {}

    If (!profiles[profile]) {
        FileRead preferences, % SubStr(A_AppData, 1, -8) "\Local\Google\Chrome\User Data\" profile "\Preferences"
        profiles[profile] := {}

        RegExMatch(preferences, "O)""name"":\s*""(.+?)""", match)
        profiles[profile]["name"] := match[1]

        RegExMatch(preferences, "O)""given_name"":\s*""(.+?)""", match)
        profiles[profile]["given_name"] := match[1]
    }

    WinGet hwndList, List, ahk_group ChromeWindow
    Loop % hwndList {
        hwnd := hwndList%A_Index%
        If (!hwnds[hwnd]) {
            title := Acc_ObjectFromWindow(hwnd).accName
            RegExMatch(title, "O)^.+Google Chrome . .*?([^(]+[^)]).?$", match)
            hwnds[hwnd] := match[1]
        }

        If (hwnds[hwnd] == profiles[profile]["name"] || hwnds[hwnd] == profiles[profile]["given_name"]) {
            WinActivate ahk_id %hwnd%

            For hwnd In hwnds {
                If (!WinExist("ahk_id" hwnd))
                    hwnds.Delete(hwnd)
            }

            Return
        }
    }

    Run chrome.exe --profile-directory="%profile%"
}

Acc_Init() {
    static h := DllCall("LoadLibrary", Str,"oleacc", Ptr)
}

Acc_ObjectFromWindow(hwnd, objectId := 0) {
    static OBJID_NATIVEOM := 0xFFFFFFF0

    objectId &= 0xFFFFFFFF
    If (objectId == OBJID_NATIVEOM)
        riid := -VarSetCapacity(IID, 16) + NumPut(0x46000000000000C0, NumPut(0x0000000000020400, IID, "Int64"), "Int64")
    Else
        riid := -VarSetCapacity(IID, 16) + NumPut(0x719B3800AA000C81, NumPut(0x11CF3C3D618736E0, IID, "Int64"), "Int64")

    If (DllCall("oleacc\AccessibleObjectFromWindow", Ptr,hwnd, UInt,objectId, Ptr,riid, PtrP,pacc:=0) == 0)
        Return ComObject(9, pacc, 1), ObjAddRef(pacc)
}

相关内容