我使用以下 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 上可能有所不同,但有些地方类似)。对话框如下所示:更改按键顺序