如何根据活动输入法激活/停用AutoHotkey脚本?

时间:2019-02-23 21:15:38

标签: autohotkey

我有一个自动热键脚本,只能与日语输入一起使用。

我的计算机上只有一种输入语言(日语),我使用字母数字设置输入了英文(我不切换到英语,从技术上讲,它仍然是日语输入法。但是,字母数字键盘可以有罗马字母,并且仍然是计算机上日语包的一部分)。我使用内置的热键Alt +`在字母数字字符和平假名之间切换。现在,我的AHK脚本有一个Suspend切换键,可以使用Alt + 1组合键激活它。

我曾尝试将Suspend Toggle更改为Alt + grave,但如果这样做,则无法关闭脚本。我的计算机更改了输入语言(按照内置热键),但是没有激活/停用AHK脚本。

现在,当我更改语言时,必须连续执行两个热键组合(首先是Alt +坟墓,然后是Alt + 1)。这是多余的。我想让AHK识别我正在使用哪种输入法(字母数字或平假名),然后根据该信息打开或关闭。或者,如果我可以简单地通过Alt + Grave工作来同时切换AHK脚本的输入和状态(有效/无效)。

更多(可能不必要)的详细信息: 当我打开平假名键盘时,按“ s”键输出と,日语为“ TO”。通常,Shift + s仍会输出と。我写了AHK脚本,将Shift + s更改为ど或日语的“ DO”。

现在,如果我切换回字母数字字符并按“ s”,我当然会根据需要得到“ s”。但是,如果我尝试输入大写字母S,我仍然会得到一个ど,因为Shift + s仍映射到该平假名。

2 个答案:

答案 0 :(得分:1)

如果如您所说,计算机更改了输入语言(按照内置热键),则可以尝试使用此方法来激活/停用AHK脚本:

SetTimer, SuspendScript, 500

    RETURN   ; === end of auto-execute section ===

; Your hotkeys here:
; ...

    SuspendScript:
If (GetKeyboardLanguage(WinActive("A")) = 0x0409) ; English
    Suspend Off
else
    Suspend On
Return   

; https://autohotkey.com/board/topic/116538-detect-which-language-is-currently-on/#entry672236
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
}

答案 1 :(得分:0)

最简单的方法是在Autohotkey中使用此热键:

~!`::

波浪号使热键变为“透明”:它将对热键起作用,然后将其传递给Windows,以便其他程序也可以对其起作用。这样,您就可以使用该热键来切换输入并执行Autohotkey操作。