Autohotkey 如何在两种自动热键配置之间切换
我需要在两个自动热键映射配置之间切换。我想在F3之间切换这两个。根据我在网上和StackOverflow上的研究,我认为下面应该是我想要的:Autohotkey 如何在两种自动热键配置之间切换,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
#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\u make\u mac:=false
,它的计算结果仍然是true。有没有更好的方法来做我正在做的事情
我正在运行AutoHotkey 1.1.21.03首先,您在
#If
语句中的消息框将无法正常工作。第7行的第一个按钮总是会响,告诉您正在设置Mac设置。但是,您的热键将被正确设置
我认为这是由于autoexec部分一直到达它找到的第一个热键
仅将热键放入#If
语句中
接下来,在您的第一个
#If
语句中,您正在检查Next\u make\u mac
是否包含除false
或0
以外的任何内容。表示字符串“false”,将计算为true
注意,AHK中的false
与0
相同
在第二个#If
语句中,检查next\u make\u 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
假设该行包含true
、false
、1
或0
,则该行将切换next\u make\u mac
因此,请确保在
#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,强制
,以消除每次按F3键时询问您是否要重新启动脚本的对话框。首先,#If
语句中的消息框将无法正常工作。第7行的第一个按钮总是会响,告诉您正在设置Mac设置。但是,您的热键将被正确设置
我认为这是由于autoexec部分一直到达它找到的第一个热键
仅将热键放入#If
语句中
接下来,在您的第一个
#If
语句中,您正在检查Next\u make\u mac
是否包含除false
或0
以外的任何内容。表示字符串“false”,将计算为true
注意,AHK中的false
与0
相同
在第二个#If
语句中,检查next\u make\u 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
假设该行包含true
、false
、1
或0
,则该行将切换next\u make\u mac
因此,请确保在
#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,强制
,以摆脱每次按F3键时询问您是否要重新启动脚本的对话框。操作系统:=[“Mac”、“PC”、“i:=0
#如果(map=“Mac”)
拉尔特:控制
转义::删除
RWin::逃逸
LWin::LAlt
拉尔特:勒温
#如果(map=“PC”)
拉尔特:逃跑
#如果
F3::
map:=OS[i:=iOS:=[“Mac”、“PC”、“i8]”,i:=0
#如果(map=“Mac”)
拉尔特:控制
转义::删除
RWin::逃逸
LWin::LAlt
拉尔特:勒温
#如果(map=“PC”)
拉尔特:逃跑
#如果
F3::
映射:=OS[i:=谢谢你,西多拉!很明显,我不知道#If指令禁止在其内部设置变量的这种性质。运行脚本似乎可以满足我的要求,所以我接受这个答案。@firebush很高兴我能帮上忙。更清楚的是,你可以在\If
指令中运行消息框并设置变量,但前提是您可以通过热键执行它。否则,代码将被视为无法访问。谢谢您,西多拉!很明显,我没有意识到禁止在其中设置变量的#If指令的这种性质。运行您的脚本似乎可以满足我的要求,所以我接受这个答案。@firebush很高兴我能提供帮助。更清楚的是,您可以运行message-b在#If
指令中执行并设置变量,但仅当您通过热键执行时。否则代码被视为无法访问。介意一点吗?介意一点吗?