问题
我在 Google Chrome 中设置了“工作”和“家庭”用户配置文件。
我想在它们之间切换一键盘快捷键。这可能吗?
我不想要什么
使用一长串键盘快捷键
可以使用一系列键盘快捷键来切换用户配置文件,如这个答案。
- Ctrl+ Shift+M选择用户按钮
- Arrow down,Enter选择切换人
- Arrow left或Arrow right选择用户配置文件
- Enter选择配置文件
我不想按那么多键,因为切换配置文件是我经常执行的操作。
使用不同的用户配置文件启动 Google Chrome
我不想做的另一种方法是使用不同的参数启动 Google Chrome,如下所述:如何在启动时使用 Google Chrome 启动不同的配置文件?
拥有自己的“配置文件”概念的 Google Chrome 扩展程序
我并不想寻找那些引入自己的“个人资料”概念的扩展,比如个人资料交换器或者多重登录。我想继续使用 Google Chrome 提供的现成用户配置文件。
可能的想法
只需单击鼠标即可解决此问题。
也许有 Google Chrome 扩展程序可以做到这一点。我还没有找到。
也许有 Google Chrome 扩展程序可以让你为 Google Chrome 功能分配键盘快捷键。我还没有找到。
也许,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)
}