我需要在两个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
答案 0 :(得分:5)
首先,#If
语句中的消息框不会按预期运行。第7行的第一个将永远消失,告诉你Setting Mac settings
。但是,您的热键将正确设置。
我认为这是因为auto-exec部分一直到达它找到的第一个热键。
只将热键放在#If
语句中。
接下来,在您的第一个#If
语句中,您需要检查next_make_mac
是否包含其他而不是false
或0
。意味着字符串"false"
将评估为true。
注意,AHK中的false
与0
相同。
在您的第二个#If
声明中,您需要检查next_make_mac
是否包含false
或0
。
至于切换,因为您无法直接在#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
,假设它包含true
,false
,1
或0
。
因此,请确保您只在#If
语句中包含热键,并将1
或0
作为参数传递而不是true
或false
,以便您不要意外地使用字符串,你的脚本应该按预期工作。
以下是这些变化的完整示例:
#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