Autohotkey 如何基于活动输入法激活/停用自动热键脚本?

Autohotkey 如何基于活动输入法激活/停用自动热键脚本?,autohotkey,Autohotkey,我有一个自动热键脚本,只能与日语输入结合使用 我的计算机上只有一种输入语言(日语),我使用字母数字设置输入英语(我没有切换到英语,它在技术上仍然是一种日语输入法。但它是字母数字键盘,有罗马字母,仍然是我计算机上日语包的一部分)。我使用内置的热键Alt+`,在字母数字字符和平假名之间切换。现在,我的AHK脚本有一个挂起切换,我用Alt+1组合激活它 我已尝试将暂停切换更改为Alt+grave,但如果这样做,则无法关闭脚本。我的电脑会更改输入语言(根据内置热键),但不会激活/停用AHK脚本 现在,当

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

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

我已尝试将暂停切换更改为Alt+grave,但如果这样做,则无法关闭脚本。我的电脑会更改输入语言(根据内置热键),但不会激活/停用AHK脚本

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

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


现在,如果我切换回字母数字字符并点击“s”,我当然会得到想要的“s”。但如果我尝试键入大写字母S,我仍然会得到ど 因为Shift+s仍映射到该平假名。

如您所说,如果您的计算机更改了输入语言(根据内置热键),您可以尝试以下操作来激活/停用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
}

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

~!`::
瓷砖使热键“透明”:它将作用于热键,然后将其传递给Windows,以便其他程序也可以作用于热键。因此,您可以使用此热键切换输入并执行自动热键操作