在 Windows 10 上从 Alt+Shift 切换循环中排除输入语言

在 Windows 10 上从 Alt+Shift 切换循环中排除输入语言

我的系统上有三种语言:英语、俄语和日语。但我只想在英语和俄语之间使用Alt+ Shift。在 Windows 10 上有没有办法做到这一点?

这个问题不适用于此,因为它在 Windows 10 上不起作用。

答案1

请遵循以下步骤:

  1. 安装自动热键
  2. 创建一个文本文件并粘贴以下文本:
; 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}
  1. 保存并重命名文件.ahk扩展名(例如“排除额外的键盘布局.ahk”)
  2. 双击运行脚本。现在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:打开语言栏选项

  1. 按 Win + I 打开 Windows 设置。
  2. 点击“时间和语言”。
  3. 从左侧菜单中选择“语言”。
  4. 向下滚动并单击“相关设置”部分下的“高级键盘设置”。
  5. 在“语言栏偏好设置”下,点击“语言栏选项”。
  6. 在出现的“文本服务和输入语言”窗口中,转到“高级键设置”选项卡。

第 2 步:为该语言创建特殊快捷方式

  1. 点击“更改按键序列”。
  2. 选择自定义键盘快捷键来切换到您想要排除的语言(例如德语)。
  3. 单击“应用”,然后单击“确定”以保存更改。

步骤 3:打开注册表编辑器

  1. 按 Win + R 打开运行对话框。

  2. 输入“regedit”并按回车键。这将打开Windows注册表编辑器。

步骤 4:导航至键盘布局预加载键

在注册表编辑器中,导航到以下项:

HKEY_CURRENT_USER\Keyboard Layout\Preload

第 5 步:确定语言价值

  1. 在右侧窗格中,您将看到语言代码和值的列表。每个值对应一个键盘布局。

  2. 确定与要排除的语言相对应的值(例如,德语为“00000407”)。它将具有与之关联的数字代码。

步骤 6:删除语言值

  1. 右键单击与要排除的语言相对应的值。
  2. 从上下文菜单中选择“删除”。
  3. 如果出现提示,请确认删除。

步骤 7:关闭注册表编辑器 关闭注册表编辑器。

注意:此操作将从预加载键盘布局列表中删除该语言,当您使用 Win+Space 或 Alt+Shift 快捷键切换语言时,该语言将不再出现。您仍然可以使用在步骤 2 中创建的自定义键盘快捷键访问排除的语言,或者在需要时将其添加回注册表中的预加载列表。

编辑 Windows 注册表时请务必小心谨慎,并确保在进行更改之前备份注册表或创建系统还原点

相关内容