【AHK】打造炒股利器系列——用数组和循环来简化语音报时器

上一篇文章,【AHK】打造炒股利器系列——语音报时器 作为AHK入门,讲解了 注释、赋值、if语句、逻辑运算符、定时器等基本知识。本篇将引入ArrayLoop语句来简化化这个语音报时器,让代码更优雅,代码越简单越不容易出错误,老话说秃头上的虱子明摆着嘛。

先放上简化后的代码,然后再针对初级AHK使用者展开讲解Array、Loop、MsgBox等指令。

#Persistent
#SingleInstance force
/** 
*【AHK】打造炒股利器系列——用数组和循环来简化语音报时器
* 作者:liuyukuan
* 版权声明:未经授权,不得转载 
* 最新版发布在:https://blog.csdn.net/liuyukuan/
*/
; 定义两个数组: 一个是存放时间的数组times;另一个是存放对应消息的数组messages。
times := ["09:00:00", "09:15:00", "09:25:00", "09:30:00", "11:30:00", "13:00:00", "14:45:00", "15:00:00"]
messages := ["早盘下载数据", "开始集合竞价", "距开盘还有五分钟", "上午开盘", "中午收盘", "下午开盘", "距收盘还有十五分钟", "全天收盘"]

; 创建 一个 字转语音(TTS )COM 对象
Aladdin := ComObjCreate("sapi.spvoice")

; 设定定时器 每 0.5秒 运行一次
SetTimer, 定时器, 500
return

定时器:
    FormatTime, 当前时间,, HH:mm:ss
    
    ; 用Loop循环来遍历 times 数组
    Loop, % times.Length()
    {
        if (当前时间 = times[A_Index])
        {
            Aladdin.Speak(messages[A_Index])
            break
        }
    }
return

简单数组 Array的基本用法

创建数组

有两种方法可以用:

数组:= ["one", "two", "three"]
数组:= Array(Item1, Item2, ..., ItemN)

读取数组

想取出数组arr的第i项元素,直接把序号i放到数组名称后面的方括号里即可。

数组arr的第3项的值 := arr[3]
循环遍历数组

可以通过LoopFor 循环实现. 例如:

array := ["one", "two", "three"]

; Length返回数组项目的数量:
Loop % array.Length()
    MsgBox % array[A_Index]

; 枚举数组内容:
For index, value in array
    MsgBox % "Item " index " is '" value "'"

普通循环Loop的基本用法

重复执行一系列命令: 可以指定表示重复次数的数字或直到遇到 break.

Loop [, Count]

参数

Count
执行循环体(重复) 的次数. 如果省略, Loop 会无期限继续, 直到遇到 break 或 return.

如果 Count 是一个变量引用例如 %ItemCount%, 每当此变量为空或包含小于 1 的数字时, 循环会被完全跳过.

备注

内置变量 A_Index 包含当前循环重复的次数. 首次执行循环体时其值为 1. 第二次时其值为 2; 依此类推. 如果一个内层循环包含在一个外层循环中, 那么内层循环具有优先权. A_Index 在所有类型的循环中都有效, 包括文件循环和注册表循环; 但是在循环外部时 A_Index 值为 0.

示例1: 创建一个有 3 次迭代的循环.

;循环3次,内置变量A_Index 将依次为 1, 2, 接着 3
Loop, 3
{
    MsgBox, 迭代次数是 %A_Index%.  
    Sleep, 100
}

小扩展:MsgBox

MsgBox语句可以创建一个小对话框窗口,用于输出提示信息,方便用户与程序交互。小窗口中可以含有一个或多个按钮(例如 “是” 和 “否”) 。
消息框通常看起来像这样:
在这里插入图片描述

创建消息框的语法是:

MsgBox, Text
或者
MsgBox [, Options, Title, Text, Timeout]

参数说明

Text(文本)

如果省略所有的参数, 消息框会显示 “Press OK to continue.” 文本. 否则, 此参数表示消息框中显示的文本, 用来引导用户如何操作或提示信息.

可以使用转义序列来显示特殊字符. 例如, `n 表示换行符, 它结束当前行并开始一个新行. 因此使用 text1`n`ntext2 会在 text1 和 text2 之间添加一个空行.

如果 Text 较长, 可以通过延续片段的方法将其分解成较短的几行, 这样可以增加可读性和可维护性.

Options(选项)

表示消息框的类型和可能的按钮组合. 如果为空或省略, 则默认为 0. 注意哈:可以累加的,比如:两个按钮为0x1,感叹号图标0x30,置顶模式0x1000,那么只需设置0x1031.

MsgBox 0x1031,提示,Hello World!

在这里插入图片描述

若要指定在消息框中显示的按钮, 请添加以下值 之一:

功能十进制值十六进制值
确定(即仅显示一个 “确定” 按钮)00x0
确定/取消10x1
终止/重试/忽略20x2
是/否/取消30x3
是/否40x4
重试/取消50x5
取消/重试/继续60x6

除了按钮外,还可以设置图标的
要在消息框中显示一个图标, 请添加以下值 之一:

功能十进制值十六进制值
错误图标(停止/错误)160x10
问号图标320x20
惊叹号图标480x30
星号图标(信息)640x40

如需要对话框置顶,不被其他窗口遮挡,须指定对话框的模式 0x1000 :

功能十进制值十六进制值
系统模式(总是在顶部)40960x1000
任务模式81920x2000
置顶(WS_EX_TOPMOST 样式) (和系统模式类似, 但省略了标题栏图标)2621440x40000
Title(标题)

消息框窗口的标题. 如果省略或为空, 那么它默认为脚本的名称(不含路径).

Timeout(超时)

(可选) 以秒为单位的超时时间

总结

本文以简化上一篇【AHK】打造炒股利器系列——语音报时器](https://blog.csdn.net/liuyukuan/article/details/142388396)中的代码为例,讲解了Array、 Loop 、MsgBox等AHK指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值