首页 > 其他分享 >【AHK】打造炒股利器系列——用数组和循环来简化语音报时器

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

时间:2024-09-28 17:20:03浏览次数:3  
标签:报时器 Index 00 AHK 利器 循环 数组 MsgBox Loop

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

简化说明:

  1. 我们用两个数组“times”和“messages”替换了单独的变量。这两个数组按照相同的顺序包含了时间和对应的消息。
  2. 我们用一个循环替换了多个if语句。该循环遍历times数组。
  3. 在循环中,我们检查当前时间是否与数组中的任何时间相匹配。如果有匹配项,就语音播报出相应的消息并退出循环(因为我们每次只需要说出一条消息)。
  4. A_Index 内置变量用于访问两个数组中的当前索引。

这个简化版本实现了与原始脚本相同的任务,但更简洁,更容易修改。如果您需要添加或删除时间配置,只需在脚本开始时更新 times 和 messages 数组即可。
下面先放上简化的代码,然后再为初级AHK学员,展开讲解Array、Loop、MsgBox等指令。

#Persistent
#SingleInstance force
/** 
*【AHK】打造炒股利器系列——用数组和循环来简化语音报时器
* 作者:liuyukuan
* 版权声明:未经授权,不得转载 
* 最新版发布在: 最新版发布在:https://blog.csdn.net/liuyukuan/article/details/142612506
*/
; 定义两个数组: 一个是存放时间的数组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指令。

标签:报时器,Index,00,AHK,利器,循环,数组,MsgBox,Loop
From: https://blog.csdn.net/liuyukuan/article/details/142612506

相关文章

  • 业财猫 CRM:财税企业破局利器,开启价值升级新时代
    天空一声巨响,蓝猫闪亮登场!大家好,我是业财猫,一只懂管理懂财税的猫!在当今这个数据洪流与市场变革交织的时代,财税企业正站在一个十字路口,一方面需深耕财务税务的专业高地,另一方面则必须拥抱科技,以创新驱动发展。业财猫CRM,作为专为财税行业量身打造的管理利器,正以其前瞻性的技术......
  • 深入理解 JSX:构建 React 用户界面的利器
    目录一、JSX介绍1.JSX概念2.为什么使用JSX,JSX有什么好处?二、JSX基本语法1.基本元素: 2.嵌套元素:3.组件:4.属性: 5.表达式6.条件渲染:7.样式:三、JSX语法规则四、JSX编译过程五、JSX小案例1.待办事项列表2.计时器应用六、总结一、JSX介绍1.JSX概念    ......
  • 教你玩转MySQL8物理备份利器Xtrabackup
    教你玩转MySQL8物理备份利器Xtrabackup原创 我科绝伦 小周的数据库进阶之路  2024年09月22日00:00 重庆热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,......
  • 并发处理的利器:深入探讨锁分离设计+6大分离场景(高并发篇)
    锁分离设计的本质在于将对共享资源的访问操作根据其类型或性质区分开来,并为每种操作提供独立的锁。这种设计背景通常源于对高并发系统的需求,其中多个线程或进程需要频繁地对共享资源进行读写或其他操作。在传统的锁机制中,所有操作都可能使用同一把锁,这在高并发环境下会导致......
  • PromQL:高效查询时间序列数据的利器
    PromQL(PrometheusQueryLanguage)是Prometheus监控系统的查询语言,专门用于处理时间序列数据。它允许用户从Prometheus中提取、操作和显示数据,通常用于生成实时监控图表或告警规则。1.基本数据类型PromQL的查询结果有四种数据类型:瞬时向量(InstantVector):某一时刻的一组时间序列数据......
  • 深入探索 RUM 与全链路追踪:优化数字体验的利器
    作者:梅光辉(重彦)背景介绍随着可观测技术的持续演进,多数企业已广泛采用APM、Tracing及Logging解决方案,以此强化业务监控能力,尤其在互联网行业,产品的体验直接关系着用户的口碑,决定了市场命运,使得RUM(真实用户监控)日益受到重视。然而,在面对由后端服务故障引起的体验问题时(例如,后......
  • 【C#生态园】选择合适的自动化工具:满足团队需求的利器大比拼
    自动化服务器和工具全面比较:选择最适合你团队的利器前言在当今软件开发领域,持续集成和持续部署已经成为了提高效率、降低风险的关键利器。各种自动化服务器和工具应运而生,以满足不同团队和项目的需求。本文将介绍几种流行的自动化服务器和工具,包括Jenkins、TeamCity、Oct......
  • .NET 高级音频处理利器 NAudio 库
    目录前言项目介绍项目说明常用类常用接口项目示例1、创建项目2、NuGet安装NAudio与NAduio.Core包3、使用说明4、录制文件代码5、播放文件代码6、注意项目总结最后前言NAudio是一个开源音频库,用于在C#应用程序中处理音频。它提供了丰富的属性和方法,使我......
  • 推荐7款.NET开源且功能强大图表库,效率提升利器!
    前言今天大姚给大家推荐7款.NET开源、免费、高效、功能强大图表库,这些库旨在助力你迅速实现图表开发需求,提升项目效率与质量。LiveCharts2LiveCharts2是一个.NET开源、简单、灵活、交互式且功能强大的.NET图表、地图和仪表库,现在几乎可以在任何地方运行如:Maui、UnoPlatform、Blazo......
  • 并发处理的利器:深入探讨锁分离设计+6大分离场景(高并发篇)
    锁分离设计的本质在于将对共享资源的访问操作根据其类型或性质区分开来,并为每种操作提供独立的锁。这种设计背景通常源于对高并发系统的需求,其中多个线程或进程需要频繁地对共享资源进行读写或其他操作。在传统的锁机制中,所有操作都可能使用同一把锁,这在高并发环境下会导致严重的......