AHK基礎(chǔ)入門與程序結(jié)構(gòu)

[toc]

# 前言

## 什么是程序結(jié)構(gòu)霍殴?

程序結(jié)構(gòu)一般指結(jié)構(gòu)化程序設(shè)計,也就是說我們把程序結(jié)構(gòu)化系吩,進(jìn)行以模塊功能和處理過程設(shè)計為主的詳細(xì)設(shè)計的基本原則来庭。
詳細(xì)請點(diǎn) [結(jié)構(gòu)化程序設(shè)計的百度百科]。

其概念最早由 E.W.Dijikstra在1965年提出的穿挨,是軟件發(fā)展的一個重要的里程碑月弛。它的主要觀點(diǎn)是采用自頂向下肴盏、逐步求精及模塊化的程序設(shè)計方法;使用三種基本控制結(jié)構(gòu)構(gòu)造程序帽衙,任何程序都可由順序菜皂、選擇、循環(huán)三種基本控制結(jié)構(gòu)構(gòu)造厉萝。

所以我們今天就來講一講順序恍飘、選擇、循環(huán)三種基本控制結(jié)構(gòu)構(gòu)造谴垫。

# 基本控制結(jié)構(gòu)構(gòu)造

結(jié)構(gòu)流程圖(待補(bǔ))


## 順序結(jié)構(gòu)

內(nèi)容: 按照解決問題的順序?qū)懗鱿鄳?yīng)的語句就行章母,它的執(zhí)行順序是自上而下,依次執(zhí)行翩剪。
表示方式:(語句一)——?(語句二)——?(語句n)
比如:

msgbox乳怎,你好
msgbox,你真好
msgbox前弯,你太好了
run Notepad             蚪缀;激活運(yùn)行記事本這個動作
send 你煩不煩?{enter}   ;{enter}代表回車
return

運(yùn)行試一下博杖,你會發(fā)現(xiàn)它是從上而下依次運(yùn)行語句椿胯。


## 選擇結(jié)構(gòu)

內(nèi)容:選擇結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果判斷某些條件剃根,根據(jù)判斷的結(jié)果來控制程序的流程。
表示方式:(條件)前方,如果(語句一)滿足(條件)狈醉,則運(yùn)行(語句一),如果(語句二)滿足(條件)惠险,則運(yùn)行(語句二)苗傅。
比如:

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

由此可見,選擇結(jié)構(gòu)大都依賴與if...else這個命令班巩。
AHK中還有一種看起來很復(fù)雜的選擇結(jié)構(gòu)渣慕。

首先先依次解析下命令

+ InputBox: 顯示輸入框讓用戶輸入字符串,也就是說這條命令會獲取用戶的輸入。類似于C語言中的scanf抱慌。

表示方法:InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]              逊桦;后悔寫這個了,因?yàn)橐忉尩臇|西好多啊抑进。

+ OutputVar:用來保存用戶輸入文本的變量名.
比如:
> +  inputbox, name   强经;變量名 即 OutputVar 為 name    //運(yùn)行后彈出一個以腳本名為標(biāo)題的輸入框,輸入數(shù)據(jù)保存在變量name中寺渗。  

+ ErrorLevel:當(dāng)用戶按下取消按鈕時 ErrorLevel 值被設(shè)置為 1匿情,按下確定時值為 0兰迫;

故來看下面這條命令。

比如

InputBox, password, Enter Password, (your input will be hidden), hide   炬称;hide為隱藏你所輸入的數(shù)據(jù)
InputBox, UserInput, Phone Number, Please enter a phone number., , 640, 480
if ErrorLevel
    MsgBox, CANCEL was pressed.
else
    MsgBox, You entered "%UserInput%"      汁果; "%UserInput%" 相當(dāng)與 C 語言中的 %d 。

第一個‘玲躯,’為(1)据德,以此類推。hide為隱藏你所輸入的數(shù)據(jù)

(1)獲取用戶輸入的數(shù)據(jù)府蔗,保存在(2)變量 password 中晋控。
(3) Enter Password 為標(biāo)題。
(4) (your input will be hidden) 為顯示框中的內(nèi)容 姓赤。
(5)獲取用戶輸入的數(shù)據(jù)赡译,保存在(6)變量 UserInput 中。
(7) Phone Number 為標(biāo)題不铆。
(8) Please enter a phone number.為顯示框中的內(nèi)容蝌焚。
(9)(10)依次為 Width, Height, X, Y的值

關(guān)于 % 的使用,詳細(xì)參見[ AHK中% 符號的用法 ]


## 循環(huán)結(jié)構(gòu)

內(nèi)容: 循環(huán)結(jié)構(gòu)可以看成是一個條件判斷語句和一個向回轉(zhuǎn)向語句的組合誓斥。另外只洒,循環(huán)結(jié)構(gòu)的三個要素:循環(huán)變量、循環(huán)體和循環(huán)終止條件. 劳坑,循環(huán)結(jié)構(gòu)在程序框圖中是利用判斷框來表示毕谴,判斷框內(nèi)寫上條件,兩個出口分別對應(yīng)著條件成立和條件不成立時所執(zhí)行的不同指令距芬,其中一個要指向循環(huán)體涝开,然后再從循環(huán)體回到判斷框的入口處.

表達(dá)方式:見圖。

循環(huán)結(jié)構(gòu)有三種: for 循環(huán)框仔; loop 循環(huán)舀武; while 循環(huán)。


### for 循環(huán)

內(nèi)容:for....in
表達(dá)形式: For Key [, Value] in Expression
解釋一下:

Key : 在每次重復(fù)開始時用來保存鍵的變量名稱. ** 變量 **
[, Value] : 保存與當(dāng)前鍵關(guān)聯(lián)的值的變量名. ** 值 **离斩,中括號表示非必需银舱。
Expression :結(jié)果為對象的 表達(dá)式 或包含對象的變量. ** 表達(dá)式或變量 **

比如:

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

k相當(dāng)與‘red’,‘blue’跛梗,‘green’這些鍵寻馏,而v則取代逗號后面的‘0xFF0000’等鍵值。
所以在上段代碼中茄袖,for 循環(huán)的作用是歷遍colours里面的鍵和鍵值操软,并賦值給s

上段代碼語法其實(shí)和 C 語言類似。
但首先我們還是要看AHK中獨(dú)特的賦值宪祥。即等號的應(yīng)用聂薪。
也就是要先要了解變量和表達(dá)式家乘,這里省略[shenglue](笑)不寫,詳細(xì)請參見參考手冊的變量與表達(dá)式藏澳,或者單獨(dú)開章講解仁锯。

單獨(dú)講賦值。(因?yàn)樽约阂豢雌鋵?shí)也不懂)(笑)

### 等號運(yùn)算符(=)

內(nèi)容:給變量賦值翔悠,獲取變量的內(nèi)容业崖。


#### 給變量賦值

傳統(tǒng)方法:使用 等號運(yùn)算符 (=) 來指定 沒有加引號的 原義字符串或包圍在百分號中的變量. 例如:

MyNumber = 123
MyString = This is a literal string.
CopyOfVar = %Var%  ; 和 = 運(yùn)算符一起使用時, 需要使用百分號來獲取變量的內(nèi)容.

表達(dá)式方法:使用 冒號等號運(yùn)算符 (:=) 來保存數(shù)字, 加引號的字符串和其他類型的表達(dá)式. 例如:

MyNumber := 123
MyString := "This is a literal string."
CopyOfVar := Var  ; 和前面段落中與其作用相同的語句不同, 百分號不和 := 運(yùn)算符一起使用.

那么如何清空變量?

MyVar =         蓄愁;傳統(tǒng)方法双炕。
MyVar := ""     ;表達(dá)式方法撮抓。

注意的是:上面的這對空引號只能和 := 運(yùn)算符一起使用, 因?yàn)楹?= 運(yùn)算符一起使用時, 則會在變量中保存兩個原義的引號字符.

也可以看看這個:AHK 中 = 和 := 賦值運(yùn)算符的用法

還是沒有搞懂.=和“=”是什么意思妇斤,賦值?


### loop 循環(huán)

表達(dá)形式: Loop [, Count]

Count:執(zhí)行循環(huán)體 (重復(fù)) 的次數(shù). 如果省略, Loop 會無期限繼續(xù), 直到遇到 break 或 return.

比如:

Loop
{
    if a_index > 25
        break  ; 終止循環(huán)
    if a_index < 20
        continue ; 跳過后面并開始下一次重復(fù)
    MsgBox, a_index = %a_index% ; 這里將僅顯示數(shù)字 20 到 25
}

調(diào)試看看它循環(huán)了多少次丹拯。

### while 循環(huán)

內(nèi)容:重復(fù)執(zhí)行一系列命令站超,一直到指定的表達(dá)式計算結(jié)果為假。
表達(dá)方式: While Expression

Expression : 任何有效的 表達(dá)式. 例如:while x < y乖酬。

比如:

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

(笑)
之后要怎么改才能跳出循環(huán)呢死相?試試看。


# 總結(jié)

主要講了三種基本的控制程序結(jié)構(gòu)構(gòu)造咬像。分別為 順序結(jié)構(gòu)算撮,選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)
選擇結(jié)構(gòu)的主要關(guān)鍵字是 if ... else
重點(diǎn)講了循環(huán)結(jié)構(gòu),循環(huán)結(jié)構(gòu)有 for 循環(huán)县昂,loop 循環(huán) 钮惠,while 循環(huán)。
for 循環(huán) 關(guān)鍵字為 for in 七芭;
還適當(dāng)?shù)闹v解了一下等號運(yùn)算符的應(yīng)用,留下了幾個問題蔑赘。比如 .= 和 “ = ” 狸驳。
適當(dāng)?shù)臄U(kuò)展了一下如何獲取用戶輸入(inputbox和ErrorLevel)。

歸納:

  • 關(guān)鍵字: if ...else 缩赛,

for ... in ... 耙箍,
loop ... , while ... 酥馍,
ErrorLevel 辩昆,
inputbox ,
OutputVar 旨袒,
:= 汁针。

如果有哪個關(guān)鍵字還不懂术辐,可以去參考手冊來詳細(xì)了解。

# 參考鏈接

相關(guān)詞條:

相關(guān)網(wǎng)站:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辉词,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猾骡,更是在濱河造成了極大的恐慌瑞躺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兴想,死亡現(xiàn)場離奇詭異幢哨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嫂便,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門捞镰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顽悼,你說我怎么就攤上這事曼振。” “怎么了蔚龙?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵冰评,是天一觀的道長。 經(jīng)常有香客問我木羹,道長甲雅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任坑填,我火速辦了婚禮抛人,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脐瑰。我一直安慰自己妖枚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布苍在。 她就那樣靜靜地躺著绝页,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寂恬。 梳的紋絲不亂的頭發(fā)上续誉,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音初肉,去河邊找鬼酷鸦。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的臼隔。 我是一名探鬼主播嘹裂,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼躬翁!你這毒婦竟也來了焦蘑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤盒发,失蹤者是張志新(化名)和其女友劉穎例嘱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宁舰,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拼卵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛮艰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腋腮。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壤蚜,靈堂內(nèi)的尸體忽然破棺而出即寡,到底是詐尸還是另有隱情,我是刑警寧澤袜刷,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布聪富,位于F島的核電站,受9級特大地震影響著蟹,放射性物質(zhì)發(fā)生泄漏墩蔓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一萧豆、第九天 我趴在偏房一處隱蔽的房頂上張望奸披。 院中可真熱鬧,春花似錦涮雷、人聲如沸阵面。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膜钓。三九已至,卻和暖如春卿嘲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夫壁。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工拾枣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓梅肤,卻偏偏與公主長得像司蔬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姨蝴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,740評論 0 38
  • 2017-7-25(九十五) 感恩 —— 記錄了一時書俊啼,給自己陪伴。 感恩 —— 早餐是一只清香脆甜的蘋果左医,促進(jìn)消...
    慢慢花開閱讀 243評論 0 0
  • 投射我兒早睡早起授帕,注意面部衛(wèi)生,臉上的毛囊炎好了浮梢,面部也光滑如初跛十。 投射我兒積極開始復(fù)習(xí)、預(yù)習(xí)秕硝,迎接開學(xué)摸底測試芥映,...
    花開生兩面閱讀 103評論 0 0