多种输入语言,可在两种语言之间切换

多种输入语言,可在两种语言之间切换

我怎样才能同时激活三种或更多种输入语言(即英语/俄语/中文),但只在其中两种(英语/俄语)之间使用Alt+循环?Shift

Punto Switcher 仅使用自定义快捷方式(如Caps Lock或右 )来处理此任务Ctrl

答案1

我使用 AutoHotKey 解决了这个问题。

设置 3 种语言,一个热键用于在它们之间切换,另一个热键用于切换到要跳过的语言。我有英语、俄语和日语,我想跳过日语,所以我指定 Ctrl+Shift+0 切换到 JP。

我已经有一个 AutoHotKey 脚本,它允许我使用 Caps 在这 3 种语言之间切换。它看起来像这样:

CapsLock::Send, {Alt Down}{Shift Down}{Shift Up}{Alt Up}

这个想法是,一旦您切换到要跳过的语言,就会自动切换语言。日语的 0x0411。将您的代码粘贴到下面脚本中的 if 子句中,保存并运行它。

这里是语言 ID 列表,请在第一列中找到您的语言 ID。

该脚本仅适用于使用 CapsLock 在语言之间切换,但您可以将其调整为 Alt+Shift 开关。可能只需将“CapsLock”替换为“{Alt Down}{Shift Down}{Shift Up}{Alt Up}”即可。

CapsLock::
Send, {Alt Down}{Shift Down}{Shift Up}{Alt Up}

if !LangID := GetKeyboardLanguage(WinActive("A"))
{
    MsgBox, % "GetKeyboardLayout function failed " ErrorLevel
    return
}

if (LangID = 0x0411)
    Send, {Alt Down}{Shift Down}{Shift Up}{Alt Up}
return

GetKeyboardLanguage(_hWnd=0)
{
    if !_hWnd
        ThreadId=0
    else
        if !ThreadId := DllCall("user32.dll\GetWindowThreadProcessId", "Ptr", _hWnd, "UInt", 0, "UInt")
            return false

    if !KBLayout := DllCall("user32.dll\GetKeyboardLayout", "UInt", ThreadId, "UInt")
        return false

    return KBLayout & 0xFFFF
}

答案2

在“高级键设置”选项卡(在“文本服务和输入语言”对话框中)上,您可以更改已设置的每种语言的键盘快捷键。

默认情况下,“在输入语言之间”操作设置为左 Alt+Shift,正如您提到的那样。其他操作(“转换为英语”、“转换为俄语”等)不会分配快捷键,除非您手动将其设置为您喜欢的快捷键。

相关内容