如何从语言切换热键中删除很少使用的语言?

如何从语言切换热键中删除很少使用的语言?

我使用以下 3 种语言输入:

语言 A – 55% 的时间

语言 B - 40% 的时间

C 语言 - 5% 的时间

通常的解决方案是安装所有三种语言并使用 Ctrl/Alt-Shift,但是每次在 A 和 B 之间来回切换时都必须切换语言 C,这很烦人。

是否有某种解决方案可以让我阻止 Windows 在按下 Ctrl/Alt-Shift 时切换到语言 C?然后我可以添加一个单独的热键来切换到语言 C。

我正在使用 Windows 7 SP1。

谢谢。

答案1

您可以创建奥图伊特切换键盘语言时“跳过”语言“C”的脚本。

安装后奥图伊特编辑。右键单击桌面->新建->Autoit 脚本。右键单击此创建的文件->编辑。现在您应该看到 ScITE 窗口,并在“在此处添加您的代码”行后添加此代码:

#include <WinAPISys.au3>
ClipPut(_WinAPI_GetKeyboardLayout(ControlGetHandle("[ACTIVE]","","")))

按 SHIFT+ALT(或注册用于切换键盘语言的热键)直到当前语言为“C”(如果键盘语言名称未显示在任务栏中,请按 Win+R ->> CTFMON.EXE ->> Enter),然后在 ScITE 窗口中按 Tools->Go。现在在您的剪贴板中输入语言“C”代码。粘贴(CTRL+V)并将其保存在某处。

删除以前的代码并粘贴此代码:

#包括 <WindowsConstants.au3>
#包括 <WinAPISys.au3>
#包括 <String.au3>
#NoTrayIcon
$skiplang="0x04090409" ;切换语言时跳过此语言
$列表=_WinAPI_GetKeyboardLayoutList()

$fakeforwardlang=""
如果 IsArray($list) 那么
    如果 $list[0]<3 则退出;你这个土豆
    对于 $i = 1 到 $list[0]
        如果 $list[$i]=$skiplang 则;查找下一个语言
            如果 $i=$list[0] 那么
                $fakeforwardlang=$list[1]
                退出循环
            万一
            $fakeforwardlang=$list[$i+1]
            退出循环
        万一
    下一个
别的
    出口
万一
$fakeforwardlang=StringMid($fakeforwardlang,1,6)
而 1
$handle=ControlGetHandle(“[ACTIVE]”,“”,“”)
如果 getcurkb($handle)=$skiplang 那么 _WinAPI_SetKeyboardLayout($handle,$fakeforwardlang)
睡眠(100)
温德
函数 getcurkb($handle)
    返回 _WinAPI_GetKeyboardLayout($handle)
结束函数

下一步需要用以下代码替换已保存的语言“C”代码0x04090409在这个脚本中(第5行)。

然后在 SciTE 窗口中按 Tools->Build。现在您将在 Autoit 脚本所在的同一目录中获得可执行文件。运行此可执行文件 (.exe)。

如果要停止脚本,需要使用任务管理器来终止进程。

适用于具有 3 种键盘语言和禁用 UAC 的 Windows 7。

更新:

我搞砸了。_WinAPI_SetKeyboardLayout Forward 只在某些时候起作用。按下 {down} 键时,标准发送非常有问题。当前解决方案基于外部函数。但此功能有一个问题,您需要松开 shift 和 alt 才能切换到下一个键盘语言。稍后应重新检查代码。

更新2:

返回 _WinAPI_SetKeyboardLayout 但使用假转发。我现在找不到任何问题。

答案2

我有同样的情况,并为每种语言设置了不同的热键,例如:

  • Ctrl++Shift表示1语言 A,
  • Ctrl++Shift表示2语言 B,
  • Ctrl++Shift对于3C 语言

这样只需按一下键即可切换到所需语言。这可以在控制面板\所有控制面板项\语言\高级设置\更改语言栏热键中设置(这是 Windows 10 中的路径,在 Windows 7 上可能有所不同,但有些地方类似)。对话框如下所示:更改按键顺序

相关内容