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 ,
:= 。

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

# 参考链接

相关词条:

  • [结构化程序设计的百度百科]。
  • 选择结构的百度百科
  • 顺序结构的百度百科
  • 循环结构的百度百科
  • [ AHK中% 符号的用法 ]
  • AHK 中 = 和 := 赋值运算符的用法

相关网站:

  • AutoHotKey之美的知乎专栏
  • AutoHotKey中文论坛

你可能感兴趣的:(AHK基础入门与程序结构)