Autohotkey 如何在两种自动热键配置之间切换

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

我需要在两个自动热键映射配置之间切换。我想在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\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:=i
OS:=[“Mac”、“PC”、“i8]”,i:=0
#如果(map=“Mac”)
拉尔特:控制
转义::删除
RWin::逃逸
LWin::LAlt
拉尔特:勒温
#如果(map=“PC”)
拉尔特:逃跑
#如果
F3::

映射:=OS[i:=谢谢你,西多拉!很明显,我不知道#If指令禁止在其内部设置变量的这种性质。运行脚本似乎可以满足我的要求,所以我接受这个答案。@firebush很高兴我能帮上忙。更清楚的是,你可以在
\If
指令中运行消息框并设置变量,但前提是您可以通过热键执行它。否则,代码将被视为无法访问。谢谢您,西多拉!很明显,我没有意识到禁止在其中设置变量的#If指令的这种性质。运行您的脚本似乎可以满足我的要求,所以我接受这个答案。@firebush很高兴我能提供帮助。更清楚的是,您可以运行message-b在
#If
指令中执行并设置变量,但仅当您通过热键执行时。否则代码被视为无法访问。介意一点吗?介意一点吗?