autohotkey 帮助-#inputlevel 但不覆盖组合键?

autohotkey 帮助-#inputlevel 但不覆盖组合键?

[帮助]#inputlevel 但不覆盖组合键?

我有 2 个 ahk 脚本,都重新映射“k”,但脚本 1 有“scrolllock & k”

脚本1.ahk

k::msgbox script1
scrolllock & k::click

脚本2.ahk

k::msgbox script2

我想要的是:当同时运行两个脚本时,如果我按 k ,它将执行 script2.ahk (显示“msgbox script2”),

换句话说,脚本2覆盖脚本1

所以我把#inputlevel2 放在 script2.ahk 中

现在看起来像这样

脚本1.ahk

k::msgbox script1
scrolllock & k::click

脚本2.ahk

#inputlevel2
k::msgbox script2

但是现在如果我按“scrolllock & k”,它将不会执行单击(脚本 1 的功能),但它会显示 msgbox(脚本 2)我猜是因为“k”已被脚本 2 覆盖并且“scrolllock & k”不再被识别

我找到了一种让 scrolllock & k 工作的方法,当我重新加载 script1 并按下 scrolllock & k 时,它就会工作

但如果我重新加载脚本2,我将必须再次重新加载脚本1才能使该组合键起作用

换句话说,我的问题是是否可以将脚本2的“k”覆盖为脚本1的“k”,但仍然执行像脚本1的“scrolllock & k”这样的功能?

谢谢

答案1

不确定它是如何工作的#InputLevel

一种解决方案可能是使用通过#Include语句加载的两个脚本中的公共函数调用。它必须检测脚本 2 是否正在运行,并且如果脚本 2 正在运行则不执行。

Script2 也必须让k密钥传递到 Script1,这样scrolllock & k才能在 Script1 中工作。

下面的代码是一个示例,未经测试——我相信有更优雅的方法来解决这个问题,但它可能会起作用或让你更接近答案。这也不是我编写的代码,而是一个示例想法。

; -----------------------
; Script1.ahk
; -----------------------
#Persistent
k::functionk(A_ScriptName)
scrollock & k::Click
#Include functionCalls.ahk

; -----------------------
; Script2.ahk
; -----------------------
#Persistent
Script2Running("Set", True)      ; auto-execute when script2 starts
OnExit(Script2Exit)
return

~k::functionk(A_ScriptName)      ; tilde should let k pass through to script1

Script2Exit()
{
    Script2Running("Set",False)
}
#Include functionCalls.ahk

; -----------------------
; functionCalls.ahk
; -----------------------
functionk(callersScriptName)
{
    if (callersScriptName="script1.ahk") and not script2Running()
    {
        msgbox script1
        ; add code as needed
    }
    else if (callersScriptName="script2.ahk")
    {
        msgbox script2    
        ; add code as needed
    }
    else
        msgbox Unrecognized script name: %callersScriptName%
}

Script2Running(SetOrRead := "", newState := false)  
{
    static running := false
    if (SetOrRead="Set")
        running := newState

    return running       ; same as 'return %running%', see help topic on return
}

相关内容