Как переключать профили пользователей Google Chrome одним сочетанием клавиш?

Вопрос

Я настроил профиль пользователя "Работа" и "Домой" в Google Chrome.

Страница переключения профиля пользователя Google Chrome

Я бы хотел переключаться между ними одним сочетанием клавиш. Это как-то возможно?

Чего я не хочу

  1. Использование длинной последовательности сочетаний клавиш

    Можно переключать профиль пользователя с помощью целой последовательности сочетаний клавиш, как описано в этом ответе.

    • Ctrl + Shift + M, чтобы выбрать кнопку пользователя
    • Стрелка вниз, Enter, чтобы выбрать Сменить человека
    • Стрелка влево или Стрелка вправо для выбора профиля пользователя
    • Введите, чтобы выбрать профиль

    Я не хочу нажимать столько клавиш, потому что переключение профилей - это операция, которую я выполняю довольно часто.

  2. Запуск Google Chrome с разными профилями пользователей

    Другой способ, который я не хочу делать, - запускать Google Chrome с другими параметрами, как описано здесь: Как запускать разные профили с помощью Google Chrome при запуске?

  3. Расширения Google Chrome, которые имеют собственную концепцию "профиля"

    Я не ищу расширений, которые вводят свою собственную концепцию "профиля", таких как Profile Swapper или MultiLogin. Я хочу продолжать использовать профили пользователей, предоставляемые Google Chrome из коробки.

Возможные идеи

  1. Решение одним щелчком мыши тоже подойдет.

  2. Возможно, есть расширение Google Chrome, которое делает это. Я еще не нашел.

  3. Возможно, есть расширение Google Chrome, которое позволяет назначать сочетания клавиш для функций Google Chrome. Я еще не нашел.

  4. Возможно, Google Chrome имеет эту функцию из коробки, и нужно только включить ее в about:flags. Я еще ничего не нашел там; Включить только новую систему управления профилями.

система

  • Windows 7
  • Google Chrome 41.0.2272.89

Изменить 24.03.2015: Мое текущее решение с использованием AutoHotkey

Это решение с использованием AutoHotkey было вдохновлено ответом Цви Тверски.

; 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

2 ответа

Решение

Использование AHK должно помочь. С AutoHotkey вы можете переназначить любую комбинацию нажатий клавиш в одно нажатие клавиши, чтобы это могло помочь.

Для переназначения произнесите клавишу " М" для " Стрелка вниз"+ "Ввод":

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

Пожалуйста, проверьте, подходит ли это вам

      /**
 * 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)
}
Другие вопросы по тегам