【问题标题】:Basic app in AHK - main loop and flow controlAHK 中的基本应用程序 - 主循环和流控制
【发布时间】:2018-04-17 20:24:30
【问题描述】:

我想用 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”行开头的块正在工作 正确。然而问题是最后一个块 条件语句永远不会执行。 在最后一个块或所有脚本周围添加无限循环 也无济于事。

我最熟悉这种编程风格(这里使用 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::”似乎始终处于就绪状态,我认为它是一个无限循环中的条件“if key_down”, 但我一定是错了?

那么我如何制作这个简单的应用程序,可能无需更改 代码风格? AHK的主循环在哪里?控制流如何工作,如何 管理运行的部分代码的入口点? 如果我只是在“Rbutton::”之后写下所有内容,它可以工作,但它 不是一个人写程序的方式,并且将很难 进一步发展逻辑。

【问题讨论】:

标签: loops syntax autohotkey main


【解决方案1】:

就控制流而言,您的if 语句永远不会到达。据我了解,解释器首先读取脚本顶部的 AutoExec 部分,该部分处理设置,然后作用于热键和指令,然后逐行执行代码,直到返回。您还需要循环代码以不断检查 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

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多