AHK中的基本应用程序 - 主循环和流量控制

时间:2017-11-05 16:36:04

标签: loops syntax autohotkey main

我想用AHK写一个小应用程序,但我正面对 难以理解的基本知识 流控制和语法。 所以基本上这个问题可以被理解为 - 我该如何写一个 AHK的简单程序?

这是一个非常简单的程序,必须切换 国旗" pan_on"用鼠标右键。 然后根据这个值做一些事情。

pan_on := false

Esc:: ExitApp

Rbutton:: 
    tooltip,  "button pressed"
    pan_on := true
return

Rbutton up:: 
    tooltip,  "released"
    pan_on := false
return

 if (pan_on = true)
{
    tooltip,  "XXXXXXXXEngage"
}

以" Rbutton"开头的块。线正在运作 正确。然而问题是最后一个块  条件语句永远不会被执行。 在最后一个块或所有脚本周围添加无限循环 doeas也没有帮助。

我最熟悉这种编程风格(这里使用Python语法):

pan_on = False
while True:
    pan_on = False
    if key_down[Esc]:
        break
    if key_down[Rbutton]:
        pan_on = True
    if key_up[Rbutton]:
        pan_on = False
    ...
    if pan_on:
        draw_something ()

所以我无法想到任何与之相反的东西 写一个程序,但似乎autohotkey是一个东西 "特别"在这个意义上,一个人必须使用其他方法? 在第一个AHK示例中,似乎" Rbutton ::"总是处于准备状态,我认为它是一个有条件的"如果key_down"在无尽的循环中, 但我一定在想呢?

那么如何制作这个简单的应用程序,可能不会改变 代码风格? AHK的主循环在哪里?控制流程如何工作,如何工作 管理运行的代码部分的入口点? 如果我只是写完" Rbutton ::"它有效,但它 不是一个人写程序的方式,而且很难 进一步发展逻辑。

1 个答案:

答案 0 :(得分:1)

就控制流而言,永远不会达到if语句。据我了解,解释器首先读取脚本顶部的AutoExec部分处理设置,然后对Hotkeys和Directives执行操作,然后执行行代码行,直到它返回Return。您还需要循环代码以不断检查Value是否为真,否则只需检查一次并继续。

pan_on := false

loop {
 if (pan_on = true)
    tooltip,  "XXXXXXXXEngage"
}

Esc:: ExitApp

Rbutton:: 
    tooltip,  "button pressed"
    pan_on := true
return

Rbutton up:: 
    tooltip,  "released"
    pan_on := false
return