我的系统上有三种语言:英语、俄语和日语。但我只想在英语和俄语之间使用Alt+ Shift。在 Windows 10 上有没有办法做到这一点?
这这个问题不适用于此,因为它在 Windows 10 上不起作用。
答案1
请遵循以下步骤:
- 安装自动热键。
- 创建一个文本文件并粘贴以下文本:
; This scripts changes the functionality of Shift + Alt from "switch keyboard layout" ; to "change to previous layout". ; this is usefull when you have more than 2 keyboard layouts and want to switch between ; only 2 of them. #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. LAlt & LShift::send, #^{space down}{space up}
- 保存并重命名文件.ahk扩展名(例如“排除额外的键盘布局.ahk”)
- 双击运行脚本。现在Alt+Shift应该仅在前两种键盘布局之间切换。
如果你满意,你可以编译脚本(右键单击 -> 编译)来创建。EXE文件文件。然后移动。EXE文件或者.ahk文件到启动文件夹(打开 RUN 并输入“shell:启动“(不带引号)。
补充说明:
- 如果你复制。EXE文件文件您不再需要 AutoHotkey,因此您可以将其卸载。
- 如果你复制.ahk脚本文件你不能卸载AutoHotkey。
- 这邮政解决了一个类似的问题,有助于提出这个想法。
答案2
我建议使用相同的自动热键解决方案,可能方法更好一些。
不要切换到上一个布局(可能是第三个),最好禁用原生的 Alt+Shift 循环热键并为自己的布局切换逻辑让路。
并使用以下脚本,或许进行所需的调整:
#SingleInstance force
SendMode Input
; Cycled list of language ids
; refer to https://docs.microsoft.com/en-us/windows/win32/intl/language-identifiers
; and https://docs.microsoft.com/en-us/windows/win32/intl/language-identifier-constants-and-strings
; for finding out correct values
; in this case 0x409 means standard US English, and 0x419 means standard Russian
AltShiftLangs := [0x0409, 0x0419]
; 0x411 means japanese IME
CtrlAltLang := 0x0411
; This returns currently active language id
GetKeyboardLayout() {
WinGet, WinID,, A
ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
return DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt") & 0xFFFF
}
; This sends request to change system language to lang argument
SetKeyboardLayout(lang) {
PostMessage, 0x50,, lang,, A
}
; This returns 0-based index of Value in Arr
IndexOf(Arr, Value) {
Loop % Arr.Length()
if Arr[A_Index] == Value {
return A_Index-1
}
return -1
}
; This sets language based on current system lanuage and next value by index in Arr
; If current language is not found, it sets system to first language from Arr
SetNextLanguage(Arr) {
lang := GetKeyboardLayout()
idx := IndexOf(Arr, lang)
if (idx < 0) {
SetKeyboardLayout(Arr[1])
return
}
nextIdx := mod(idx+1, Arr.Length())
next := Arr[nextIdx+1]
SetKeyboardLayout(next)
}
; Alt+Shift hotkey - cycle between AltShiftLangs
LAlt & LShift::
SetNextLanguage(AltShiftLangs)
return
; Ctrl+Alt hotkey - switch directly to isolated CtrlAltLang
LCtrl & LAlt::
SetKeyboardLayout(CtrlAltLang)
return
答案3
我遇到了同样的问题,找到了一个非常简单的解决方法,即通过注册表编辑,在 chat gpt 的帮助下编写了一个指南
它将从快捷方式和语言栏中删除所选语言
如何在 Windows 中从 Win+Space 或 Alt+Shift 快捷方式中排除语言
注意:编辑 Windows 注册表时请小心谨慎,因为它可能会对整个系统产生影响。在进行更改之前,请务必备份注册表或创建系统还原点。
步骤 1:打开语言栏选项
- 按 Win + I 打开 Windows 设置。
- 点击“时间和语言”。
- 从左侧菜单中选择“语言”。
- 向下滚动并单击“相关设置”部分下的“高级键盘设置”。
- 在“语言栏偏好设置”下,点击“语言栏选项”。
- 在出现的“文本服务和输入语言”窗口中,转到“高级键设置”选项卡。
第 2 步:为该语言创建特殊快捷方式
- 点击“更改按键序列”。
- 选择自定义键盘快捷键来切换到您想要排除的语言(例如德语)。
- 单击“应用”,然后单击“确定”以保存更改。
步骤 3:打开注册表编辑器
按 Win + R 打开运行对话框。
输入“regedit”并按回车键。这将打开Windows注册表编辑器。
步骤 4:导航至键盘布局预加载键
在注册表编辑器中,导航到以下项:
HKEY_CURRENT_USER\Keyboard Layout\Preload
第 5 步:确定语言价值
在右侧窗格中,您将看到语言代码和值的列表。每个值对应一个键盘布局。
确定与要排除的语言相对应的值(例如,德语为“00000407”)。它将具有与之关联的数字代码。
步骤 6:删除语言值
- 右键单击与要排除的语言相对应的值。
- 从上下文菜单中选择“删除”。
- 如果出现提示,请确认删除。
步骤 7:关闭注册表编辑器 关闭注册表编辑器。
注意:此操作将从预加载键盘布局列表中删除该语言,当您使用 Win+Space 或 Alt+Shift 快捷键切换语言时,该语言将不再出现。您仍然可以使用在步骤 2 中创建的自定义键盘快捷键访问排除的语言,或者在需要时将其添加回注册表中的预加载列表。
编辑 Windows 注册表时请务必小心谨慎,并确保在进行更改之前备份注册表或创建系统还原点