Autohotkey 自动热键中的切换键
我的目标是将WASD映射到键盘上的4个箭头按钮,并在z退出时使1“挂起”脚本。那很容易。现在我希望Autohotkey 自动热键中的切换键,autohotkey,Autohotkey,我的目标是将WASD映射到键盘上的4个箭头按钮,并在z退出时使1“挂起”脚本。那很容易。现在我希望a和d只有条件地应用。我看了这些文件,不知道这里出了什么问题。我想我要么使用了错误的if语句,要么左/右在if语句中不起作用,在这种情况下我不知道该怎么办 #SingleInstance a::if(UseAD) Left d::if(UseAD) Right 1::Suspend 2::UseAD:=!UseAD w::Up s::Down z::ExitApp 试试这个: #SingleIns
a
和d
只有条件地应用。我看了这些文件,不知道这里出了什么问题。我想我要么使用了错误的if语句,要么左/右在if语句中不起作用,在这种情况下我不知道该怎么办
#SingleInstance
a::if(UseAD) Left
d::if(UseAD) Right
1::Suspend
2::UseAD:=!UseAD
w::Up
s::Down
z::ExitApp
试试这个:
#SingleInstance
$a::Send % UseAD ? "{Left}" : "a"
$d::Send % UseAD ? "{Right}" : "d"
1::Suspend
2::UseAD:=!UseAD
w::Up
s::Down
z::ExitApp
好了,现在让我们休息一下
你的陈述没有被正确评估。满足条件后的下一行代码是运行的代码。像这样:
If (true)
do this
您的多行语句也是错误的。基本上,单行热键是一个Send命令,用于该行中指定的任何键(除非您指定赋值/函数/命令等),它将充当Send命令。要进行If评估,需要多行。当您指定热键并且希望进行需要多行的评估时,您必须从多行热键返回一个子例程:
a::
Code goes here
more code
etc..
Return
b::AnotherHotkey
etc..
好的,让我们将此逻辑插入到您的代码中:
#SingleInstance
a::
if(UseAD)
Left
return
d::
if(UseAD)
Right
return
1::Suspend
2::UseAD:=!UseAD
w::Up
s::Down
z::ExitApp
如果你运行这个,你会得到一个关于左边文本的错误。。。这是因为热键不是作为Send命令,而是作为一个子例程,因此我们必须用Left指定Send命令:
a::
if(UseAD)
Send, Left
return
但是这也不正确,现在它发送的是Left这个词,而不是Left。。同样,我们在命名键周围添加了括号,如下所示:
a::
if(UseAD)
Send, {Left}
return
好的,现在当UseAD为False时,a和b不会被发送,所以我们必须使用like so指定它们:
现在,我们运行这段代码并按a或b键,得到一条MaxHotkeys-Reach消息,因为我们的代码在一个Infinate循环中触发了热键。我们需要以这样一种方式指定代码,即它不会触发自身,如下所示:
$a::
if(UseAD)
Send, {Left}
else
Send, a
return
如果您注意到我们在热键前面添加了一个$符号,这将为该热键添加一个键盘挂钩,并将防止脚本触发该热键本身。这现在是一个完整的工作脚本,但看起来与我发布的第一个代码完全不同。那是因为如果可以的话,我喜欢少打几行
在第一个代码示例中,我在Send命令上使用了一个强制表达式%和三值?:要评估UseAD,如果为真,则发送左键,如果为假,则发送信函,与上述代码完全相同,只是更加简洁。您可以使用
2::
调用热键
命令。它就是针对这个问题设计的,可以改变a
/d
的行为。
$a::
if(UseAD)
Send, {Left}
else
Send, a
return