如何在两个Autohotkey配置之间切换

时间:2015-04-25 19:08:05

标签: autohotkey

我需要在两个AutoHotkey键映射配置之间切换。我想通过F3切换两者。从我的在线研究和StackOverflow,我认为以下应该做我想要的:

#ifwinactive

next_make_mac = %1%
msgbox next_make_mac: %next_make_mac%

#If next_make_mac
    msgbox Setting Mac settings.
    RAlt::Control
    Escape::Delete

    RWin::Escape
    LWin::LAlt
    LAlt::LWin
    next_make_mac := false
    msgbox Mac settings set.
#If

#If !next_make_mac
    msgbox Setting PC settings.
    Ralt::Escape
    msgbox PC settings set.
    next_make_mac := true
#If

msgbox %next_make_mac%

F3:: 
    Run %A_AhkPath% %A_ScriptName% %next_make_mac%
return

但是,#If next_make_mac指令始终计算为true。我不确定为什么会这样。事实上,即使我进入next_make_mac := false它仍然评估为真。有没有更好的方法来做我正在做的事情?

我正在运行AutoHotkey 1.1.21.03

2 个答案:

答案 0 :(得分:5)

首先,#If语句中的消息框不会按预期运行。第7行的第一个将永远消失,告诉你Setting Mac settings。但是,您的热键将正确设置。

我认为这是因为auto-exec部分一直到达它找到的第一个热键。

只将热键放在#If语句中。

接下来,在您的第一个#If语句中,您需要检查next_make_mac是否包含其他而不是false0。意味着字符串"false"将评估为true。

注意,AHK中的false0相同。

在您的第二个#If声明中,您需要检查next_make_mac是否包含false0

至于切换,因为您无法直接在#If语句中更改变量的值,您必须将其添加到 F3 热键中。

像这样:

F3::
    next_make_mac := !next_make_mac ; Flip the value
    msgBox % next_make_mac
    Run %A_AhkPath% %A_ScriptName% %next_make_mac%
return

该行将切换next_make_mac,假设它包含truefalse10

因此,请确保您只在#If语句中包含热键,并将10作为参数传递而不是truefalse,以便您不要意外地使用字符串,你的脚本应该按预期工作。

以下是这些变化的完整示例:

#SingleInstance, force
#ifwinactive

next_make_mac = %1%

; Check which settings we'll be using
if (next_make_mac)
    msgBox, Using Mac Settings
else
    msgBox, Using PC Settings

; Only hotkeys inside here
#If next_make_mac
    RAlt::Control
    Escape::Delete

    RWin::Escape
    LWin::LAlt
    LAlt::LWin
#If

; Only hotkeys inside here
#If !next_make_mac
    Ralt::Escape
#If

F3::
    next_make_mac := !next_make_mac ; Flip the value
    Run %A_AhkPath% %A_ScriptName% %next_make_mac%
return

编辑:虽然不在问题范围内,但您也可以在脚本顶部添加#SingleInstance, force以删除询问您是否要重新启动的对话框每次按 F3 时脚本。

答案 1 :(得分:1)

OS:=["Mac","PC",""],i:=0

#If (map="Mac")
RAlt::Control
Escape::Delete
RWin::Escape
LWin::LAlt
LAlt::LWin

#If (map="PC")
Ralt::Escape

#If

F3::
 map:=OS[i:=i<os.MaxIndex()?++i:1]
 tooltip,% map,10000,10000
return