1. 善用內建函式庫
事實上 AutoIt 已提供了非常多的現有函式庫,要去調用時,必須知道那些現有函式是存在於哪些函式庫裡。而這些現有函式庫,在安裝時都已安裝於 C:\Program Files\AutoIt3\Include (筆者電腦之作業系統為 XP,AutoIt 版本為 3.3) 。而要調用這些現有的函式庫,可加上這麼一段敘述
#include <函式庫名>
以 Array.au3 為例,若要調用 C:\Program Files\AutoIt3\Include 裡面內附的 Array.au3,則這麼使用
#include <Array.au3>
其它的就是看說明書去使用 Array 這個物件(相當於 MFC 的 list-view)。這裡只簡單的加入一些項目後,將它顯示出來。測試用的原始碼如下
#include <Array.au3> ; 引入 Array.au3 函式庫
Local $Number[10]
_ArrayDisplay($Number, "加入前")
For $i=0 To 9
_ArrayAdd($Number, $i+1)
Next
_ArrayDisplay($Number, "加入後")
執行結果如下
對於執行結果與程式碼有興趣者,可先自行研究 Array.au3 之其它函式。
2. 自定義函式庫
之前我們有談到 自定義函式 的問題,一旦自己寫的函式多了起來,而且日後使用到的機會一多的話,這時便可考慮將這些自定義函式寫成一個函式庫的檔案,到時再接著引用。現在假設寫了一個 MyMath.au3,內容如下
; FileName : MyMath.au3
; ======================================
; 1+2+...+N
; ======================================
Func Sum1N($N)
Dim $i=0, $sum=0
For $i=1 To $N
$sum = $sum + $i
Next
return $sum
EndFunc
; ======================================
; 1^2 + 2^2 + ... + N^2
; ======================================
Func Sum1N2($N)
Dim $i=0, $sum=0
For $i=1 To $N
$sum = $sum + $i^2
Next
return $sum
EndFunc
; ======================================
; Swap
; ======================================
Func Swap(ByRef $a, ByRef $b)
$t = $a
$a = $b
$b = $t
EndFunc
接著若在 Sample.au3 裡面調用這個 MyMath.au3 裡面的 Swap 函式,要注意的是,這裡的 Sample.au3 和 MyMath.au3 是放在同一目錄底下。寫法如下
; FileName: Sample.au3
#include "MyMath.au3"
Dim $a = 5, $b = 10
Swap($a, $b)
MsgBox(0, "a value", "a=" & $a)
MsgBox(0, "b value", "b=" & $b)
在此注意到,include 使用角括號 「#include <...> 」和使用雙引號 「#include "..."」有所不同。使用角括號是直接只到安裝 AutoIt 時的 include 目錄底下(筆者為 C:\Program Files\AutoIt3\Include)去搜尋該 .au3 檔案,調用其函式庫;然而使用雙引號是先去現在的目錄底下搜尋該 au3 檔案。當然也有人直接把自己常用到的函式寫好,檔案直接丟到安裝目錄底下,這樣就一律都用角括號,不過這不是聰明的做法,因為自己寫的可能會有隱藏性問題而不自知。
3. 重覆 include 問題
剛我寫了一個 MyMath.au3,假設我又寫了一個 MyMath2.au3,包含了 MyMath.au3,接著 Sample.au3 又包含了 MyMath.au3 與 MyMath2.au3,關係如下整理
MyMath2.au3 -> 包含 MyMath.au3
Sample.au3 -> 包含 MyMath.au3, MyMath2.au3
這時在執行時便會發出類似這種錯誤訊息:MyMath2.au3 被重覆 include ,原因是因為所有的函式庫一次只能被 include 一次。為避免這種情形發生,於是我們在 MyMath.au3 與 MyMath2.au3 前面一律加上這種東西
#include-once
這樣便可避免掉 MyMath.au3 與 MyMath2.au3 被重覆 include 之問題。