[help] #inputlevel, но не перезаписывать комбинацию клавиш?

у меня есть 2 ахк сценария, оба переназначают "k", но сценарий 1 имеет "scrolllock & k"

script1.ahk

k::msgbox script1
scrolllock & k::click

script2.ahk

k::msgbox script2

я хочу это: при запуске обоих скриптов одновременно, если я нажму k, он выполнит script2.ahk (который показывает "msgbox script2"),

другим способом, script2 перезаписывает script1

поэтому я поставил # inputlevel2 в script2.ahk

теперь это выглядит так

script1.ahk

k::msgbox script1
scrolllock & k::click

script2.ahk

#inputlevel2
k::msgbox script2

но теперь, если я нажму "scrolllock & k", он не будет делать щелчок (функция script1), но покажет msgbox (script2), я думаю, потому что "k" был перезаписан script2, а "scrolllock & k" больше не распознается

я нашел способ заставить scrolllock & k работать, когда я перезагружаю script1 и нажимаю scrolllock & k, он будет работать

но если я перезагружаю script2, мне придется снова перезагружать script1, чтобы эта комбинация клавиш работала

Другими словами, у меня вопрос: можно ли перезаписать "k" script2 на "k" script1, но при этом выполнять функцию, подобную «scrolllock & k» script1?

Спасибо

1 ответ1

1

Не уверен, как это работает с #InputLevel .

Одним из решений может быть использование общего вызова функции из обоих сценариев, который загружается с помощью оператора #Include . Он должен был бы определить, запущен ли скрипт script2, и не выполнить его, если скрипт script2 работает.

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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .