AHK基础入门与程序结构

[toc]

# 前言

## 什么是程序结构?

程序结构一般指结构化程序设计,也就是说我们把程序结构化,进行以模块功能和处理过程设计为主的详细设计的基本原则。
详细请点 [结构化程序设计的百度百科]。

其概念最早由 E.W.Dijikstra在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。

所以我们今天就来讲一讲顺序、选择、循环三种基本控制结构构造。

# 基本控制结构构造

结构流程图(待补)


## 顺序结构

内容: 按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
表示方式:(语句一)——›(语句二)——›(语句n)
比如:

msgbox,你好
msgbox,你真好
msgbox,你太好了
run Notepad             ;激活运行记事本这个动作
send 你烦不烦?{enter}   ;{enter}代表回车
return

运行试一下,你会发现它是从上而下依次运行语句。


## 选择结构

内容:选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。
表示方式:(条件),如果(语句一)满足(条件),则运行(语句一),如果(语句二)满足(条件),则运行(语句二)。
比如:

a=1
b=2
if a>b
{msgbox,a大于b}
else
{msgbox,a小于b}
return

由此可见,选择结构大都依赖与if...else这个命令。
AHK中还有一种看起来很复杂的选择结构。

首先先依次解析下命令

+ InputBox: 显示输入框让用户输入字符串,也就是说这条命令会获取用户的输入。类似于C语言中的scanf。

表示方法:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]              ;后悔写这个了,因为要解释的东西好多啊。

+ OutputVar:用来保存用户输入文本的变量名.
比如:
> +  inputbox, name   ;变量名 即 OutputVar 为 name    //运行后弹出一个以脚本名为标题的输入框,输入数据保存在变量name中。  

+ ErrorLevel:当用户按下取消按钮时 ErrorLevel 值被设置为 1,按下确定时值为 0;

故来看下面这条命令。

比如

InputBox, password, Enter Password, (your input will be hidden), hide   ;hide为隐藏你所输入的数据
InputBox, UserInput, Phone Number, Please enter a phone number., , 640, 480
if ErrorLevel
    MsgBox, CANCEL was pressed.
else
    MsgBox, You entered "%UserInput%"      ; "%UserInput%" 相当与 C 语言中的 %d 。

第一个‘,’为(1),以此类推。hide为隐藏你所输入的数据

(1)获取用户输入的数据,保存在(2)变量 password 中。
(3) Enter Password 为标题。
(4) (your input will be hidden) 为显示框中的内容 。
(5)获取用户输入的数据,保存在(6)变量 UserInput 中。
(7) Phone Number 为标题。
(8) Please enter a phone number.为显示框中的内容。
(9)(10)依次为 Width, Height, X, Y的值

关于 % 的使用,详细参见[ AHK中% 符号的用法 ]


## 循环结构

内容: 循环结构可以看成是一个条件判断语句和一个向回转向语句的组合。另外,循环结构的三个要素:循环变量、循环体和循环终止条件. ,循环结构在程序框图中是利用判断框来表示,判断框内写上条件,两个出口分别对应着条件成立和条件不成立时所执行的不同指令,其中一个要指向循环体,然后再从循环体回到判断框的入口处.

表达方式:见图。

循环结构有三种: for 循环; loop 循环; while 循环。


### for 循环

内容:for....in
表达形式: For Key [, Value] in Expression
解释一下:

Key : 在每次重复开始时用来保存键的变量名称. ** 变量 **
[, Value] : 保存与当前键关联的值的变量名. ** 值 **,中括号表示非必需。
Expression :结果为对象的 表达式 或包含对象的变量. ** 表达式或变量 **

比如:

colours := Object("red", 0xFF0000, "blue", 0x0000FF, "green", 0x00FF00) ;  列出对象中的键值对:
for k, v in colours   ; 上面的表达式可以直接代替下面的“colours”:
    s .= k "=" v "`n"
MsgBox % s

k相当与‘red’,‘blue’,‘green’这些键,而v则取代逗号后面的‘0xFF0000’等键值。
所以在上段代码中,for 循环的作用是历遍colours里面的键和键值,并赋值给s

上段代码语法其实和 C 语言类似。
但首先我们还是要看AHK中独特的赋值。即等号的应用。
也就是要先要了解变量和表达式,这里省略[shenglue](笑)不写,详细请参见参考手册的变量与表达式,或者单独开章讲解。

单独讲赋值。(因为自己一看其实也不懂)(笑)

### 等号运算符(=)

内容:给变量赋值,获取变量的内容。


#### 给变量赋值

传统方法:使用 等号运算符 (=) 来指定 没有加引号的 原义字符串或包围在百分号中的变量. 例如:

MyNumber = 123
MyString = This is a literal string.
CopyOfVar = %Var%  ; 和 = 运算符一起使用时, 需要使用百分号来获取变量的内容.

表达式方法:使用 冒号等号运算符 (:=) 来保存数字, 加引号的字符串和其他类型的表达式. 例如:

MyNumber := 123
MyString := "This is a literal string."
CopyOfVar := Var  ; 和前面段落中与其作用相同的语句不同, 百分号不和 := 运算符一起使用.

那么如何清空变量?

MyVar =         ;传统方法。
MyVar := ""     ;表达式方法。

注意的是:上面的这对空引号只能和 := 运算符一起使用, 因为和 = 运算符一起使用时, 则会在变量中保存两个原义的引号字符.

也可以看看这个:AHK 中 = 和 := 赋值运算符的用法

还是没有搞懂.=和“=”是什么意思,赋值?


### loop 循环

表达形式: Loop [, Count]

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

比如:

Loop
{
    if a_index > 25
        break  ; 终止循环
    if a_index < 20
        continue ; 跳过后面并开始下一次重复
    MsgBox, a_index = %a_index% ; 这里将仅显示数字 20 到 25
}

调试看看它循环了多少次。

### while 循环

内容:重复执行一系列命令,一直到指定的表达式计算结果为假。
表达方式: While Expression

Expression : 任何有效的 表达式. 例如:while x < y。

比如:

x=1
y=2
while y>x
msgbox,y大于x

(笑)
之后要怎么改才能跳出循环呢?试试看。


# 总结

主要讲了三种基本的控制程序结构构造。分别为 顺序结构,选择结构和循环结构
选择结构的主要关键字是 if ... else
重点讲了循环结构,循环结构有 for 循环,loop 循环 ,while 循环。
for 循环 关键字为 for in ;
还适当的讲解了一下等号运算符的应用,留下了几个问题。比如 .= 和 “ = ” 。
适当的扩展了一下如何获取用户输入(inputbox和ErrorLevel)。

归纳:

  • 关键字: if ...else ,

for ... in ... ,
loop ... , while ... ,
ErrorLevel ,
inputbox ,
OutputVar ,
:= 。

如果有哪个关键字还不懂,可以去参考手册来详细了解。

# 参考链接

相关词条:

相关网站:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,714评论 0 38
  • 2017-7-25(九十五) 感恩 —— 记录了一时书,给自己陪伴。 感恩 —— 早餐是一只清香脆甜的苹果,促进消...
    慢慢花开阅读 242评论 0 0
  • 投射我儿早睡早起,注意面部卫生,脸上的毛囊炎好了,面部也光滑如初。 投射我儿积极开始复习、预习,迎接开学摸底测试,...
    花开生两面阅读 103评论 0 0