我在浏览时经常根据所做事情的上下文在两种输入语言之间切换。但是,当我进入地址栏时,99% 的时间里,我想用英语输入一些内容,但最终却经常不小心输入了另一种语言,这很烦人。
因此,我想知道是否有办法强制地址栏的输入语言始终默认为英语,除非我在光标位于地址栏时明确切换语言。
这有可能实现吗?也许可以使用 Chrome 标记、浏览器扩展等。
答案1
您可以使用免费开源 自动热键。
以下脚本将使用所需参数启动 chrome
--force-renderer-accessibility
,并在焦点变为 Chrome 的地址栏时更改 Windows 键盘布局。
根据要求,从 Github 下载并解压库
UI自动化
到文件夹中。您需要在脚本中修改文件夹
UIAutomation\Lib
和路径chrome.exe
。
请注意,您可以从脚本中删除Run
Chrome 命令,只运行脚本:它将在使用该--force-renderer-accessibility
参数启动的任何 Chrome 实例上运行,因此您只需将此参数添加到 Chrome 调用中即可。您可能还想导航到chrome://accessibility/
并启用该Internal
选项。有关可访问性的更多信息,请参阅 Chromium 文章
无障碍功能概述。
脚本如下:
#Requires AutoHotkey v1.1.33+
#SingleInstance, force
#Warn
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetTitleMatchMode, 2
SetBatchLines, -1
; --- MODIFY these three lines as needed ---
#include C:\Temp\UIAutomation-main\Lib\UIA_Interface.ahk
#include C:\Temp\UIAutomation-main\Lib\UIA_Browser.ahk
browserExe := "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
Run, %browserExe% --force-renderer-accessibility
WinWaitActive, ahk_exe %browserExe%
cUIA := new UIA_Browser("ahk_exe " browserExe)
h := UIA_CreateEventHandler("EventHandler", "FocusChanged") ; Create a new FocusChanged event handler that calls the function EventHandler
cUIA.AddFocusChangedEventHandler(h) ; Add a new FocusChangedEventHandler
OnExit("ExitFunc") ; Set up an OnExit call to clean up the handler when exiting the script
return
EventHandler(el) {
global cUIA
try {
if cUIA.CompareElements(cUIA.URLEditElement, el) ; Check if the focused element is the same as Chrome's address bar element
SetDefaultKeyboard(0x0409) ; english-US - If the Address bar was focused set languagse
}
}
ExitFunc() {
global cUIA, h
cUIA.RemoveFocusChangedEventHandler(h) ; Remove the event handler. Alternatively use cUIA.RemoveAllEventHandlers() to remove all handlers
}
; https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-language-pack-default-values?view=windows-11
SetDefaultKeyboard(LocaleID){
Global
SPI_SETDEFAULTINPUTLANG := 0x005A
SPIF_SENDWININICHANGE := 2
Lan := DllCall("LoadKeyboardLayout", "Str", Format("{:08x}", LocaleID), "Int", 0)
VarSetCapacity(Lan%LocaleID%, 4, 0)
NumPut(LocaleID, Lan%LocaleID%)
DllCall("SystemParametersInfo", "UInt", SPI_SETDEFAULTINPUTLANG, "UInt", 0, "UPtr", &Lan%LocaleID%, "UInt", SPIF_SENDWININICHANGE)
WinGet, windows, List
Loop %windows% {
PostMessage 0x50, 0, %Lan%, , % "ahk_id " windows%A_Index%
}
}
安装 AutoHotKey 后,将上述文本放入一个.ahk
文件中并双击进行测试。您可以通过右键单击托盘栏中的绿色 H 图标并选择退出来停止脚本。要让它在登录时运行,请将其放在 的启动组中
C:\Users\USER-NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
。