有什么方法可以让 Alt+Shift 不会在 Windows 中切换至某种语言?

有什么方法可以让 Alt+Shift 不会在 Windows 中切换至某种语言?

我的 Windows 机器上有三种输入语言(俄语、英语和法语)。但是,我很少使用法语键盘。所以我想让Alt+Shift组合键在俄语和英语之间循环,这样法语就只能通过菜单使用了。这样可以吗?

答案1

Advanced Key Setting您可以在对话框中设置切换语言或键盘布局的组合键。要打开该Advanced Key Setting对话框,请右键单击Language bar,然后单击Settings。在 下Preferences,单击Key Settings

或者查看控制面板中的语言栏设置。

来源

答案2

您可以使用 AutoHotKey 脚本来实现这一点。

以下脚本是美国英语和希伯来语之间循环的示例,同时还有 3 种可用语言(俄语、传统印地语和印地语语音)。其工作原理如下:

  • 当按下left alt+时,它会等待它们被释放。left shift
  • 如果没有额外按下按键就释放它们,则只会循环显示英语和希伯来语(这是结束else部分)。
  • 如果按下以下任意键:123,则键盘布局将更改为指定的语言(分别为俄语、印地语繁体版和印地语语音)。

这里是:

LAlt & LShift::waitAndSet()

waitAndSet() {
  KeyWait, LAlt
  KeyWait, LShift

  USA := 0x4090409
  HEB := 0x40d040d
  RUS := 0x4190419 
  HIN := 0x00000439
  HINPHON := 0x04090439

  if (A_PriorKey = "1") {
    setDefaultKeyboard(RUS)
  } 
  else if (A_PriorKey = "2") {
    setDefaultKeyboard(HIN)
  }
  else if (A_PriorKey = "3") {
    setDefaultKeyboard(HINPHON)
  }
  else {
    currentKeyboardLayout := getCurrentKeyboardLayout()
    setDefaultKeyboard(currentKeyboardLayout = USA ? HEB : USA)
 }
}
setDefaultKeyboard(hkl){
    SPI_SETDEFAULTINPUTLANG := 0x005A 
  , SPIF_SENDWININICHANGE := 2 
  , WM_INPUTLANGCHANGEREQUEST := 0x50
    VarSetCapacity(binaryhkl, 4, 0)
    NumPut(hkl, binaryhkl)
    DllCall("SystemParametersInfo", "uint", SPI_SETDEFAULTINPUTLANG, "uint", 0, "uptr", &binaryhkl, "uint", SPIF_SENDWININICHANGE)
    PostMessage WM_INPUTLANGCHANGEREQUEST, 0, % hkl, , A
}
getCurrentKeyboardLayout() {
  SetFormat, Integer, H
  WinGet, WinID,, A
  ThreadID:=DllCall("GetWindowThreadProcessId", "uint", WinID, "uint", 0)
  priorHKL :=DllCall("GetKeyboardLayout", "uint", ThreadID, "uint")
  Return priorHKL
}

评论:

  1. 你提到基拉在评论中,但我试过了,它有很多错误并且不再维护,另外你必须使用 Windows 的高级键盘设置(添加设置非循环语言的快捷方式)也有 bug

  2. 原始代码为setDefaultKeyboard 可以在这里找到,但我做了一些修改(否则它不起作用)。

  3. 通过手动将布局更改为每种语言并getCurrentKeyboardLayout每次运行,可以检索指定语言的 HKL 硬编码值。您可以阅读此帖了解更多背景信息。

  4. 在某些情况下它不起作用,但我找不到一致的行为。
    例如,对于 Hindi Traditional,getCurrentKeyboardLayout实际上返回0xf00c0439(而不是上面代码中的值),但使用它不起作用。
    再举一个例子,对于俄语助记符键盘,getCurrentKeyboardLayout返回0xf0330419,同样,使用此值不起作用。事实上,如果你的机器上同时有俄语和俄语助记符布局,使用0x4190419有时会将布局更改为俄语,但有时会更改为俄语助记符,取决于以前使用的语言!“解决方案”是删除其中一个。

相关内容