AutoIt

v3.3.0.0

©1999-2008 Jonathan Bennett (喬納森·貝內特) & AutoIt 開發小組

此說明書 >> 中文化 BY WELLSS (附加參考： v3.1.1 版原創 yonken AutoIt v3 官方說明檔的翻譯)

AutoIt v3 主頁面

AutoIt 說明文件

  • 介紹
  • 授權協議
  • 安裝目錄
  • 常見疑問解答 (FAQ)
  • 榮譽名單
  • 歷史/ 變更記錄
  • AutoIt 和開發者的歷史
  • Wellss 中文化聲明

使用 AutoIt

  • 執行腳本
  • 在 Windows Vista 上使用 AutoIt
  • 命令行參數
  • 腳本編輯器
  • 編譯腳本
  • AutoIt 視窗訊息工具 (AU3Info)
  • 視窗標題和文字 (基礎篇)
  • 視窗標題和文字 (進階篇)
  • 控制項
  • Unicode 支援
  • 預設用途
  • AutoIt V2 使用者須知
  • 在 Windows 64-位元版本下執行

入門指南

  • 我的第一個腳本 (Hello World)
  • 簡單的記事本自動化
  • WinZip 安裝
  • 字串規則陳述式

語言相關

  • 資料類型
  • 變數
  • 巨集
  • 運算子
  • 條件陳述式
  • 迴圈陳述式
  • 函數
  • 註解

GUI 相關

  • GUI 的概念
  • GUI MessageLoop 模式
  • GUI OnEvent 模式

關鍵字相關

  • 關鍵字參照說明

巨集相關

  • 巨集清單

函數相關

  • 函數說明

附錄

  • AutoIt3 的限制/預設值
  • ASCII 字元編碼表
  • 特殊資料夾的 CLSID
  • GUI 控制項類型
  • 任意指定...字型
  • @OSLang 各國語言碼
  • Send 按鍵清單
  • 視窗訊息碼


AutoIt

v3.3.0.0

©1999-2008 Jonathan Bennett (喬納森·貝內特) & AutoIt 開發小組

AutoIt v3 主頁面

介紹

AutoIt v3 是用以編寫並生成具有 BASIC 語言類型腳本的免費軟體程式，它被設計用來在Windows GUI (使用者界面) 中進行自動化。利用它可以模擬快速鍵、移動滑鼠和視窗/控制項的互動，而這是其它語言所無法做到或尚無可靠方法實現的 (如 VBScript 和 SendKeys)。AutoIt 亦具備小巧、高度自我啟發性，及可以不受框架限制於所有 Windows 版本上執行，而且絕不會有煩人的 "runtimes" 的編寫需要！

AutoIt 最初是為 PC 的 "批次處理" 而設計，用於對數千台 PC 進行同樣的設定，不過隨著 V3 版本的到來至今，它已成為一套支援複雜運算式、使用者函數、迴圈，並可符合資深腳本編寫人員期待以應付各種需求的強大腳本語言。

主要特色：

  • 類似- BASIC 語言且很容易學習
  • 可模擬按鍵敲擊及滑鼠動作
  • 可操作視窗及處理程式
  • 可與所有視窗控制項互動
  • 腳本可被編譯成獨立的單一執行檔
  • 建立 Graphical User Interfaces (GUIs) 視窗介面
  • COM 的支援
  • 規則陳述式
  • 直接呼叫外部 DLL 及 Windows API 函式庫
  • 可腳本化 RunAs 函數
  • 鉅細彌遺的說明書及龐大社群論壇基礎支援
  • 相容於 Windows 95 / 98 / ME / NT4 / 2000 / XP / 2003 / Vista / 2008 等系統
  • 支援 Unicode 及 x64
  • 讓人放心的數位化簽署
  • 與 Vista 的 User Account Control (UAC) 元件的互動

AutoIt 被設計得盡可能短小精悍且不用依賴外部 DLL 檔或新增登錄碼即可獨立執行。使用 Aut2Exe 這個工具即可把腳本檔案編譯為可獨立執行的檔案。

我們還更新了 AutoIt 呼叫 AutoItX 的已模組化 COM 及 DLL 版本，AutoItX 將使得您可以加入一些 AutoIt 獨有的特性到您最常用的腳本語言或程式設計語言中去！

請檢視 AutoItX 的說明檔案 (開始 \ 所有程式 \ AutoIt v3 \ Extras \ AutoItX \ AutoItX Help File) 取得更多資訊和範例。

最重要的是，AutoIt 仍將保持為 免費軟體 --不過若您打算支援我們花在此工程和網站主電腦上的時間、費用以及所作努力的話，那麼您可以到AutoIt 的 主頁 捐贈給我們。

詳細特色

Basic 語言類型及豐富的函式庫設定

AutoIt 具備 BASIC 語言類型，此意味大部份的人只要曾經撰寫過腳本或使用高階語言，將會很容易對它上手。

雖然它最初目地僅在於簡單的自動化工具，如今 AutoIt 擁有函式庫及各種功能，使的它被當成通用的腳本語言被使用。 (如您所料就跟神奇的自動操作一樣！)。語言功能內含：

  • 常見的高階函數功能類型，如迴圈、運算式分析。
  • 豐富眾多的字串處理功能以及相容於 Perl 規則陳述式編譯引擎 (使用了 PCRE 函式庫)。
  • COM 的支援。
  • 呼叫 Win32 及第三方 DLL APIs。

具備語法高亮功能的組建編輯器

AutoIt 帶來了可自訂 SciTe 的 "LITE" 版，屆時編輯將更為輕鬆。 使用者也可以 下載完整的 SciTe 版本 它還附加了外掛套件工具以簡化編輯工作。

獨立小巧且精悍

AutoIt 是一種小巧且不依靠於大量Runtimes 語言如 .NET 或 VB 的單獨程式。 你所需要執行的 AutoIt 腳本套件就是 AutoIt 執行檔 (AutoIt3.exe) 和腳本。 編寫好的腳本也可以腳本組建編譯器 Aut2Exe 編譯成 獨立的可執行檔案。

國際化 64-位元 版本的支援

AutoIt 是完完全全的 Unicode 且亦內含了 x64 版本所有的主要元件！ 至於其它數之不清的眾多腳本語言你舉例的出嗎？

模擬鍵盤和滑鼠動作

我們花了許多時間用在對鍵擊和滑鼠動作的模擬功能的最佳化上， 使其在目前所有的作業系統上都可以做到盡可能的精確。 在這一版本中滑鼠動作的功能也表現得更像 「人類」了， 甚至可以用來建立靈活的示範腳本。所有模擬滑鼠和鍵盤動作的程式 在模擬動作的 "速度" 及其它功能上都是高度可自訂的。

視窗動作管理

您可以對視窗進行搬移、隱藏、顯示、調整大小、啟動、關閉以及其它所有 您想要實現的動作。視窗還可以利用標題、視窗文字、大小、位置、類型，甚至 系統內建的 Win32 API 控制碼來互相關聯。

控制項

直接取得編輯框、複選框、清單框、選擇框、按鈕、狀態列上的訊息， 並且作用於這些控制項而不必擔心按鍵動作落空。 甚至還可以作用於非活 動視窗上的控制項！

圖形使用者介面 Graphical User Interfaces (GUI)

AutoIt v3 可以讓你依照需求建立一些複雜的GUI介面 - 像下面的範例！

還有很多很多...


軟體授權協議

AutoIt v3

作者 : Jonathan Bennett 及 AutoIt 開發小組
WWW : http://www.autoitscript.com/autoit3/
Email : support@hiddensoft.com
________________________________________________________

※ 重要需知 - 請認真閱讀

此《最終使用者授權協議》("EULA") 是您（個人或單一實體）與此軟體的作者之間有關本《協議》隨附的軟體達成的法律協議，其中內含電腦軟體，並可能內含相關媒介、印刷資料、“線上網路”或電子郵件所取得的 “軟體”。您一旦安裝、複製或以其他方式使用“軟體”時，即表示您同意接受本《協議》各項條款的約束。如果您不同意此《協議》中的條款，請不要安裝或使用“軟體”。

軟體產品授權協議

本軟體受版權法、國際版權公約、其它知識產權法及條約的保護。本軟體僅提供使用授權，並不出售。

本軟體產品的定義還內含由此軟體生成的檔案，如已編譯的可獨立執行腳本檔案。

1. 授權許可

本協議授予您如下權利：

安裝並使用，您可安裝並使用無限制數量的軟體副本。

複製和分發，您可以複製和分發傳播無限制數量的軟體副本；但您必須保證每一份副本都必須是真實和完整的，內含所有有關本軟體產品的版權和商標聲明，同時還必須內含一份本協議的副本。被分發的本軟體產品的副本既可以是單獨的一份也可以內含您自己的產品。

商業用途，您可以以營利為目的販售或自由分發由此軟體產品生成的腳本和/或編譯腳本。

2. 版權

本軟體產品(內含但不限於本軟體產品中所含的任何圖像、照片、動畫、視訊、音訊、音樂、文字和附加程式(applets))、隨附的印刷材料、及本軟體產品的任何副本的一切所有權和知識所有權，均由此軟體的作者擁有。此“軟體產品”適用被版權或其它國際公約保護。因此，您必須將此視同其它軟體一樣是有版權的。

雜項

如果您是在 (大不列顛) 聯合國 (英國) 取得產品，則此協議受英國法律的制約。

如果是在英國境外取得產品，則可能適用當地的法律。

若您對此協議有任何疑問，或是您有任何原因需要與此軟體的作者聯絡，請利用在協議上方提供的電子信箱位址與他/她通訊。

有限保證

1. 無保證

本軟體的作者明確聲明對本軟體產品不提供任何保證。本軟體和任何相關檔案均照“原樣”提供，但不附帶任何形式、明示或暗示的保證，內含但不限於針對特定目的、暗示的保證、適銷性或適用性。由於使用或執行本軟體所導致的全部風險均由您自己承擔。

2. 對造成的損失不負任何責任

本軟體的作者絕不對任何由於使用或無法使用本軟體產品所導致的損害（內含但不限於商業利潤的損失、業務中斷、業務資訊消失或任何金錢損失等所造成的損害）承擔責任，即使本軟體的作者已經被告知可能發生這些損害。由於某些國家和管轄區不允許排除或限制對間接或意外損害的責任，以上限制可能對您不適用。

[授權書結束]


Wellss 中文化聲明

Wellss 中文化聲明 (Wellss's License Announcement)

AutoIt v3 原文說明書中文化

  • 作者：BY Wellss 獨立翻譯，並參考 yonken V3.1.1 原創說明書

  • WWW： 網際論壇中文化研發區 (http://www.centurys.net/forumdisplay.php?fid=76&)

  • Email：請用 巴哈姆特信箱 與我連絡！

    • ＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
    ＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

    ※ 重要事項 - 台灣翻譯著作權法說明（IMPORTANT NOTE - TAIWAN'S Copyright doc）

    第一章　總則
    十、改作︰ 指以翻譯、編曲、改寫、拍攝影片或其他方法就原著作另為創作。

    第五十五條 非以營利為目的，未對觀眾或聽眾直接或間接收取任何費用，且未對表演人支 付報酬者，得於活動中公開口述、公開播送、公開上映或公開演出他人已公開發表之著作。

    第六十三條 依第四十四條、第四十五條、第四十八條第一款、第四十八條之一至第五十條 、第五十二條至第五十五條、第六十一條及第六十二條規定得利用他人著作者，得翻譯該 著作。
    依第四十六條及第五十一條規定得利用他人著作者，得改作該著作。

    第五十一條 供個人或家庭為非營利之目的，在合理範圍內，得利用圖書館及非供公眾使用 之機器重製已公開發表之著作。

    第五十九條 合法電腦程式著作重製物之所有人得因配合其所使用機器之需要，修改其程式 ，或因備用存檔之需要重製其程式。但限於該所有人自行使用。

    第六十條 合法著作重製物之所有人，得出租該重製物。但錄音及電腦程式著作之重製物， 不適用之。
    附含於貨物、機器或設備之電腦程式著作重製物，隨同貨物、機器或設備合法出租且非 　該項出租之主要標的物者，不適用前項但書之規定。

    第六十五條 著作之合理使用，不構成著作財產權之侵害。

    著作之利用是否合於第四十四條至第六十三條規定或其他合理使用之情形，應審酌一切情狀，尤應注意下列事項，以為判斷之標準：
    //////////////////////////////////////////////////////
    一、利用之目的及性質，包括係為商業目的或非營利教育目的。
    二、著作之性質。
    三、所利用之質量及其在整個著作所占之比例。
    四、利用結果對著作潛在市場與現在價值之影響。
    //////////////////////////////////////////////////////

    第六十六條 第四十四條至第六十三條及第六十五條規定，對著作人之著作人格權不生影響。

    第八十七條 有下列情形之一者，除本法另有規定外，視為侵害著作權或製版權：
    //////////////////////////////////////////////////////
    一、以侵害著作人名譽之方法利用其著作者。
    二、明知為侵害著作權或製版權之物而散布或意圖散布而陳列或持有或意圖營利而交付者。
    三、輸入未經著作財產權人或製版權人授權重製之重製物或製版物者。
    四、未經著作財產權人同意而輸入著作原件或其重製物者。
    五、明知係侵害電腦程式著作財產權之重製物而仍作為直接營利之使用者。
    //////////////////////////////////////////////////////

    第一百十二條 中華民國八十一年六月十日本法修正施行前，『翻譯』受中華民國八十一年 六月十日修正施行前本法保護之外國人著作，如未經其著作權人同意者，於中華民國八十 一年六月十日本法修正施行後，除合於第四十四條至第六十五條規定者外，不得再重製。

    前項翻譯之重製物，於中華民國八十一年六月十日本法修正施行滿二年後，不得再行銷售。

    ________________________________________________________

    關於此翻譯文件 (About This doc)

    此說明書及其下中文化的檔案，均為個人 WELLSS 獨立翻譯而成，中文化之內容雖可以自由修改，但請勿修改個人之中文化ID以為己有，否則將以侵權論之。
    此份說明書及其正體(繁體)中文化檔案，個人授予您如下權利：

    1. 授權許可
    此份說明書相關內容如有發現翻譯錯誤及不恰當之處，允許您照原文文意修改並校訂為適當之意思，這方面沒有嚴格之限制，立意之精神為給 AUTOIT 使用者能有一個方便親切的中文化環境，如有須修改之處請依如下格式修改中文化 ID 相關內容，例如：
    正體修改：XXXXXX 原中文化：WELLSS

    2.複製和分發
    您可以散佈無限制數量的中文化檔案、包括中文說明書在內，然簡體原作者之內容請先經過原作者許可，對於此份正體中文化的版本及此份說明，您是可以自由修改文字內容及相關語意的，除 ID 則外。
    也許個人翻譯有諸多舛漏不當之處，也請各位先進能夠賜教，並補足內容不恰當須修改之處以為籌。

    3.商業用途
    原官方授權已明確聲明所產生之腳本跟相關執行檔，都可以做商業化用途使用，而除了此份文件及其個人中文化之原程式檔案 (包括修改過內容、中文化 ID 訊息等重製、改作文件及檔案)，其餘「因撰寫腳本所產生的腳本、及編譯產生的 EXE 檔」包括個人編譯過的〈AutoItSC.bin〉檔案，均可以做自由分發及商業販售用途 (.bin 檔同屬原檔不得單獨出售)。
    〈AutoItSC.bin〉檔案雖為 AUTOIT 用來編譯腳本的可執行主體 (stub)，不過個人亦不允許您任意將其 ID 去除、或做任何型式的修改，除合於第 1 項授權許可之內容則外。

    ________________________________________________________

    免責聲明 (Disclaimer Announcement)

    此份說明書及其相關的 V3.3.0 檔案均為本人閒暇抽空所翻譯而成，因此由閱讀並實作所產生之後果及影響，恕個人不予負責及承擔相關責任，不過非常歡迎您將受到之損害及其發生原因 (需明確與個人之翻譯內容有關)，透過巴哈告知我，如此個人才會知道是何處翻譯錯誤、或某處過度翻譯造成的 BUG。若是原檔案即有這類的問題，則歸屬官方其修改之權責，即使它還是保持為免費軟體 ;)

    1. 意外和損失
    個人不負責但有意願傾聽您的問題，因個人之檔案所造成的損失及意外、賠償皆非其翻譯及 AUTOIT 官方之責任，一切的風險還是由使用者承擔。

    2. 翻譯之不當及謬誤
    任何因為翻譯所衍生的疑問，建議您參考原文檔案，雖個人已盡力將翻譯作品照原文做過對照，不過某些內容 (如函數的簡介描述) 有參考 yonken 之翻譯以確認是否有不當之處並詳加考核，不過個人不排除有許多需修改及翻譯錯漏之處，尤其是更新歷史部份，可能某些因素跟原文對照下，許多地方可能有某種程度的翻譯失誤，請別吝於告知及彙整成清單、或修改說明內容給我參考，感謝不盡。

    ________________________________________________________

    附加 yonken V3.1.1 原創說明書內的授權文件，僅供參考： 特別聲明（Special Announcement）。

    Translated by Wellss (Released: 2009-06-05)
    This is the Chinese Transitional language edition of AutoIt (v3.3.0) helpfile

    [License Announcement END]


安裝目錄結構

安裝目錄結構 (Install Directory Structure)

AutoIt 安裝管理員所建立的目錄結構 (通常位於：\Program Files\AutoIt3) 摘要於下方表格所示。安裝程式還建立了開始選單捷徑，除此之外就沒有新增或修改其餘檔案了。
檔案和目錄 |  | 詳細說明
(根目錄檔案)
AutoIt3.exe |  | AutoIt 主程式檔案，只要有這檔案就能執行腳本！
AutoIt3_x64.exe |  | AutoIt 的 x64 版本檔案 (若有裝的話)。
AU3Info.exe |  | AutoIt 視窗訊息工具。
AU3Info_x64.exe |  | Au3Info 的 x64 版本檔案 (若有裝的話)。
AU3Check.exe |  | AutoIt 的語法檢查器。
AutoIt.chm |  | 用來連結 AutoIt3.chm 和 UDFs3.chm 的說明檔。
Uninstall.exe |  | AutoIt 的反安裝程式。
AutoIt v3 Website.url |  | 連結到 http://www.autoitscript.com/autoit3/ 網站的捷徑。
Aut2Exe
 | Icons\ | 用於 Explorer 檔案管理員內的 au3 檔案類型圖示。
 | Aut2Exe.exe | 腳本編譯器。
 | Aut2Exe_x64.exe | Aut2Exe 的 x64 版本檔案 (若有裝的話)。
 | AutoItSC.bin | 用來編譯腳本的可執行主體 (stub)。
 | AutoItSC_x64.bin | 用來編譯腳本的可執行主體 x64 版 (stub)。
 | UPX.exe | UPX 加殼器 (用來縮小 *.exe 檔案體積)。
Examples (範例)
 | GUI\ | 內含 AutoIt 的 GUI 撰寫範例。
 | Helpfile\ | 內含說明檔的所有範例腳本。
Extras (其它)
 | AutoUpdateIt\ | 內含可簡單收到 AutoIt3 最新版的腳本工具。
 | Editors\ | 內含為主流文字編輯器所定義的語法色彩。
 | Exe2Aut\ | 內含將已編譯腳本轉換回原始碼的工具。
 | SQLite\ | 內含 SQLite 命令行執行檔和說明檔。
 | v2_to_v3_Converter\ | 內含將 v2.64 腳本轉換為 AutoIt v3 語法的工具。
Icons (圖示)
 | 用於 Explorer 檔案管理員內的 au3 檔案類型圖示。
Include
 | 內含標準的 include 檔案 (預先寫好的使用者函數)，請見 Library 函數。
AutoItX
 | 內含 AutoIt v3 的 DLL 版本，該檔案利用 ActiveX/COM 和 DLL 介面提供了功能子集。
SciTe
 | 內含 SciTe 的 light 版，用來做著色語法。

這裡要強調一點：要執行 AutoIt 腳本的話，只要有 AutoIt3.exe 就夠了。如您將腳本編譯成執行檔，那麼使用者完全不須安裝 AutoIt 就能用編譯檔。

(例外：在 Windows NT 4 環境下，PSAPI.dll 檔必須在路徑中或 AutoIt 目錄下，這是因為 Process...() 等相關函數要有它才能工作)

登錄機碼

AutoIt 安裝程式所建立的機碼都位於 HKEY_LOCAL_MACHINE\Software\AutoIt v3 和 HKEY_CURRENT_USER\Software\AutoIt v3 登錄下。當在沒有完整安裝過 AutoIt 的系統中執行，這些機碼是「不存在」的 -- 也是說對系統服務而言，AutoIt 的執行是 "很乾淨的"。

下列表格所示的是預設值 (或典型的) 登錄碼，斜體字型 (italic) 機碼在安裝時不會被建立，不過在第一次執行對應工具後就會出現：
HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\
AutoIt
 | (預設值) | REG_SZ | (數值未設定)
 | InstallDir | REG_SZ | C:\Program Files\AutoIt3
 | Version | REG_SZ | 版本編號
HKEY_CURRENT_USER\Software\AutoIt v3\
Aut2Exe
 | (預設值) | REG_SZ | (數值未設定)
 | AllowDecompile | REG_DWORD | 0x1
 | LastCompression | REG_DWORD | 0x2
 | LastExeDir | REG_SZ | 我的文件
 | LastIcon | REG_SZ |
 | LastIconDir | REG_SZ | C:\Program Files\AutoIt3\Aut2Exe\Icons
 | LastScriptDir | REG_SZ | 我的文件
AutoUpdateIt
 | (預設值) | REG_SZ | (數值未設定)
 | DoneOption | REG_SZ | 通知
 | DownloadDir | REG_SZ | C:\Downloads\ForExample\
Exe2Aut
 | (預設值) | REG_SZ | (數值未設定)
 | LastExeDir | REG_SZ | C:\ForExample\
 | LastScriptDir | REG_SZ |
AU3Info
 | 預設值 | REG_SZ | (數值未設定)
 | AlwaysOnTop | REG_DWORD | 0x1
 | ColorMode | REG_DWORD | 0x1
 | CoordMode | REG_DWORD | 0x1
 | HighlightColor | REG_DWORD | 0x0
 | HighlightControls | REG_DWORD | 0x1
 | Magnify | REG_DWORD | 0x0
 | WinH | REG_DWORD | 0x01c2
 | WinW | REG_DWORD | 0x012c
 | WinX | REG_DWORD | 0x0064
 | WinY | REG_DWORD | 0x0064


AutoIt

常見疑問解答 (FAQ)

這一部分將列出在 論壇 裡經常會被問到的問題。如果您在此處仍不能找到想要的答案，那麼 論壇 將會是您第一個應該去的地方。

問題

1. 為什麼AutoIt v2.64的舊版腳本不能在v3下執行？

2. v3版本會不會比前一版本更難掌握？

3. 怎樣把v2.64版的腳本檔案轉換成v3版本？

4. "goto" 指令到哪去了？

5. 怎樣在 AutoIt 中執行 DOS 程式？

6. 為什麼只能用 Run() 指令來執行.exe 和 .com 檔案？ 對於.msi / .txt 還有其它格式的檔案該怎樣做呢？

7. 為什麼當我嘗試使用雙引號 (") 的時候會發生錯誤？

8. 究竟視窗 "標題" 和 "文字" 參數的意思是什麼？

9. 為什麼不能使用 "我的變數是 $variable" 來輸出變數？

10. 當我使用Send()指令來輸出變數時發生奇怪的事情？

11. 返回值和@error究竟有什麼不同？

12. 怎樣使用快速鍵來離開腳本？

13. 編譯腳本時怎樣自訂圖示？

14. 怎樣才能確保只有一個腳本案例執行？

15. 目前 AutoIt v3 有什麼技術上的局限嗎？

16. 我在說明檔下的範例僅看到圖片遺失的叉燒包？

1. 為什麼AutoIt v2.64的舊版腳本不能在v3下執行？

v3 具有不同於v2.64的語言結構。

AutoIt的前一個版本能很方便地應付它被設計用以滿足的需求--編寫簡單的腳本來實現軟體的自動安裝。 但是隨著發展人們開始需要使用它來進行更加常見且更為複雜的腳本工作。 舊有的語法和結構雖然還是可以實現這些想法，但編寫起來卻非常的困難而且麻煩。 於是我們決定要改進 AutoIt 使其更加適合常見的自動化任務並且可以成為更標準且類似BASIC的語言。這就意味著如果您已經懂得腳本語言的編寫的話，那麼您就能很快地掌握 AutoIt v3。

回到頂端

2. v3版本會不會比前一版本更難掌握？

當然不是。 事實上在很多情況下它比起前一版本更容易學習，因為您不需要再嘗試強迫讓此語言去完成它原本未被設計實現的工作。 此外它還使用了我們所熟悉類似BASIC的語言，而BASIC正是由於它的...嗯...簡單和易用性而聞名:)

絕大多數的AutoIt腳本都是用在軟體安裝以及在許多對話框中點選 "下一步"。 大部分的這些腳本都可以簡單地利用新增一對小括號到特定字串即可轉換為v3版本。 下面就是一個示範，分別示範了在v2和v3中的腳本（模擬一連串 下一步(N) 和 完成(F) 按鈕的對話框的軟體安裝）：

; v2.64 腳本
WinWaitActive, 歡迎, 歡迎使用XSoft安裝程式
Send, !n
WinWaitActive, 選擇安裝目地資料夾, 請選擇
Send, !n
WinWaitActive, 已準備好安裝, 點 [下一步] 開始進行安裝
Send, !n
WinWaitActive, 安裝完成, 點 [完成] 離開安裝程式
Send, !f
WinWaitClose, 安裝完成

; v3 腳本
WinWaitActive("歡迎", "歡迎使用XSoft安裝程式")
Send("!n")
WinWaitActive("選擇安裝目地資料夾", "請選擇")
Send("!n")
WinWaitActive("已準備好安裝, "點 [下一步] 開始進行安裝")
Send("!n")
WinWaitActive("安裝完成", "點 [完成] 離開安裝程式")
Send("!f")
WinWaitClose("安裝完成")

看來不是太難！:) 由於所有的 "字串" 都附上了引號，因此您再也不用受到由文字頭部和尾部的空格引起的問題困擾了。 同時還有個非常爽的好處就是可以支援許多 文字編輯器 ，因此在編寫v3腳本時就可以有語法高亮提示了，這使得腳本的編寫更容易。

回到頂端

3. 怎樣把v2.64版的腳本檔案轉換成v3版本？

其實您要先問自己一個問題 "有必要轉換腳本嗎？"。 我們將繼續提供v2.64的下載和支援，因此不必僅僅為了升級而升級--除非您非要這麼做:)

本說明檔案中有一節專門說明了v2和v3版本指令的不同點--請點選 這裡 檢視該頁。

AutoIt v3的一個作者已經編寫了一個用來自動轉換v2腳本為v3版本的工具。 這一轉換是非常完美的，除非您的代碼到處都含有goto指令:) 您可在 "Extras" 目錄找到此轉換工具（開始 \ 所有程式 \ AutoIt v3 \ Extras--或是到AutoIt v3的安裝目錄中尋找）。

回到頂端

4. "goto" 指令到哪去了？

失蹤了，呵呵。 很不幸。 噢不，您不能問為什麼--反正就是這樣。 這就像是在電影 時間劫匪（Time Bandits） 結尾時他們在微波發現的那塊石頭:)

AutoIt v3 以使用現今大部分常用的 "迴圈" 為特色，因此Goto不再是必需的。 請檢視 While, Do, For, ExitLoop, ContinueLoop 以及 函數 瞭解更加進階的解決模式:) 另外當你看說明檔案的時候，請檢視 迴圈＜loops＞, 條件判斷陳述式 以及 函數. 部分的說明。我向您保證，一旦您熟悉了它們的用法，實際上您將能在幾分鐘內用其它語言編寫程式。

為了讓你開始瞭解這一點，下面示範在2.64版中Goto的最基本用法，同時也是個無限迴圈：

:mylabel
...執行一些任務...
...其它任務...
goto, mylabel

v3 版中一個總是 "true（運算式成立）" 的簡單的While迴圈。

While 1 = 1
...執行一些任務..
...其它任務...
Wend

回到頂端

5. 怎樣在 AutoIt 中執行 DOS 程式？

如果您想要執行類似 "dir" 這樣的DOS指令，那麼您必須利用指令解譯程式。（command.com 或 cmd.exe，決定於您使用的作業系統） @Comspec（指向指令解譯器的全路徑）這個巨集指示了此檔案的準確位置。 您應該使用 RunWait() 函數來令腳本在DOS程式結束後才繼續執行下一行指令。 下面是一個示範，示範了使用DOS的Dir指令來顯示C:硬碟下的檔案。

（等同於使用 command.com /c Dir C:\ 指令）

RunWait(@COMSPEC & " /c Dir C:\")

回到頂端

6. 為什麼只能用 Run() 指令來執行.exe 和 .com 檔案？ 對於.msi / .txt 還有其它格式的檔案該怎樣做呢？

只有少數檔案是 "可執行" 的--通常這些檔案是.exe, .bat, .com, .pif。 其它類型的檔案如.txt 和 .msi實際上是借助其它程式來執行的。 比如當您按兩下 "myfile.msi" 檔案的時候，實際上在後台執行的指令是 "msiexec.exe myfile.msi"。 所以要在AutoIt中執行一個.msi檔案就需要這樣做：

RunWait("msiexec myfile.msi")

或是用更簡單的方法，就是使用 "start" 指令，它會自動為您處理這個檔案：

RunWait(@COMSPEC & " /c Start myfile.msi")

或是使用 ShellExecuteWait 函數指令， 它會自動為您執行這個檔案：

ShellExecuteWait("myfile.msi")

回到頂端

7. 為什麼當我嘗試使用雙引號 (") 的時候會發生錯誤？

如果您想要在字串裡面使用雙引號，那麼您必須連續使用兩次雙引號。 也就是說每次您要使用引號就應該使用兩對。 例如，如果您想要設定一個變數為這樣的字串：此句中 "這個詞" 是有引號的！ 那麼您應該做的是：

$var = "此句中 ""這個詞"" 是有引號的"

或是使用單引號也可以：

$var = '此句中 "這個詞" 是有引號的！'

回到頂端

8. 究竟視窗 "標題" 和 "文字" 參數的意思是什麼？

關於這個問題 這裡 有詳細的說明。

回到頂端

9. 為什麼不能使用 "我的變數是 $variable" 來輸出變數？

如果有個變數為$msg而您想要在對話框（MsgBox）中輸出這一變數，那麼下面這種做法是錯誤的：

MsgBox(0, "示範", "我的變數是 $msg")

實際上它會輸出 我的變數是 $msg。 您要做的應該是使用 & 運算子 把字串和變數連結起來（成為新的字串）：

MsgBox(0, "示範", "我的變數是" & $msg)

注意：如果您有很多變數需要新增到某個字串當中，那麼您會發現 StringFormat() 函數將是非常有用的。例如，如果我想要在某個字串中插入$var1 到 $var5 這五個變數，那麼更簡單的方法就是這樣了：

$msg = StringFormat("變數1是 %s, 變數2是 %s, 變數3是 %s, 變數4是 %s, 變數5是 %s", $var1, $var2, $var3, $var4, $var5)

MsgBox(0, "示範", $msg)

回到頂端

10. 當我使用Send()指令來輸出變數時發生奇怪的事情？

如果您要 輸出 變數的內容，那麼請小心檢查它是否含有 ! ^ + {SPACE} 這樣的特殊的傳送字元，因為它們將會被解釋為特殊的鍵擊動作--而這很少會是我們希望它做的。 要克服這一問題，請使用 Send() 的 RAW 原文模式，這樣就不會解譯這些特殊按鍵了：

Send($myvar, 1)

回到頂端

11. 返回值和@error究竟有什麼不同？

一般來說返回值是用來指示某個函數的成功執行。 但是，如果某個函數因為其它的需要已經返回了一些值（比如 WinGetText() ），那麼我們就需要找到一種方法來確定函數是否成功執行，因此我們用 @error 來代替。

回到頂端

12. 怎樣使用快速鍵來離開腳本？

噢 ，總算遇到一個比較簡單的問題了。如果您想要在按下某個按鍵組合後可以離開腳本，那麼請使用 HotKeySet() 函數來設定指定按鍵被按下後執行的使用者函數。 這個使用者函數應該僅含有 Exit 關鍵字。

下面這些腳本示範的是在按下CTRL+ALT+X 後離開腳本：

HotKeySet("^!x", "MyExit")
...
...
; 其它編碼
...
...
Func MyExit()
Exit
EndFunc

回到頂端

13. 編譯腳本時怎樣自訂圖示？

您需要執行編譯程式（如果是右鍵點選腳本然後選擇編譯則不行）來編譯腳本。 關於這個問題 這裡 有更詳細的細節說明。

回到頂端

14. 怎樣才能確保只有一個腳本案例執行？

最簡單的方法是在腳本首次執行時重新命名（隱藏的）AutoIt視窗標題。然後在同一腳本中檢查該視窗標題是否存在--如果存在則說明另外一個腳本副本正在執行。

; 請置於腳本頂端
$g_szVersion = "My Script 1.1"
If WinExists($g_szVersion) Then Exit ; 此腳本已經執行了
AutoItWinSetTitle($g_szVersion)
; 下面是其它腳本碼

回到頂端

15. 目前 AutoIt v3 有什麼技術上的局限嗎？

下面詳細列出目前AutoIt在技術上的局限。要注意的是，一些所謂的限制其實是理論上的，因此往往在能達到實際限制之前您就會碰有關效能和記憶體的問題。

腳本單行最大長度：4,095
字串最大長度： 2,147,483,647 字元

數字範圍（浮點）：1.7E–308 到 1.7E+308 有 15 位元的精確度。
數字範圍（整數）： 64 位元帶符號整數
十六進位數目： 32 位元帶符號整數（0x80000000 到 0x7FFFFFFF）

群組 (Array)： 最大64位元範圍 和/或 共1600萬組類別
返回函數能夠呼叫的最大深度： 5100 層

能夠同時使用的變數最大數量： 沒有限制
使用者定義函數的最大數量： 沒有限制

GUI視窗的最大數量： 1024
每個視窗中的GUI控制項的最大數量：65532

回到頂端

16. 我在說明檔下的範例僅看到圖片遺失的叉燒包？

這個應是你用開啟按鈕來開啟說明檔中的範例造成的。
此問題主要是因為 hhctrl.ocx 並未登錄註冊或該檔不正確。
請嘗試在指令行提示下執行 "regsvr32 hhctrl.ocx"，並確認該檔案是否仍舊有作用。

回到頂端


使用 AutoIt

使用 AutoIt (Using AutoIt)

  • 執行腳本
  • 在 Windows Vista 上使用 AutoIt
  • 命令行參數
  • 腳本編輯器
  • 編譯腳本
  • AutoIt 視窗訊息工具 (AU3Info)
  • 視窗標題和文字 (基礎篇)
  • 視窗標題和文字 (進階篇)
  • 控制項
  • Unicode 支援
  • 預設用途
  • AutoIt 2.64 使用者須知
  • 在 Windows 64-位元版本下執行


執行腳本

執行腳本 (Running Scripts)

當您使用 AutoIt 的時候，會被詢問要開啟哪個 腳本檔。腳本檔是一個內含 AutoIt 關鍵字和函數的純文字檔案，以告知 AutoIt 您要它做什麼。腳本可以用簡單的文字編輯器像 notepad.exe 或更方便的 第二種選擇 來建立。

雖然 AutoIt v3 腳本只是純文字檔，但我們通常會給它副檔名 *.au3 跟其它的腳本和文字檔做區別。如果您已完整安裝好 AutoIt，只要在它上面點兩下就可以執行了。當然也有其它的開啟方式可以選擇，如在 .au3 檔案上點一下右鍵，就可以直接開啟、編輯、或編譯腳本。

這裡是一個簡單的範例，請注意一下 ; 是用來做註解的 (跟 DOS 批次檔的 REM 指令很像)：

; 這是我的第一個腳本
MsgBox(0, "我的第一個腳本!", "Hello World!")

更複雜一點的腳本可能會用到使用者函數 (Func)，通常是放在腳本最後面，這裡是一個較簡單、使用函數的腳本：

; 這是我的第二個腳本 (用到 Func 函數)
MsgBox(0, "我的第二個腳本！", "您好 - 該文字來自主腳本！")
TestFunc()

Func TestFunc()
MsgBox(0, "我的第二個腳本！", "您好 - 該文字來自使用者函數！")
EndFunc

命令行參數

當使用命令行參數在您的 AutoIt 腳本內傳遞時，會初始化一個特別的 $CmdLine 群組。請注意腳本名稱跟 ; 參數一樣，都不被算在裡面，因此會換成 @ScriptName 來取得這個資訊。內含空格的參數，必須以 "雙引號" 括住。已編譯 的腳本也是用相同的方式來存取命令行的。

$CmdLine[0] 是參數的編號
$CmdLine[1] 是參數 1 (在腳本名稱後)
$CmdLine[2] 是參數 2 ...等等
...
$CmdLine[$CmdLine[0]] 是取得最後一個參數的其中一種方法...

所以您的腳本執行起來會像這樣：

AutoIt3.exe myscript.au3 參數1 "這是另一個參數"

$CmdLine[0] 等於... 2

$CmdLine[1] 等於... 參數1

$CmdLine[2] 等於... 這是另一個參數

@ScriptName 等於... myscript.au3

除了 $CmdLine 之外，還有一種叫 $CmdLineRaw 的變數，它包含未被分割的完整命令行，所以像上面的例子就是：

$CmdLineRaw 等於... myscript.au3 參數1 "這是另一個參數"

如果腳本已被編譯，則執行起來會像這樣：

myscript.exe 參數1 "這是另一個參數"

$CmdLineRaw 等於... 參數1 "這是另一個參數"

請注意一下 $CmdLineRaw 只有將參數返回而已。

請注意：$CmdLine[...] 只能返回 63 個參數，不過 $CmdLineRaw 永遠會將整個命令行返回。

指定 AutoIt 命令行切換參數

格式 1：AutoIt3.exe [/ErrorStdOut] [/AutoIt3ExecuteScript] 檔案 [參數 ...]
執行一個 AutoIt3 腳本檔。

/ErrorStdOut 允許將致命錯誤訊息重新導向至 StdOut，該參數可以被 Scite 編輯器這類的應用程式擷取，這個切換參數可以在編譯腳本上執行。

[示範] 要執行一個標準的 AutoIt 腳本檔 'myscript.au3'，請使用命令行：
'AutoIt3.exe myscript.au3'

格式 2：Compiled.exe [/ErrorStdOut] [參數 ...]
以 Aut2Exe 編譯產生出一個 AutoIt3 腳本檔並執行。

格式 3：Compiled.exe [/ErrorStdOut] [/AutoIt3ExecuteScript] 檔案 [參數 ...]
利用已編譯的 AutoIt3 腳本檔去執行另一個腳本，這麼一來您就不需要在編譯檔內 fileinstall 另一份 AutoIT3.exe 副本了。

格式 4：AutoIt3.exe [/ErrorStdOut] /AutoIt3ExecuteLine "命令行"
執行一段程式碼。

[示範] 要執行腳本內的某一行程式碼，請使用指令：
Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(0, ''Hello World!'', ''嗨！'')"')

當使用 /AutoIt3ExecuteLine 參數時，常駐圖示是不會出現的。

請注意：正確地使用 - 單引號 - 和雙引號 - 將它們搭配好是非常重要的，甚至 兩個單引號 也是一樣。


在 Windows Vista 上使用 AutoIt

Windows Vista 導入了新的安全性特色，限制使用者在執行程式的時候，需要有適當的系統管理員權限(administrative)。每個系統管理使用者在每次執行程式時都會被提示，才能進行某些系統管理員動作 (像是寫入登錄碼 HKEY_LOCAL_MACHINE 或寫入 C:\Windows 資料夾)。這個互動叫做：User Account Control (UAC) -使用者帳戶控制。

預設的 AutoIt 腳本會以標準使用者權限執行，不過我們已為 AutoIt 編寫出腳本寫入器選項，將某個腳本 "標記" 起來，讓它告訴 AutoIt 是否能以完整的管理員權限執行。

要強制腳本允許以適當的系統管理員權限執行，需加入 #requireadmin 函數在您的腳本頂端，如下：

; 此腳本需要完整的系統管理員權限
#requireadmin

MsgBox(0, "訊息", "此腳本擁有系統管理員權限！")

當執行 AutoIt 的時候會檢查它是否已有完整的管理員權限，並導致作業系統彈出 "UAC 互動" 提示使用者需要權限。如使用者不提供權限則腳本將立即終止。

UAC 互動

當以系統管理員執行程式的時候，Vista 將彈出該提示如下。顯示提示的類型將依照使用者是 "標準使用者" 還是 "系統管理員" 而定 (請記得每個系統管理員都需要提升權限才能進行管理員動作)。請注意：此提示是針對已數位化簽署的 AutoIt - 所有釋出的版本都已通過數位化簽署，不過測試版可能沒有，所以會在 "已編譯腳本中" 跳出下面第二張的警告。

標準使用者提示

標準使用者必須選擇一個使用者名稱並輸入密碼，才能繼續並以提升的權限執行。

系統管理員提示

當使用者已經是系統管理員後，則只會進一步要求使用者點選是否繼續 - 不需要輸入密碼。

已編譯腳本

已編譯的腳本檔 (也可能是 AutoIt 測試版) 不論是否 通過數位化簽署，都將彈出一大堆警告如下所示：

使用者必須點選 同意 才能繼續(如果是標準使用者則輸入密碼)。

如您已經擁有您的簽署認證，可能有需要自行在編譯腳本中將它加進來。

重要：不論 AutoIt 編譯腳本是否已通過簽署，您還是應該只從您信任的來源執行腳本！

因為簽署碼也有可能被偽造成惡意的！


腳本編輯器

腳本編輯器 (Script Editors)

AutoIt 腳本都是很簡單的純文字檔案，隨便用一款文字編輯器就可以修改了。不過有許多的免費或共享軟體，用他們來撰寫腳本會更方便，而且大多都具備語法高亮功能，它會將 AutoIt 關鍵字及函數突顯出來，讓腳本編寫的過程 更容易 且大大降低被搞錯的機率。

目前被許多 AutoIt 使用者所使用的主流編輯器是 SciTe，AutoIt 的開發小組已建立了一套 SciTe 可自訂版本，它擁有完整的語法高亮功能、並將各式各樣的 AutoIt 第三方工具全部整合進來 (像是語法檢查和腳本流程歸納等)。SciTE 編輯器的 "Lite" 版已內建在 AutoIt 封裝程式檔案裡面，至於 SciTe 的完整 AutoIt 版及包括的所有工具，都可以在該網站分別下載取得：http://www.autoitscript.com/autoit3/scite/

其它推薦的編輯器還有：

  • TextPad
  • Crimson Editor (免費)
  • Source Edit (免費)
  • UltraEdit

AutoIt 已內建支援了一些預先寫好的語法檔案，供許多編輯器使用，而他們可以在安裝目錄的 Extra 資料夾內找到 (在 開始選單/AutoIt v3/Extra 下有一組連結)。


以 Aut2Exe 編譯腳本

以 Aut2Exe 編譯腳本 (Compiling Scripts with Aut2Exe)

要把您的 .au3 腳本編譯成 可獨立執行 的執行檔是可以的。該執行檔並不需要安裝 AutoIt 就可以馬上使用，它不需要系統上的 AutoIt3.exe 檔案協助。除此之外，編譯的腳本皆已做過壓縮及加密處理，還可以選擇使用 FileInstall 函數來綁定加入的檔案 (一樣已壓縮/加密過)。同樣的，所有 #include 的檔案都能被編譯進腳本，所以在執行時他們就不再須要了。

請注意：編譯後的腳本不能有任何語法上的錯誤，因為在編譯完成後 Aut2Exe 是不會檢查語法的。

Aut2Exe 有三種使用方式：

方法 1 - 開始選單

- 以下只限完整安裝才能使用 -

1. 點選 "開始選單" 並瀏覽 AutoIt v3 群組。

2. 點選 "將腳本編譯為執行檔"。

3. Aut2Exe 主介面視窗稍後就會出現。

4. 請用 "瀏覽" 按鈕選擇要輸入 (.au3) 和輸出 (.exe) 的檔案 。

5. 如您要修改完成的 *.exe 檔圖示 - 只須瀏覽需要的圖示即可 (在 Program Files\AutoIt3\Aut2Exe\Icons 有內建一些範例圖示)。

6. 剩下要選的就是看您的需要，可以選擇壓縮的層級 (尤其是使用 FileInstall 附加額外檔案時)， 使用 "壓縮" 選項設定一下就可以了。就跟大部份的壓縮一樣，選擇的壓縮層級越高、速度就越慢，不過不論您選擇的壓縮率為何，解壓縮後執行 (當 *.exe 執行時) 的速度都是一樣的。

7. 點選 "轉換" 將腳本編譯起來。

請注意：腳本是可以編譯成 .a3x 執行檔的，他們會以 AutoIt.exe 的 "檔名.a3x" 命名。*.a3x 內除了自身的腳本，還擁有以 #include 包括額外擴充的 FileInstall 相關檔案。使用這類格式可以讓您以較小的檔案體積散佈程式，由於每個編譯的腳本都沒有內含 AutoIt3.exe 檔，所以您仍須確認目標電腦上有一份 AutoIt3.exe 檔，只要有它就行了。

方法 2 - 右鍵選單

- 以下都只限完整安裝才能使用 -

1. 在 Explorer 檔案管理員瀏覽您要編譯的 .au3 檔案。

2. 右鍵點選一下檔案，稍後會彈出選單。

3. 檔案將會以相同檔名進行靜默編譯 - 只差在為 *.exe 副檔名。

用這個方法進行編譯時，Aut2Exe 會使用目前的 圖示/壓縮 設定 (依上次 Aut2Exe 以方法 1 手動選擇的選項執行)。

方法 3 - 命令行提示字元

Aut2Exe.exe 程式可以在命令行提示字元下執行，用法如下所示。

Aut2exe.exe /in <輸入檔.au3> [/out <輸出檔.exe>] [/icon <圖示檔.ico>] [/comp 0-4] [/nopack] [x64] [/bin <二進位檔.bin>]

命令行清單：

切換參數 | 使用方法 | 預設值
/in | <輸入檔.au3> 指定要編譯的腳本路徑和檔案名稱。 | 無，必須指定檔案
/out | <輸出檔.exe> 指定編譯檔案的路徑和名稱。 <輸出檔.a3x> 當建立一個 *.a3x 檔時，指定的檔案路徑和名稱。 | 輸出檔皆為 *.exe 附檔名
/icon | <圖示檔.ico> 指定編譯檔使用的圖示檔路徑和名稱。 | 預設的 AutoIt 圖示
/comp | 指定編譯腳本時要壓縮的層級 (此選項與 UPX 無關)。 數值必須介於 0 (無) 和 4 (最大值) 之間。 | 預設為 2
/nopack | 指定編譯後不要以 UPX 壓縮加殼的檔案。 | 封裝檔案
/pack | 指定編譯後要以 UPX 壓縮加殼的檔案。 | 封裝檔案
/x64 | 指定要編譯並用於 x64 架構系統下的檔案。 | 請見注意事項
/console | 指定要編譯成控制台 (終端機) 應用程式的檔案。 | Windows 應用程式 (/gui)
/gui | 指定要編譯成 Windows 應用程式的檔案。 | Windows 應用程式 (/gui)
/bin | <binfile.bin> 指定要編譯的二進位檔路徑和名稱。 | 請搜尋 Aut2exe 資料夾

命令行範例

/in c:\我的腳本.au3 /out c:\我的程式.exe /icon c:\我的圖示.ico /x64

結果將以一般壓縮層級建立：c:\我的程式.exe，使用自行選擇的圖示並編譯為 x64 系統架構。

/in c:\myscript.au3

結果將以一般壓縮層級建立一個 UNICODE 檔案：c:\我的程式.exe，使用預設 AutoIt 圖示並通用於 win_32 系統環境。

命令行注意事項

長檔名可以用像 "C:\Program Files\Test\test.au3" 的方式括住來表示。

除了 /in 外，所有切換參數都能選擇使用。

預設以 32-位元 建立程式。

/pass 和 /nodecompile 切換參數在 version 3.2.8.1 是多餘的，如使用的話將會被略過，所以他們已從清單上移除。

/ansi 和 /unicode 切換參數在 version 3.3.0.0 版是用不到的。

技術細節

編譯腳本和使用 FileInstall 函數載入附加檔案時，所用的是我本人 (Jon) 的壓縮演算法。


AutoIt 視窗訊息工具

AutoIt 視窗訊息工具 (AutoIt Window Info Tool)

AutoIt v3 附帶了一個獨立的工具叫做：AutoIt 視窗訊息工具 (Program Files\AutoIt3\AU3Info.exe) AU3Info 讓您可以從指定視窗中取得訊息，並更有效率地實現自動化，可取得的資訊包括：

  • 視窗標題
  • 視窗上的文字(可見和隱藏)
  • 視窗大小和位置
  • 狀態列內容
  • 滑鼠游標的位置
  • 滑鼠游標下的像素色彩
  • 滑鼠游標下的 控制項 細節內容

要使用 AU3Info 只要執行它即可 (從命令行或開始選單)。AU3Info 將一直保持在所有視窗的最上層，以方便給您讀取。只要移到您有興趣的視窗並啟動 - AU3Info 的內容就會跟著變化，將該視窗的有用訊息顯示出來。有了 AU3Info 的協助，您就能迅速地實現自動化了！

當 AU3Info 執行的時候，您可能會想用 CTRL-C 快速鍵直接把文字訊息複製下來，然後貼上腳本以避免拼字/大小寫錯誤。關於籤頁的檢視清單內容 (例如顯示在下方的控制訊息)，只要在項目上 點兩下 即可將文字複製到剪貼簿。不過當您要抓取 像素/滑鼠 內容時可就不一樣了，因為內容一直在變！要解決這個問題，您可以按一下快速鍵 CTRL-ALT-F "鎖定(freeze)" AU3Info 的輸出。再按一次快速鍵就能 "解除鎖定"。

這是使用 AU3Info 與 Windows 的 "WordPad" 編輯器示範：


視窗標題和文字 (基礎篇)

當進行自動化的時候，大部份視窗都可以利用 標題 或他們的 標題&文字 組合方式一一分辨出來。而利用 AutoIt 視窗訊息工具(或直接用瞄準)，要取得這個資訊是很容易的。大部份的視窗標題都非常明顯，例如：未命名 - 記事本 就是 notepad.exe 編輯器的標題，且在多數情況下，這樣的資訊就對自動化工作來說已經足夠了。

請注意：如對 "標題" 和 "文字" 所提供的是空白字串 "" 的話，則將以 ''活動" 狀態視窗為使用對象 (不過在多數的進階 WinTitleMatchModes 模式下，有一些就不是了)！

視窗的標題和文字都是 區分大小寫 的。因此您必須確認大小寫和標點符號都正確符合。要避開這個問題，可以用 AutoIt 視窗訊息工具來選擇標題/文字，按 ctrl-c 鍵複製再將它直接貼上您的腳本。
您可以強制符合小寫，使用：進階模式 (Advanced mode) 即可。

AutoIt 大部份的視窗函數都保留了標題和文字參數，這邊所舉例的 WinWaitActive 就是。這個函數會暫停腳本的執行，直到 等待的目標視窗出現並啟動為止。

WinWaitActive ( "標題", ["文字"], [逾時] )

"標題" 是這個函數中唯一必須指定的參數，其餘兩個 "文字'' 和 "逾時'' 都只是選擇性參數。某些函數的 "文字'' 是不能省略的，如您不想指定文字那麼就只好使用 "" 了(一個空白字串)。留一個空白的字串、或乾脆為空，對於 AutoIt 來說這類 "文字'' 參數都有效。

要運用上方的函數使用記事本視窗，這裡有兩種方式：

WinWaitActive("未命名 - 記事本")

和

WinWaitActive("未命名 - 記事本", "")

如果在同一個記事本視窗內打入了 "這是一行文字"，則 AutoIt 視窗訊息工具 會顯示該訊息：

請注意一下 AutoIt 視窗訊息工具已經 看到了 記事本視窗的標題和文字，而且只要是訊息工具能看到的東西，AutoIt 也一定可以看得到。現在我們已經有足夠的資訊來識別整個視窗了，即使是一口氣開啟了一堆記事本視窗，在這種情況下我們可以用：

WinWaitActive("未命名 - 記事本", "這是一行文字")

視窗文字

所有由文字所組成的視窗文字 AutoIt 都是看的見的。一般上這類東西就好比是編輯控制項的內容 (也就是上方的 "這是一行文字")，但它也可以包括其它文字，例如：

  • 按鈕文字，像：是的(&Y)、否(&N)、下一步(&N) (& 表示一個底線)
  • 對話框文字，像："您確定要繼續？"
  • 控制項文字
  • 其它文字 - 有時候我也不知道它是什麼 :)

有一項很重要的地方就是，您可以看視窗的標題是什麼，再分別使用不同的文字一一識別每個視窗來進行工作。

當您用視窗函數指定 "文字" 參數的時候，它會被看做子字串。所以就上方的例子來說，如您用的文字是 "這是一行" 的話，也是能符合的。註：子字串通常做為搜尋用的字串。

這邊所說的都是以 AutoIt 的 預設 模式來操作示範的，另外還有更進階許多的 進階模式 (Advanced mode) 可以參考，它所用的方式就不會像這裡那麼簡單了。

請注意：隱藏視窗雖然可以用 "標題" 來符合，只是 "文字" 參數必須為空 ("")。


視窗標題和文字 (進階篇)

AutoIt 視窗的動作不外乎這數項的其中一種："視窗標題符合模式"。這些模式係用 AutoItSetOption 函數的 WinTitleMatchMode 參數選項來設定。

模式 1 (預設)

符合標題開頭的部份。

此模式下，若視窗的標題為 未命名 - 記事本，則用 "未命名 - 記事本"、"未命名"、"未"...等來符合。

例如：

WinWait("未命名")

模式 2

符合標題的任意字串。

此模式下，若視窗的標題為 未命名 - 記事本，則用 "未命名 - 記事本"、"未命名"、"記事本"、"本"...等來符合。

例如：

WinWait("記事本")

模式 3

符合整個標題。

此模式下，若視窗的標題為 未命名 - 記事本，則只能用 "未命名 - 記事本" 來符合。

模式 4 (用來向下相容)

進階模式。

必須換成用進階視窗描述(Advanced Window Descriptions)，此外不須再設定任何模式了。

模式 -1 至 -3

強制跟據其它類型符合小寫。

進階視窗描述 (Advanced Window Descriptions)

這是一種被當做 視窗標題 參數來使用的特別描述，此類描述可以依下表 "資源內容" 來識別一個視窗：

  • TITLE (標題) - 視窗標題
  • CLASS (類別) - 視窗的內部類別名稱
  • REGEXPTITLE - 使用 規則陳述式 的視窗標題 (如規則陳述式錯誤則 @error 將設為 2)
  • REGEXPCLASS - 使用 規則陳述式 的視窗類別名稱 (如規則陳述式錯誤則 @error 將設為 2)
  • LAST (最近) - 使用前一個 AutoIt 指令的最近視窗
  • ACTIVE (活動) - 目前活動的視窗
  • X \ Y \ W \ H - 視窗的位置和大小
  • INSTANCE (實例物件) - 以 1 為基準值跟提供的資源內容完全符合的 instance 物件

要在視窗 "標題參數" 上使用一個或以上的資源內容時，請用下列指令格式：

[資源內容1:數值1; 資源內容2:數值2]

請注意：如某個數值必須包括一個 ";" 必須用雙引號括住。

例如：等待一個視窗類別名稱為 "Notepad" 的視窗：

WinWaitActive("[CLASS:Notepad]", "")

例如：關閉目前活動中的視窗

WinClose("[ACTIVE]", "")

例如：等待第 2 個視窗標題為 "我的視窗" 和 類別名稱為 "我的類別" 的 instance 物件：

WinWaitActive("[TITLE:我的視窗; CLASS:我的類別; INSTANCE:2]", "")

例如：依照規則陳述式定義的類別名稱，比對清單視窗：

WinList("[REGEXPCLASS:#\d+]")

視窗控制碼 (Window Handles / HWNDs)

在 AutoIt 中的 "變數" 資料類型，原生就能支援視窗控制碼 (HWND)。一個視窗控制碼，就是視窗每次建立時 windows 分配給視窗的特別值。一旦您擁有了控制碼，便能依據函數呼叫所應用的 標題/文字 規則，將它的用途做為 "視窗標題" 參數來使用了。使用視窗控制碼還有一項很棒的優點，就是當遇到有很多相同程式一齊開啟時 - 它們的標題/文字必然都相同 - 用控制碼便能將它們一一識別。

當您將視窗控制碼做為 "視窗標題" 參數使用時，"視窗文字" 參數將直接被完全忽略。

某些函數像 WinGetHandle, WinList 和 GUICreate 會將這個控制碼返回。有個很重要的要點請注意一下：視窗控制碼 不能 被歸類為數字或字串 - 因為它是獨一無二的特殊類型。

請注意：不論當前所使用的 WinTitleMatchMode 模式是什麼，視窗控制碼永遠有效。

範例：

$handle = WinGetHandle("未命名- 記事本", "")
WinClose($handle)


控制項

控制項 (Controls)

AutoIt v3 其中一項最優秀的新功能，就是能直接使用一些視窗類型 Window 控制項 來執行。在 Window 上幾乎只要是看的到的，全都是控制項的一種：按鈕、清單、文字編輯區、靜態文字...等都是控制項。實際上記事本 (Notepad) 也不過是較大一點的 "編輯框" 控制項而已！由於 AutoIt 直接以控制項執行，而他們能提供比單純傳送按鍵訊號還更可靠許多的方式，所以自動化不容易出問題。

請注意：AutoIt 只能用標準的 Microsoft 控制項執行 - 一些應用程式會寫入他們自訂的控制項，因此有可能看起來像 MS 的標準控制項，不過卻會拒絕執行。多實驗去嘗試吧！

使用 AutoIt 視窗訊息工具 您可以移動滑鼠到您想要的視窗旁邊，就能取得滑鼠游標下的控制項資訊。

其中有一項特別的資訊，它可以當成 控制項 ID 參數使用在大部份的 Control...() 函數中。這個訊息也可依下列 "資源" 用來辨識一個控制項：

  • ID - 內部控制項 ID。控制項 ID 是 Window 提供給每個控制項的十進位識別碼。通常這是識別控制項最好的方法，除了AutoIt 視窗訊息工具之外，還有其它程式如 Screen Reader 盲用電腦系統和 Microsoft 工具/API 都可以幫您取得控制項 ID。
  • TEXT (文字) - 控制項上面的文字，範例如 "下一步(&N)" 按鈕。
  • CLASS (類別) - 內部控制項的類別名稱，像是 "TRichEdit98" 或 "Button" 等。
  • CLASSNN - ClassnameNN 數值是用於前一個 AutoIt 版本，如 "Edit1" 等。
  • REGEXPCLASS - 一種使用 規則陳述式 的控制項類別名稱。
  • X \ Y \ W \ H - 控制項的大小和位置。
  • INSTANCE (實例物件) - 以 1 為基準值跟提供的資源內容完全符合的 instance 物件

在控制項指令的 控制項 ID 參數中，依下面格式使用一個或以上的資源：

[資源內容1:數值1; 資源內容2:數值2]

請注意：若 沒有 使用這個特殊格式的話，則取得的參數將換成控制項 ID (若是為數字)、或控制項的 ClassnameNN/文字 (若是為文字)。雖然這些特殊格式確實是越來越冗長，不過總比含糊不清帶過的方式好。

如該值非包括一個 ";" 不可的話，必須用雙引號。

例如，傳送文字到記事本視窗的 1st Edit 控制項：

ControlSend("未命名 - 記事本", "", "[CLASS:Edit; INSTANCE:1]", "ABCDEFG")

或

ControlSend("未命名 - 記事本", "", "[CLASSNN:Edit1]", "ABCDEFG")

或

ControlSend("未命名 - 記事本", "", "Edit1", "這是一些文字" ;ControlSend 不能傳送中文字元，僅做示範

例如，在 "我的視窗" 上點選控制項 ID 256：

ControlClick("我的視窗", "", "[ID:256]")

或

ControlClick("我的視窗", "", 256)

例如，點選 "Button" 控制項的第 2 個 instance 物件，該控制項內含 "完成" 按鈕：

ControlClick("我的視窗", "", "[CLASS:Button; TEXT:完成; INSTANCE:2]")

控制項的控制碼 (HWND)

您可以使用 ControlGetHandle 函數來決定一個控制項的 "控制碼" 或 "HWND(主視窗控制碼)"。控制碼是 Windows 給控制項的唯一識別碼，而且會於「每次建立控制項時」不定期變動數值。這類存取控制項的方式，通常是只設計給熟悉使用控制碼來作業的使用者。

請依序檢視內容：函數相關 \ 視窗管理\ 控制項 關於控制項動作的函數清單。


Unicode 支援

Unicode 支援 (Unicode Support)

AutoIt 自 V3.2.4.0 開始就支援 Unicode 程式。Unicode 版本讓您的外國朋友終於可以用延伸字元和腳本來執行 AutoIt 了！

請注意：AutoIt 的 Unicode 版 (AutoIt3.exe) 和以 Unicode 模式編譯的腳本，都只能在 Windows NT/2000/XP/2003/Vista 及更新系統上執行。要讓腳本在 Windows 9x 上順利運作，您必需使用較舊的 AutoIt 版本，相容於 Windows 9x 的 AutoIt 最近期版本是 3.2.12.x。

AutoIt 會以 ANSI, UTF16 (大尾碼或小尾碼) 和 UTF8 格式讀取腳本檔。除此之外，一些函數像 FileReadLine 會自動從 ANSI 和 UTF16/UTF8 文字檔讀取文字，並提供所找到的有效 BOM 格式。無有效 BOM 的 UTF 檔案，則會被當成 ANSI 看待。

某些輸出函數像 FileWriteLine 會使用 ANSI, UTF16 (大尾碼或小尾碼) 和 UTF8 格式 - 不過檔案必須以緊急要求 (desired) 模式設定 FileOpen 的旗標參數，否則將使用預設的ANSI 模式。

對支援的文字檔和腳本檔案格式，這些都是儲存在記事本裡面，至於 AutoIt SciTe 文字編輯器如下方表格所示：

AutoIt 表示法 | 記事本 | SciTe
ANSI | ANSI | 8 位元 / 編碼資源內容
UTF16 小尾碼 | Unicode | UCS-2 小尾碼
UTF16 大尾碼 | Unicode 大尾碼 | UCS-2 大尾碼
UTF8 | UTF-8 | UTF-8 帶 BOM 記號

我們建議的 Unicode 格式是 UTF16 小尾碼 - 這是因為 AutoIt 只會儲存字串的多寡，因此在讀取/寫入時所需要的處理程序/轉換動作都較少。不過，UTF8 格式可以讓腳本佔用的空間更小，也是一項不錯的選擇。

目前的限制

AutoIt 目前尚有少數不能完整支援 Unicode 的地方，這些是：

  • Send 和 ControlSend - 請換成使用 ControlSetText 或 Clipboard 函數。
  • Console 函數的動作，都會被轉換成 ANSI。

若有可能的話，在往後版本我們會將這些限制做技術性的解決。 (These limits will be addressed in future versions if possible)


預設用途

AutoIt 是一套 '正在成長茁壯' 的腳本語言，當初開發的目地係用做附加工具，以便順利在基於其它程式的 GUI 介面下完成自動化。
這些工作 (像是傳送按鍵訊號或點選按鈕) 仍然是 AutoIt 腳本的核心應用範疇，然而隨著新近 GUI 相關套件的加入，您現在可以將您自己設計的圖形介面整合進來，用來執行原始的 AutoIt 指令了。
新增的 COM (物件) 所帶來的功能，更填補了 WSH 語言的缺口，如：VBScript/JScript 等等。

AutoIt 在成為可搭配整合 GUI 視窗、視窗介面、和 COM 支援的自動化程式後，它所給您的，就是有能力去完成尚嗷嗷待哺像 WSH 或 KiXStart 這類的腳本語言，而且是您手上功能最強大的腳本工具。


AutoIt 2.64 使用者須知

AutoIt 2.64 使用者須知 (Notes for users familiar with AutoIt 2.64)

不僅是視窗上的概念和敲擊按鍵完全不一樣以外，AutoIt v3 跟 v2.64 及更舊版本是有很大的區別的，但我們仍提供 v2.64 版本給人下載，這也是為何老是有使用者嘗試轉換已有腳本的原因 (看看它是否還能動..等)。但是 v3 具有許多以往版本沒有的強大功能，使得利用 GUI 自動化更輕鬆簡單，就如同它成為廣受歡迎的腳本語言，是名符其實的。

在開始使用 V3 時請遵守下列的指示，它可以幫助您讓事情更容易一些，在安裝目錄所在位置的 "Extra" 資料夾內，有 AutoItV2toV3 轉換器可以使用。

- 反斜線已不再被當成特殊字元，不過相對的 "？" 問號就發生問題了....
例如：Run('C:\Windows\Notepad.exe "C:\Some File.txt" ')

- 命令行語法：
僅限於腳本模式，如：AutoIt.exe <腳本檔案名稱>

- 相關規則：
<cmd>, <參數1> [,<參數2>] 取代為 Cmd(參數1[,參數2])

- Goto 已不存在，這是因為迴圈和使用者自訂函數支援了。

- AutoItv3 就跟許多程式語言一樣都能支援變數：$myVar = "工作範本"

- 腳本擁有的副檔名為 .au3，替換原先的 .aut。

如您還是想要將 version 2.64 重寫為 v3 版，下列表格應該對您有幫助：

V2.64 版本的函數 | V3 版本的函數
AdlibOn | AdlibEnable
BlockInput | BlockInput
Break | Break
DetectHiddenText | AutoItSetOption("WinDetectHiddenText",...)
Exit | Exit
EnvAdd | [視為 + 運算子]
EnvDiv | [視為 / 運算子]
EnvMult | [視為 * 運算子]
EnvSub | [視為 - 運算子]
FileAppend | [FileOpen(...,2) 然後跟隨 FileWriteLine 函數]
FileCopy | FileCopy
FileCreateDir | DirCreate
FileDelete | FileDelete 或 FileRecycle
FileInstall | FileInstall
FileReadLine | FileReadLine
FileRemoveDir | DirRemove
FileSelectFile | FileOpenDialog 或 FileSaveDialog
Gosub | [請見：Func...EndFunc]
Return | [請見：Func...EndFunc]
Goto | [已不需要]
HideAutoItDebug | --
HideAutoItWin | AutoItSetOption("TrayIconHide",...)
IfInString | If StringInStr(...) Then
IfNotInString | If Not StringInStr(...) Then
IfWinExist | If WinExists(...) Then
IfWinNotExist | If Not WinExists(...) Then
IfWinActive | If WinActive(...) Then
IfWinNotActive | If Not WinActive(...) Then
IfEqual | [視為 = 和 == 運算子]
IfNotEqual | [視為 <> 運算子]
IfGreater | [視為 > 運算子]
IfGreaterOrEqual | [視為 >= 運算子]
IfLess | [視為 < 運算子]
IfLessOrEqual | [視為 <= 運算子]
IfExist | FileExists
IfNotExist | If Not FileExists(...) Then
IfMsgBox | [請見：MsgBox(...) 和 Select...Case...EndSelect]
IniRead | IniRead
IniWrite | IniWrite
IniDelete | IniDelete
InputBox | InputBox
LeftClick | MouseClick("left",...)
RightClick | MouseClick("right",...)
LeftClickDrag | MouseClickDrag("left",...)
RightClickDrag | MouseClickDrag("right",...)
MouseGetPos | MouseGetPos
MouseMove | MouseMove
MsgBox | MsgBox
Random | Random
RegRead | RegRead
RegWrite | RegWrite
RegDelete | RegDelete
Repeat | [請見：For...Next]
EndRepeat | [請見：For...Next]
Run | Run
RunWait | RunWait
Send | Send
SetCapslockState | AutoItSetOption("SendCapslockMode",0) + Send ("{CAPSLOCK}")
SetEnv | EnvSet
SetBatchLines | --
SetKeyDelay | AutoItSetOption("SendKeyDelay",...)
SetStoreCapslockMode | AutoItSetOption("SendCapslockMode",...)
SetTitleMatchMode | AutoItSetOption("WinTitleMatchMode",...)
SetWinDelay | AutoItSetOption("WinWaitDelay",...)
Shutdown | Shutdown
Sleep | Sleep
SplashTextOn | SplashTextOn 以及其它
SplashTextOff | SplashOff
StringCaseSense | [視為單獨函數]
StringLeft | StringLeft
StringRight | StringRight
StringMid | StringMid
StringLen | StringLen
StringReplace | StringReplace
StringTrimLeft | StringTrimLeft
StringTrimRight | StringTrimRight
StringGetPos | StringInStr
WinGetActiveStats | [請見：WinGetPos, WinGetTitle, WinGetText]
WinGetActiveTitle | WinGetTitle("")
WinKill | WinKill
WinWait | WinWait
WinWaitClose | WinWaitClose
WinWaitActive | WinWaitActive
WinWaitNotActive | WinWaitNotActive
WinHide | WinSetState(..., @SW_HIDE)
WinShow | WinSetState(..., @SW_SHOW)
WinRestore | WinSetState(...,@SW_RESTORE)
WinMinimize | WinSetState(...,@SW_MINIMIZE)
WinMaximize | WinSetState(...,@SW_MAXIMIZE)
WinActivate | WinActivate
WinClose | WinClose
WinMove | WinMove
WinSetTitle | WinSetTitle
WinMinimizeAll | WinMinimizeAll
WinMinimizeAllUndo | WinMinimizeAllUndo
#Include | #Include
%CLIPBOARD% | [請見：ClipGet 和 ClipPut]
A_OSTYPE | @OSType
A_OSVERSION | @OSVersion
A_SCRIPTNAME | @ScriptName
A_SCRIPTDIR | @ScriptDir
A_SCRIPTFULLPATH | @ScriptFullPath
A_WORKINGDIR | @WorkingDir
A_NUMBATCHLINES | --
A_SEC | @SEC
A_MIN | @MIN
A_HOUR | @HOUR
A_MDAY | @MDAY
A_MON | @MON
A_YEAR | @YEAR
A_WDAY | @WDAY
A_YDAY | @YDAY


在 Windows 64-位元版本下執行

在 Windows 64-位元版本下執行 (Running under Windows 64-bit Edition)

AutoIt 原本就是 32-位元的應用程式，不過隨著 3.2.10.0 版釋出，就加入了一些原生 x64 版元件，其中包括：

  • AutoIt (AutoIt3_x64.exe)
  • Aut2Exe (Aut2Exe_x64.exe)
  • Au3Info (Au3Info_x64.exe)
  • AutoItX (AutoItX3_x64.dll)

在安裝過程中，如 AutoIt 發現您的系統是 x64 版，會主動詢問請您選擇並設定為 x64 版。這些版本都是完完全全的 x64 檔案，不過，某些使用到 DllCall/DllStruct 這類帶自訂結構的腳本，可能會用到讓 64-位元組件執行失敗的數值 (像是對指標使用了 32-位元整數)。雖然這類內含一些 UDF 函數的腳本都可以被 AutoIt 支援，不過卻從沒有在 x64 環境下做過測試。

您可以在腳本上點右鍵以 AutoIt 的 x86 版執行，選擇 "執行 AutoIT 腳本(x86)" 即可。

如您發現有腳本在 x64 下不能順利執行，但在 x86 環境下卻完全正常，請將這個 BUG 回報給我們。

端看情況決定，若您是在 64-位元 Windows 版本下 "執行"，請使用 @OSArch 巨集；若是 "使用" AutoIt 的 32 或 64-位元版本，則使用 @AutoItX64 巨集。

在 x64 系統上執行 32-位元 AutoIt 版本

以檔案來說，Windows 本身便具備對一些系統目錄進行特殊重新導向的機制：

系統目錄 | 32-位元數值 | 64-位元數值
@SystemDir | @WindowsDir & "\SYSWOW64" | @WindowsDir & "\System32"
@ProgramFilesDir | {系統硬碟} & "\Program Files (x86)" | {系統硬碟} & "\Program Files"

想要將重新導向機制關閉，來存取這些目錄的 64-位元版本是可以的：

DllCall("kernel32.dll", "int", "Wow64DisableWow64FsRedirection", "int", 1)

一些相關說明資訊可以在該網頁上找到： MSDN。

對登錄的話，請使用 HKCR64 或 HKLM64 來繞過重新導向機制，請參見登錄函數的說明文件。


導覽

導覽 (Tutorials)

  • 我的第一個腳本 (Hello World)
  • 簡單的記事本自動化
  • WinZip 安裝
  • 字串規則陳述式


導覽 - HelloWorld

導覽 - HelloWorld (Tutorial - HelloWorld)

這裡將詳細說明建立 AutoIt 腳本的基本方法並執行它。導覽會假設您已經使用我們所提供的安裝程式，完整安裝好 AutoIt v3 了。

第一步就是開啟您想要建立腳本的資料夾位置，請在資料夾內點右鍵並選擇 新增 / AutoIt v3 Script。

一個新的檔案已建立好了，現在請您立刻為它命名一個適當的名稱。將 '新增 AutoIt v3 Script' 修改為 'HelloWorld'，如果您看得到副檔名的話，完整保留 '.au3' 檔的名稱不要去動。

現在我們已建立好要編輯的腳本檔，接下來要做的就是讓它具備一些好用的功能。請在 HelloWorld.au3 上點一下右鍵，然後選擇 編輯 AutoIT 腳本。

AutoIt 將打開一個 SciTE 編輯器，您會看到某些東西像這樣：

您所看到的代碼是一個很簡單的註解，方便讓您用來組織腳本。開頭有一行以分號 ; 分隔，它代表註解 (被忽略不執行) "；" 和 DOS 批次檔的 REM 陳述式十分類似。

現在呢，我們要告訴 AutoIt 顯示一個訊息框 - 這是用 MsgBox 函數做到的。

在檔案底端鍵入內容如下：

MsgBox(0, "導覽", "Hello World!")

全部的函數都帶有參數，MsgBox 有三個 - 一個旗標、標題、和訊息。旗標是用來改變 MsgBox 如何顯示的數值 - 我們現在用 0 就可以了。至於標題和訊息這兩個是 字串 參數 - 當我們在 AutoIt 內的文字旁邊用單引號或雙引號時，"這是一些文字" 或 '這是一些文字' - 這兩個都是沒問題的。

現在把腳本儲存起來並關閉編輯器吧。您在剛剛已經寫出了生平的第一個 AutoIt 腳本！請在 HelloWorld.au3 腳本檔案上簡單點兩下 (您也可以在檔案上點右鍵，然後選擇 執行 AutoIT 腳本)。

您應該會看到這個訊息：

好現在呢，讓我們來回頭看看一下 MsgBox 函數的 "旗標" 參數吧，從教戰手冊上我們可以看到一串各種不同數值的清單，那就是改變 MsgBox 顯示方式的秘訣。字串 0 會顯示一個帶 確定 鈕的簡單訊息框，數值 64 則會顯示出帶 "訊息圖示" 的訊息框。

請再次打開編輯器將 0 改成 64，就這樣修改一下：

MsgBox(64, "導覽", "Hello World!")

執行腳本後您會看到：

您可以再去實驗其它各種不同的旗標，然後再看看會得到怎樣的結果。請記住，如您想要使用一個以上的旗標，只要將需要的數值簡單加起來就可以了。


導覽 - 記事本

導覽 - 記事本 (Tutorial - Notepad)

這裡將詳細說明如何自動開啟、輸入一些文字，然後自行關閉記事本的方法。導覽會假設您已相當熟悉建立和執行 AutoIt 腳本，並已看過 HelloWorld 該頁導覽所示的教學。

第一步請先建立一個空白的腳本，命名為 記事本.au3 然後開始編輯檔案 (使用記事本或 SciTe 您喜歡的就好)。

您第一件要知道的事就是記事本執行檔的名稱，它是 notepad.exe - 您可以在開始選單的記事本捷徑圖示內容上看到並取得這個資訊。我們會使用 AutoIt 的 Run 函數來執行記事本，此函數會簡單地執行檔案並繼續下一個動作。

在腳本第一行鍵入：

Run("notepad.exe")

執行腳本 - 如果一切順利的話，應該會開啟一個新的記事本物件 (instance)。

此時 AutoIt 自動化程式會檢查視窗的標題，如此才能知道並掌握視窗的動作。記事本視窗的標題很明顯是 未命名 - 記事本。AutoIt 在使用視窗標題時是區分大小寫的，所以您必須正確取得完整的標題 - 最好的方法就是用 AutoIt 視窗訊息工具。請從 開始選單 \ AutoIt v3 \ AutoIt 視窗訊息工具 執行該工具。

開啟訊息工具後，點選一下新開的記事本視窗讓它為活動狀態；訊息工具會給您有關它的所有資訊，我們有興趣的訊息就是那個 視窗標題。

用 AutoIt 視窗訊息工具將標題反白後，然後按 CTRL-C 將它複製進剪貼簿 - 我們可以直接將標題貼進腳本，而不必擔心會把字拼錯或寫錯。

在 Run 執行記事本，開始傳送任何敲擊按鍵訊號前，我們須耐心等一會兒讓它出現並為活動狀態。所以我們可以用 WinWaitActive 函數來等候視窗，AutoIt 中多數與視窗相關的函數，都帶有一個 視窗標題 參數供使用。

請在腳本內如下列輸入第二行 (用 CTRL-V 或 編輯(E)\貼上(P) 將您的視窗標題從剪貼簿貼上)：

WinWaitActive("未命名 - 記事本")

在我們確認記事本視窗是可見狀態後，要輸入一些文字，這件事是用 ControlSetText、Send 函數做到的。

將這兩行新增到您的腳本吧：

ControlSetText("未命名 - 記事本", "", "Edit1", "這是一些文字")
Send("ABC")

現在整個腳本看起來是這樣：

Run("notepad.exe")
WinWaitActive("未命名 - 記事本")
ControlSetText("未命名 - 記事本", "", "Edit1", "這是一些文字")
Send("ABC")

可以把我們先前打開的記事本關閉了 (您將需要在每次執行腳本時，重覆此步驟好幾次，不然您會被一堆執行的檔案給壓扁！)，執行一下腳本。

您應該會看到記事本開啟，然後一些文字很不可思議地出現了！

下一步我們要把記事本關閉，可以用 WinClose 函數來辦到這件事。

WinClose("未命名 - 記事本")

當您試圖將記事本關閉的時候，會有一個訊息框提示詢問您是否儲存檔案。請使用 AutoIt 視窗訊息工具，取得彈出的對話框內容吧，如此一來我們就可以對它做出回應了 :)

所以呢，我們可以加入一行來等候這個對話框啟動 (我們也使用了視窗文字，這樣建立的函數會更可靠許多，方便分辨出從原來記事本視窗出現的新視窗)：

WinWaitActive("記事本", "是否要儲存這些變更?")

下一步我們就要來自動按下 Alt-N 選擇 否(N) 按鈕 (Windows 的底線符號，通常是表示您可以用 ALT 鍵和字母做為鍵盤快速鍵)。要在 Send 函數內傳送一個 ALT 鍵，我們就用 " ! "。

Send("!n")

現在我們的整個腳本看起來就像這樣了：

Run("notepad.exe")
WinWaitActive("未命名 - 記事本")
ControlSetText("未命名 - 記事本", "", "Edit1", "這是一些文字")
Send("ABC")
WinClose("未命名 - 記事本")
WinWaitActive("記事本", "是否要儲存這些變更?")
Send("!n")

執行腳本您就會看到記事本開啟、一些文字跑出來、然後關閉了！您也能將從此導覽學到的技巧，廣泛應用在其它許多應用程式身上。


導覽 - WinZip

導覽 - WinZip (Tutorial - WinZip)

這裡將詳細說明如何進行 WinZip 12.0 的自動化安裝。 導覽會假設您已相當熟悉建立和執行 AutoIt 腳本，並學會使用 AutoIt 視窗訊息工具 讀取視窗標題和文字，也詳細研讀過 HelloWorld 和 記事本 導覽所示的教學。

WinZip 安裝程序總共是由大約 13 個對話框所組成，而這些都須要您點選按鈕 (一般是 Next) 才能繼續。我們打算寫個腳本來以逸代勞，等候這些對話框出現再點選適當的按鈕。通常這類安裝程序的類型，視窗標題都是一樣的 (WinZip Setup)，所以我們必須用視窗文字告訴 AutoIt 這些不同的視窗。每個對話框都有一張截圖做參考，您可以在圖片上點選一下，以檢視 訊息工具 於對話框的顯示訊息。

第一步就是建立一個資料夾，用來放我們的 WinZip 安裝程式和撰寫的腳本檔。請將WinZip 安裝程式複製進資料夾、並建立一個空白的腳本，命名為 WinZip 全自動安裝.au3。

安裝 WinZip 前置作業

我們將先利用手動執行安裝程式，並開始撰寫腳本。每張圖片下面都有示範各個對話框的自動腳本程式碼 (別忘記在圖片上點一下，就可以看到 AutoIt 視窗訊息工具 的顯示內容)，您也可以直接到 完整腳本 看看做參考。

腳本第一行很簡單，我們首先就是要執行 winzip120.exe 安裝程式，所以第一行是：

Run("winzip120.exe")

第一個對話框就會彈出來：

我們要等這個視窗彈出來並為活動狀態後，然後才須要傳送按鍵訊息 CTRL-S 按下 Setup 按鈕，那結果腳本程式行就是：

WinWaitActive("WinZip?12.0 Setup", "&Setup")
Send("^s")

(別忘記在圖片上點一下，就可以看到 AutoIt 視窗訊息工具 的顯示內容，特別重要的是標題內可能含特殊符號 ®，那個很難打的進去)

稍後就會彈出一個選擇對話框：

選擇是否安裝 Google 工具列

我們要等這個畫面出現並為活動狀態後，然後選擇 "Do not install the Google Toolbar" 僅安裝 WinZip，
再按下 "Continue" 同意繼續安裝，腳本程式行是：
(第二個選項的 ClassnameNN 是 "Button2" 請見 控制項、進階視窗描述 和 ControlClick 函數)

WinWaitActive("WinZip Setup - Google Toolbar", "The Google Toolbar")
ControlClick("WinZip Setup - Google Toolbar","" ,"Button2")
Send("{ENTER}")

WinZip 特色對話框終於出現並帶著 "Next"：

開始安裝 WinZip 12.0

請注意這個視窗的標題，幾乎就跟第一個 WinZip®12.0 Setup 對話框的標題完全一模一樣 - 事實上所有的安裝對話框都是這樣的標題！為了讓 AutoIt 能區別不同，我們必須也用上視窗文字 - 您可以試試在每張畫面上隨意挑出最與眾不同的文字，這樣的情況我們就選擇 WinZip features include。在視窗出現後就按 ALT-N 鍵：

WinWaitActive("WinZip 12.0 Setup", "WinZip features include")
Send("!n")

出現授權對話框並帶著 "Next"：

同意 WinZip® 授權

等到視窗出現，選擇 "I accept the license agreement" 同意授權，然後按下 ALT-N 繼續：
(第一個選項的 ClassnameNN 是 "Button3" 請見 控制項、進階視窗描述 和 ControlClick 函數)

WinWaitActive("WinZip 12.0 Setup", "License Agreement")
ControlClick("WinZip 12.0 Setup","" ,"Button3")
Send("!n")

安裝程式繼續以類似的風格彈出少數對話框，我們現在僅分別顯示每個對話框圖片、並附帶自動化程式碼。

選擇 WinZip 安裝位置

WinWaitActive("WinZip 12.0 Setup", "Destination Folder")
Send("!n")

WinWaitActive("WinZip 12.0 Setup", "Explorer Configuration")
ControlClick("WinZip 12.0 Setup","" ,"Button5")
Send("!n")

WinWaitActive("WinZip 12.0 Setup", "Default Compression Method")
ControlClick("WinZip 12.0 Setup","" ,"Button6")
Send("!n")

WinWaitActive("WinZip 12.0 Setup", "Ready to Install the Application")
Send("!n")

選擇 WinZip 啟動介面

WinWaitActive("WinZip Setup", "Choose ""Classic""")
Send("!c")
Send("!n")

WinWaitActive("WinZip Setup", "Express Setup associates WinZip")
Send("!e")
Send("!n")

選擇 WinZip 關聯

WinWaitActive("WinZip Setup", "WinZip needs to associate itself")
Send("!n")

完成 WinZip 安裝

這是最後的安裝對話框了。請注意一下那個 Finish 按鈕是不能傳送快速鍵的 - 好在它是對話框的預設按鈕，所以我們可以直接按下 ENTER 選擇它即可。如果遇到其它的情況，那我們就只好以 TAB 鍵在控制項之間切換、或考慮更好用的 ControlClick 函數 (上面已示範)。

WinWaitActive("WinZip 12.0 Setup", "Click the Finish button")
ControlClick("WinZip 12.0 Setup","" ,"Button2")

稍後安裝程式就會自動執行 WinZip 將它開啟：

我們慢慢等 WinZip 主視窗出現，然後再用 WinClose 函數分別將秘訣提示和主畫面全部關閉。

WinWaitActive("WinZip Tip of the Day")
WinClose("WinZip Tip of the Day")
WinWaitActive("WinZip")
WinClose("WinZip")

開始進行自動安裝 WinZip 12.0 中文化

我們在第一步中有事先放了一個檔案，那就是 WinZip 的中文化檔案，它被命名為 WinZip_tw_112_Chinese.exe。

首先，自然要去執行程式，以 RUN 函數從根目錄下執行即可：

Run("WinZip_tw_112_Chinese.exe")

WinZip 安裝完畢後，接下來開始中文化的安裝，可自 WinZip 12.0 下載取得：

WinWaitActive("WinZip v12 中文化 v1.1 安裝", "這個精靈將指引你")
Send("!n")

選擇是否要進行備份，保留預設選項即可，以後仍可移除還原：

WinWaitActive("WinZip v12 中文化 v1.1 安裝", "安裝 / 還原")
Send("!i")

這邊只要花一點時間，順利的話，只要將中文檔案替換過去即完成：

WinWaitActive("WinZip v12 中文化 v1.1 安裝", "安裝程式已成功")
WinActivate("WinZip v12 中文化 v1.1 安裝", "安裝程式已成功")
Send("!n")

恭喜您！WinZip v12 已順利地完成中文化，整個 WinZip 安裝到此，您現在可以按 "完成(F)" 關閉了：
PS：這邊的中文化僅為示範，因為官方的 V12 中文化並不完整，事實上也沒有中文化效果，WinZip_tw_112_Chinese.exe 從檔名看來是給 11.2 版使用的，但卻不允許在 V11.2 安裝...

WinWaitActive("WinZip v12 中文化 v1.1 安裝", "關閉此精靈")
WinActivate("WinZip v12 中文化 v1.1 安裝", "關閉此精靈")
ControlClick("WinZip v12 中文化 v1.1 安裝","" ,"Button2")

此外，為預防萬一，所以我們加進了這個腳本程式行：

If WinExists("WinZip Self-Extractor") Then
Send("!y")
EndIf

WinWaitActive("[ACTIVE]")
WinClose("[ACTIVE]", "")

這裡是 完整的腳本 - 請注意我已分別為每個對話框做過註解，這樣對往後的教學進度和修改都比較方便 (下個 WinZip 版本可能會稍微改一下)。

大功告成！請執行 WinZip 全自動安裝.au3 腳本檔並欣賞 WinZip 在短短幾秒內就完成安裝！這份教學所運用到的技巧，可用於多數程式的自動化安裝。

給讀者一個練習題吧，請嘗試再重新撰寫這個腳本，但不要使用到 Send 函數 (它會向活動視窗傳送按鍵) 去點選按鈕，換成用 ControlClick 函數會更穩定。您會有需要研讀 控制項 的說明來完成這份作業。


導覽 - 規則陳述式

導覽 - 規則陳述式 (Tutorial - Regular Expression)

這篇是專門釐清 StringRegExp() 函數奧秘、並以循序漸進方式來看的小小教學。

StringRegExp( "測試", "範本規則" [, 旗標 ] )

"測試" = 被搜尋比對的字串。
"範本規則" = 一組內含讓函數能 充份了解 您所要符合的關鍵字。因此不能有 IF、AND、或 BUT ...條件對就符合，不然則否。
旗標[選擇性參數] = 告知函數若找到與 "範本規則" 符合的內容，到底是要讓您知道就好、還是返回第一個符合的結果、或返回與 "測試" 全部符合的字串。

基礎實戰 (The Very Basics)

您很可能會摸不清頭緒，因為 "範本規則" 字串是呼叫 StringRegExp() 函數唯一較困難的地方 (以下簡稱：SRE -譯註)。我發現您最好把它想成是，告訴函數以字元來符合另一個字串字元。某些字元要找到比較困難：如果您是要搜尋與 "TEST" 符合的字串，那應該非常簡單。您要告訴 SRE 第一次先搜尋 "T" 字串，如果它找到了其中一個，會假定它是符合的，接下來範本規則其餘的部份會被用來嘗試、並求證它所找到的是否有不合之處。所以說，如下一個字元是 "E"，一樣是跟條件符合的。我們再來說明，要是下個字母是 "X" 的話，SRE 便會立刻知道該字串不是它要找的，因為第三個字元您告訴它的是一個 "S" 字母。

範例 1

MsgBox(0, "SRE 範例 1 結果", StringRegExp("測試文字", '測試一下'))

在這個範例中，訊息框應該會讀取顯示 "0"，也就是說在字串 "測試文字" 中並沒有找到跟範本規則 "測試一下" 符合的內容。我知道這看起來簡單的很，不過現在您必然知道為什麼它找不到了吧。

下一步會用設定 ("[ ... ]") 來指定一個範本規則，您可用一個相當於邏輯函數 "OR" 的設定。我們要用前面的範例，於 "測試文字" 或 "測試紋字" 中找其中一個。也就是說，我用範本規則開始搜尋的方法，就好比 SRE 所想的那樣：我要比對的第一個字是 "測"，然後是 "試" 字元，這兩個都一樣是我們想要的。現在我們要比對 "文" 或(OR) "紋"，所以可以將設定換成："[文紋]"，表示要比對 "文" 或 "紋" 這兩個，最後是 "字" 同理。

範例 2

MsgBox(0, "SRE 範例 2 結果", StringRegExp("測試紋字", '測試[文紋]字'))
MsgBox(0, "SRE 範例 2 結果", StringRegExp("測試文字", '測試[文紋]字'))

這兩個應該都會給 "1" 的結果，因為範本規則在比對 "測試文字" 和 "測試紋字" 這兩個後是符合的。

您也可以用 "{比對的次數}" 來設定每個字到底要比對幾次，或者用 "{最小值, 最大值}" 界定範圍。第一個範例下面那個贅字太多了，不過它就是我要表達的：

範例 3

MsgBox(0, "SRE 範例 3 結果", StringRegExp("測試文字", '測{1}試{1}[文紋]{1}字{1}'))
MsgBox(0, "SRE 範例 3 結果", StringRegExp("對對是是是好好好好棒棒棒棒棒", '棒{5}'))

若非─則是 基礎實戰 (Not-So Basics)

您現在很可能正在想："這個該不會只是 StringInStr() 函數的美化版而已吧？" 嗯，要是 "旗標" 使用的值為 0，大多數情況您是對的。不過 SRE 可是比那個還要強大許多呢，因為只要隨著您使用 SRE 的時日愈久，就會越發覺到您所挖掘知道的範本規則類型，遠比實際上還要少許多。因為指定各個相關字元的方法會越來越少，所以您希望能在範本規則內設定。取個例子，某一行是來自遊戲的對話記錄："Gnarly Monster 攻擊您打出 18 個傷害"，您會想找出 Gnarly Monster 到底對您造成多少傷害。喔，您不能用 StringInStr()，因為您肯定沒法找的到 "18" 這數字，您要用 "????" 去找，其中的 ? 可以是任意數字。

這邊我會說明怎樣組合出範本規則。就看您是做了什麼而還不知道的，就找您要的那個東西就好：
1) 您知道它「一定」包括數字，絕不會有其它東西。
2) 您知道它的長度「有時候」是 2 個字元。
3) 您知道那個所玩的遊戲中，怪物可達到的傷害最大值是 999。
4) 您知道怪物可做到的傷害最小值是 0。
5) 您知道它的長度「一定」介於 1 至 3 個字元。
6) 您知道在測試參數字串中，不會有其它數字出現。

碰到這樣的情況，我一向喜歡介紹使用「旗標」參數值 "1"，群組字元則為 "()"。旗標值 "1" 表示 SRE 將不會只比對範本規則而已，還會返回一個群組，每個群組類別都帶有一個擷取到的 "字元群組 (Group)"，所以不用猶豫太多，舉一下這個範例：

範例 4

$asResult = StringRegExp("這是一個測試範例", '(測試)', 1)
If @error == 0 Then
MsgBox(0, "SRE 範例 4 結果", $asResult[0])
EndIf
$asResult = StringRegExp("這是一個測試範例", '(測)(試)', 1)
If @error == 0 Then
MsgBox(0, "SRE 範例 4 結果", $asResult[0] & "、" & $asResult[1])
EndIf

所以呢，以第一個範本規則來說，它必須比對測試字串內的某些地方，如果是，SRE 會被告知去 "擷取" ("()") 內的任意字元，並將它們儲存為返回群組 (Array)。您還可以使用多重擷取，如範例 4 第二段代碼所示範。

好了，言歸正傳，來談談那個 Gnarly Monster。現在我們已經曉得要如何 "擷取" 文字囉，讓我們開始來建構範本規則 - 一旦您曉得要找的東西就是數字，那麼有 3 種 "與任意數字符合" 的方法可以設定："[:digit:]"、"[0-9]"、和 "\d"。第一種大概是最容易理解的，有少數三種類別 (數字、alnum、空格...等等，請見 StringRegExp() 說明檔的完整清單) 您可用來指定要比對的字元，它們的其中一個是 digit (數字)。"[0-9]" 係僅界定一個範圍，為所有數字 0 到 9。"\d" 只是一個特別字元，與第一種的 digit 一樣。這三種完全沒什麼不同，SRE 通常至少有兩三種方法可以協助您建構範本規則。

所以，我們第一件知道的事就是擷取數字，開頭請以圓括號 "(" 括起來表示。下一步呢，我們曉得要擷取的長度是界於 1 到 3 字元之間、以數字組成，所以我們的範本規則看起來就像："([0-9]{1,3}"。最後用圓括號將它括住封閉，表示這是我們的群組結尾："([0-9]{1,3})"。讓我們來試試一下吧：

範例 5

$asResult = StringRegExp("Gnarly Monster 攻擊您打出 18 個傷害", _
'([0-9]{1,3})', 1)
If @error == 0 Then
MsgBox(0, "SRE 範例 5 結果", $asResult[0])
EndIf

您去執行一下，訊息框目前會顯示 "18"。

下一步我們必需將之覆寫為不擷取群組 (non-capturing groups)。表示該群組的方法係將開頭的群組以 "(?:" 替換掉 "("。我們現在就來談一下您的記錄，它說明著："您將 Gnarly Monster 的 279 攻擊傷害反彈掉 36 個"。現在如果您去執行這裡的 SRE 範例 5，您會發現得到的是 "279" 而不是 "36" 個。現在這裡我想做的就只有依數字間的不同，來決定是哪一個。我想到了一個方法，那就是第二個數字總是跟著一個空格，然後後面是文字 "個"。我們可以僅修改前一個範本規則為 "([0-9]{1,3} 個)"，但假使我們的腳本只是要找反彈數字的話呢，這麼一來數字尾巴就不能跟著 "個" 吧？而這就是我們要使用「不擷取群組」來實現這個目地的理由了。

範例 6

$asResult = StringRegExp("您將 Gnarly Monster 的 279 攻擊傷害反彈掉 36 個", '([0-9]{1,3})(?: 個)', 1)
If @error == 0 Then
MsgBox(0, "SRE 範例 6 結果", $asResult[0])
EndIf

也許整個過程很冗長無聊，不過我最主要只是想示範如何運用規則陳述式來建立罷了，真正重要的還是 SRE 的 "思想"，有幾件要點請牢記在心：
- 請記住並斟酌範本規則，因為每次只符合一個字元
- StringRegExp() 函數會優先尋找規則內的第一個字元，所以您的工作就是：不論是否真的能夠符合條件，但要盡可能留下蜘絲馬跡來 "證明"，範例 6 就是一個很好的寫照。
- 請記住 [ ... ] 代表 OR ([xyz] 會符合 "x"、"y"、或一個 "z")
如果您還有其它問題，首先請詳細研讀一下說明書吧！它鉅細彌遺地解釋了 SRE 所帶來的所有核心語法，還有一點是，請務必要特地去看 "循環字元" 那一段章節。它可以藉由範圍上的某些字元取代，讓您的範本規則變得更穩定可靠。例如："*" 相當於 {0,}；或將 0 到字元的任意數字做為範圍等。

很幸運的，規則陳述式可以讓您的程式碼長度大大縮短，而且對於往後的修改也更方便。若有任何意見和錯誤回報，都非常歡迎！

其它資源 (Resources)

維基百科文獻 - 規則陳述式 - BY wellss 提供

維基百科文獻 - 規則陳述式 (原文) - 感謝 blindwig 提供

Regex 30 分鐘快速導覽 - BY Jim Hollenhorst 提供

用來為各種 StringRegExp() 範本規則做測試的 GUI 介面：(感謝：steve8tch 贊助者：w0uter)

感謝為這份導覽熱心撰寫的人們！

譯註：forthwith -原意為立刻、隨即、馬上等意思

原文1："Gnarly Monster hits you for 18 damage"

原文2："You deflect 36 of Gnarly Monster's 279 damage"


語言參照

語言參照 (Language Reference)

AutoIt 語言的基本元件：

  • 資料類型
  • 變數
  • 巨集
  • 運算子
  • 條件陳述式
  • 迴圈陳述式
  • 使用者自訂函數
  • 註解


語言參照 - 資料類型

語言參照 - 資料類型 (Language Reference - Datatypes)

AutoIt 中只有一種資料類型，那就是：變數 (Variant)。一個變數可以是內含數字或字串的資料，並依其用途決定要如何使用。例如，若您嘗試將兩個變數相乘、他們會被看成數字；如您嘗試要將兩個變數組合 (連結) 的話，則將被視為字串。

一些範例：

10 * 20 等於數字 200 (* 用於將兩個數字相乘)

10 * "20" 等於數字 200

"10" * "20" 等於數字 200

10 & 20 等於字串 "1020" (& 用於連結字串)

如某個字串被當做數字使用，則執行內定預設的 Number() 函數，也是說若它並未含有效數字，會被假定等於 0，例如：

10 * "fgh" 等於數字 0

如該字串被做為布林變數使用，且它又是一個空白字串 "" 的話，則假定等於 False (為否)，請見下方範例：

NOT "" 等於布林變數 true

數字 (Number)

數字可以是標準的十進位數值像 2, 4.566, 和 -7 等。

亦支援科學標記法；不過，您要寫成 1.5e3 而不是 1500。

整數 (完整整數) 也可用前綴 0x 和 0x409 或者 0x4fff 這類十六進位法來表示 (使用十六進位法時只有 32-位元 數字才有效)

字串 (String)

字串係以雙引號括起來，像 "這個" 。如您要一個內含雙引號的字串，則成對使用像：

"這是一對""雙引號"" - 可以嗎？"

您也可以用單引號像 '這個' 和 '這是一對 ' '單引號' ' - 可以嗎？'

您可以將這些引號類型混合使用以方便工作，避開雙倍引號的麻煩並取得您想要的。例如說您要使用很多雙引號在您的腳本中，則您應該用單引號做宣告：

'這個"句子"包括"很多"的"雙引號"，對不對？'

更簡單的還有：

"這個""句子"" 包括""很多""的""雙引號"" 對不對？"

當計算結果的時候，字串可以依 Opt() 函數的定義，看是要 Env 變數或換為 Var 變數都可以。

布林變數 (Booleans)

布林變數是一種 邏輯 數值。只有兩種布林變數存在：true (為真) 和 false (為否)。

他們都可以搭配布林運算子 and, or 和 not 用於變數參數中。

範例：
$Boolean1 = true
$Boolean2 = false
$Boolean3 = $Boolean1 AND $Boolean2

這邊 $Boolean3 的結果為 false。

$Boolean1 = false
$Boolean2 = not $boolean1

這邊 $Boolean2 的結果為 true。

如該布林變數與數字一起使用，請遵循下列規則應用：

數值 0 將等於布林值 false。
其它所有數值都等同於布林值 true。

範例：
$Number1 = 0
$Boolean1 = true
$Boolean2 = $Number1 and $Boolean1

這邊 $Boolean2 的結果為 false。

如您要跟布林變數一起做計算的話 (這是很不明智的！)， 請遵循下列規則應用：

布林變數 "true" 將被轉換為數字 1。
布林變數 "false" 將被轉換為數字 0。

範例：
$Boolean1 = true
$Number1 = 100
$Number2 = $Boolean1 + $Number1

這邊 $Number2 的結果為數字 101。

如您要布林變數跟字串一起使用的話，他們將如下方被轉換：

布林變數 "true" 將為字串值 "True"。
布林變數 "false" 將為字串值 "False"。

範例：
$Boolean1=true
$String1="測試："
$String2=$String1 & $Boolean1

這邊 $String2 的結果為字串值 "測試：True"。

差不多還有其它的方式，不過都不一樣。
當您用布林變數進行字串比對的時候，請遵循下列規則應用：
只有空白字串 ("") 才會讓布林變數為 false。
其它所有數值 (包括等於 "0" 的字串) 將使布林變數為 true。

二進位 (Binary)

二進位類型可以儲存任意位元值，當儲存成字串變數的時後，他們會被轉換為十六進位。
範例：
$bin = Binary("abc")
$str = String($bin) ; "0x616263"

指標 (Pointer)

指標會依所使用的 AutoIt 是 32位元 或 64位元，將儲存在記憶體的位址區分為 32 或 64 位元。當儲存成字串變數的時後，他們會被轉換為十六進位。從 WinGetHandle 函數返回取得的主視窗控制碼 (HWnd) 是一個指標類型。

資料類型和範圍 (Datatypes and Ranges)

下列表格係說明內部的資料類型和應用範圍：

資料類型 | 範圍和注意事項
Int32 | 一個 32-位元 帶符號整數。
Int64 | 一個 64-位元 帶符號整數。
倍精度 | 一個雙倍精確度浮點。
字串 | 可內含的字串最高 2147483647 字元。
二進位 | 二進位資料，可內含的上限最高 2147483647 位元組。
指標 | 一個記憶體位址指標；依使用的 AutoIt 版本分為 32 或 64 位元。

AutoIt 中的某些函數只能使用 32 位元數字 (例如： BitAND) 並自動進行轉換 - 這些函數都有文件說明。


語言參照 - 變數

語言參照 - 變數 (Language Reference - Variables)

變數只是一塊儲存在記憶體中的資料，以加快存取的速度。可以把它想像成記憶體內的信箱，您可以放資訊進去也能將它取出來。例如您建立了一個變數，那麼就可以用它來儲存使用者回應的問題、或方程式計算的結果。

每個變數都有一個名稱 (也一樣，跟信箱很像)，而且必須以 $ 符號做開頭，可以包括的內容只有 字母、數字、和 底線符號。
這裡是一些名稱的示範：

$var1

$my_variable

這些變數都會被做為 變數 (Variant) 儲存。

變數宣告

變數們都可以用 Dim , Local 和 Global 等關鍵字宣告並建立：

Dim $var1

或者您也可以一次宣告多個變數：

Dim $var1, $myvariable

您也可以在第一次 不宣告 而直接指定變數，不過最好還是明確宣告一下：

$var1 = "已建立並被指定"

宣告常數 (Declaring Constant)

常數是使用 Const 關鍵字宣告並建立的，像：

Const $const1 = 1, $const2=12

此外常數也可以用 Enum 關鍵字宣告並初始化，像：

Enum $const1 = 1, $const2, $const3 ; 1, 2, 3
Enum STEP 2 $incr0, $incr2, $incr4 ; 0, 2, 4
Enum STEP *2 $mult1, $mult2, $mult4 ; 1, 2, 4

常數是不能重覆宣告一個已存在變數的。

有效範圍 (Scope)

一個變數的有效範圍，係端看您何時並如何宣告來控制決定。如果您在腳本開頭及 Global 全域範圍內的所有函數外宣告了一個變數，那麼就可以隨意在腳本任何位置上進行讀取或修改了。

如您在 函數 內宣告了一個變數，那麼它就只能在 "相同函數" 的 Local 區域範圍內使用。這些建立於函數內的變數，都會在函數結束時自動被銷毀。

預設只要使用 Dim 或於函數內指定的方式宣告了一個變數，都歸屬於 Local 範圍，除非 有名稱一樣的全域變數 (此情況下會再度使用全域變數)。這個也可以改成用 Local 和 Global 關建字來宣告變數，並 強制 把它們挶限在您想要的有效範圍內。

群組 (Array)

所謂 群組 (Array) 就是內含一序列類型及大小相同的類別 (element) 資料這類變數。這個變數內的每個類別，都可以依索引編號存取。

範例：

讓我們來說明一下，假設您要儲存這一堆符號："A", "U", "T", "O", "I", "T" 和 "3"；
雖然您是可以用七種不同的變數來做，不過用一個群組會更有效率：

$Array[0]="A"
$Array[1]="U"
..等等..
$Array[6]="3"

要存取一個群組內的指定數值的話，您只要知道索引標號就可以了：

$MyChar=$Array[2]

這裡 $MyChar 的結果為內含字母 "T" (也可以看做 '運算子')。

索引編號也可以替換成其它的變數或一個運算式，所以您可以建立一套複雜的方式來指定、或存取一個群組內的類別。

群組也可以是多重範圍類型 (dimensional)，假設您使用到好幾個一序列的索引編號，像：

$Array[0][0]="左上(Upper-Left)"
$Array[1][0]="左下(Lower-Left)"
$Array[0][1]="右上(Upper-Right)"
$Array[1][1]="右下(Lower-Right)"

(這些值只是範例)

在一個群組內，您最多可使用到 64 組範圍，項目總數不能大於 2^24 (16 777 216)。

在您開始使用腳本內的群組之前，必須先使用 'Dim' 關鍵字為它們定義好界限。

群組內的資料類型 (Data types in Arrays)

本來它是說：一個群組內只能內含「一種」資料類型。不過技術文獻提到，在 AutoIt 內，變數可以把來自數字的任何東西都包括在布林變數中。所以這就是說，一個 AutoIt-Array 群組還是可以有不同類型的，甚至是其它群組都可以：

$Array[0]=1
$Array[1]=true
$Array[2]="文字"
$Array[3]=$AnotherArray

這個在 AutoIt 中是不會嚴格禁止的。不過，將不同的資料類型都混合在一個群組中，是很不妥當的。尤其是在一個群組內使用另一個群組，更會讓您的腳本執行速度嚴重受影響。


語言參照 - 巨集

語言參照 - 巨集 (Language Reference - Macros)

AutoIt 具備了一組 巨集，他們是一種十分特別、只給 AutoIt 使用的唯讀變數。巨集是以 @ 符號做開頭，不是以前慣用的 $，所以更易於分辨。雖然您可以用一般的變數在運算式中使用巨集，不過是無法將數值指定給他們的。

事先定義的巨集一般上用來為存取系統訊息提供更簡便的方式，像是：Windows 目錄的位置、登入的使用者名稱等。

請到 這裡 有完整的清單。


語言參照 - 運算子

語言參照 - 運算子 (Language Reference - Operators)

AutoIt 所擁有的聲明類型、數學運算、比對、和邏輯運算子如下：

運算子 | 詳細說明
= | 聲明，例如 $var = 5 (將數字 5 聲明為 $var)
+= | 加入聲明，例如 $var += 1 (將 1 加入聲明為 $var)
-= | 減去聲明。
*= | 相乘聲明。
/= | 相除聲明。
&= | 連接聲明，例如 $var = "一"，然後聲明 $var &= 10 ($var 現在等於 "一10")
+ | 將兩個數字相加：10 + 20 (等於 30)
- | 將兩個數字相減：20 - 10 (等於 10)
* | 將兩個數字相乘：20 * 10 (等於 200)
/ | 將兩個數字相除：20 / 10 (等於 2)
& | 將兩個字串組合/連結："一" & 10 (等於 "一10")
^ | 提升次方：2 ^ 4 (等於 16)
= | 判斷兩個值是否相等 (使用字串時不區分大小寫)，例如：If $var= 5 Then (如 $var 等於 5 則成立)
== | 判斷兩個值是否相等 (使用字串時區分大小寫)。
<> | 判斷兩個值是否不相等。
> | 判斷第一個值是否大於第二個。
>= | 判斷第一個值是否大於或等於第二個。
< | 判斷第一個值是否小於第二個。
<= | 判斷第一個值是否小於或等於第二個。
AND | 邏輯 AND 運算子，例如：If $var = 5 AND $var2 > 6 Then (如 $var 等於 5 且 $var2 大於 6 則成立)
OR | 邏輯 OR 運算子，例如：If $var = 5 OR $var2 > 6 Then (如 $var 等於 5 或 $var2 大於 6 則成立)
NOT | 邏輯 NOT 運算子，例如：NOT 1 (False)

當運算式使用到一個以上的運算子時，計算結果的順序係依 運算子的優先層級 來控制。AutoIt 提供使用的優先層級如下所示，運算式中處於同一優先層級的兩個運算子，將依 "從左至右" 順序計算。

優先層級從高至低排列：

NOT
^
* /
+ -
&
< > <= >= = <> ==
AND OR

例如：2 + 4 * 10 的結果為 42：

4 * 10 (等於 40)

2 + 40 (等於 42)

因為* 擁有比 + 號還高的優先權，它會在進行加法前優先計算。

您可以使用括弧，強制第一次優先計算運算式其它地方：

例如：(2 + 4) * 10 等於 60

請注意下面，使用邏輯運算子 AND, OR 的情況：

例如：If MyFunc1() OR MyFunc2() Then (如 MyFunc1() 返回條件成立，則不呼叫 MyFunc2())

例如：If MyFunc1() AND MyFunc2() Then (如 MyFunc1() 返回條件不成立，則不呼叫 MyFunc2())


語言參照 - 條件陳述式

語言參照 - 條件陳述式 (Language Reference - Conditional Statements)

您會常常遇到要在一個或一連串 "條件" 下修改腳本流程的情況，當某個數值大於另一個的話要怎麼辦？或者是，在一個字串內是否還有某數值存在？等等。

判斷條件的結果不外乎：true -為真 (非零值) 或 false -為否 (零值)。條件通常上會運用到比對 運算子 像 ==, <>, >= 等動作。

在 AutoIt 中可用的條件陳述式如下：

  • If...Then...Else
  • Select...Case
  • Switch...Case

這三種陳述式都差不多，都是根據提供的條件決定執行的程式碼。這裡是一個使用 If 陳述式的範例，作用是若變數大於 10 則彈出一個 MsgBox 訊息：

$var = 20

If $var > 10 Then
MsgBox(0, "範例", "$var 變數大於 10！")
Else
MsgBox(0, "範例", "$var 變數小於 10")
EndIf

在上面的運算式範例中，$var > 10 結果為 true(真)，因為變數確實是大於10！如此一來 If 陳述式會執行第一個 MsgBox 程式行並顯示 "$var 變數大於 10！"。

Select (選擇) 陳述式也跟這個非常類似，不過它通常用在您要測試一堆條件的情況，這是因為它普遍比複雜的 If/ElseIf 還易解讀。

例如：

$var = 30

Select
Case $var > 1 AND $var <= 10
MsgBox(0, "範例", "$var 變數大於 1")

Case $var > 10 AND $var <= 20
MsgBox(0, "範例", "$var 變數大於 10")

Case $var > 20 AND $var <= 30
MsgBox(0, "範例", "$var 變數大於 20")

Case $var > 30 AND $var <= 40
MsgBox(0, "範例", "$var 變數大於 30")

Case $var > 40
MsgBox(0, "範例", "$var 變數大於 40")
EndSelect

Switch (切換) 跟 Select 陳述式也很像，不過它通常用於相同運算式的測試，並依此對應出可能不同的數值。

$var = 30

Switch Int($var)
Case 1 To 10
MsgBox(0, "範例", "$var 變數大於 1")

Case 11 To 20
MsgBox(0, "範例", "$var 變數大於 10")

Case 21 To 30
MsgBox(0, "範例", "$var 變數大於 20")

Case 31 To 40
MsgBox(0, "範例", "$var 變數大於 30")

Case Else
MsgBox(0, "範例", "$var 變數大於 40 或者小於或等於 0")

EndSwitch


語言參照 - 迴圈陳述式

語言參照 - 迴圈陳述式 (Language Reference - Loop Statements)

一個迴圈 (loop) 就是您要腳本相關區段重複執行的次數。您可能需給迴圈循環的次數；或者您可能會希望 - 只要某個條件為真 (true) 或為否 (false)，才決定重複腳本的某段程式碼。

AutoIt 中的可用迴圈陳述式如下：

  • For...Next
  • While...WEnd
  • Do...Until
  • With...Endwith
  • For...In...Next

所有陳述式 (沒有雙關意義) 所執行的函數都是差不多的，每個迴圈功能都有些微的不同，因此通常會有其中一個比另一個所提供的方式，還要好用許多的情況。


語言參照 - 使用者自訂函數

語言參照 - 使用者自訂函數 (Language Reference - User Functions)

自訂函數是一種可以在腳本中呼叫、並執行某個 "函數" 的程式碼區段。在 AutoIt 中有兩種函數： 內建函數 (built-in) 和 使用者自訂函數 (user functions)。

內建函數 (built-in)

內建函數的完整清單都在 這裡，至於使用他們的注意事項則在 這裡。

使用者函數 (user functions)

使用者函數可以用 Func...EndFunc 陳述式來宣告定義。

自訂函數可依照需要自訂參數和返回值。

自訂函數名稱必須以字母或一個底線做開頭，其它的部份則可以隨意組合字母和數字、底線。下面是一些有效的函數名稱：

MyFunc

Func1

_My_Func1

這邊是一個使用自訂函數的範例，作用是將數字相乘兩倍 10 次：

$val = 10
For $i = 1 To 10
$doubled = MyDouble($val)
MsgBox(0, "", $val & " 乘兩倍的結果為： " & $doubled)
$val = $doubled
Next

Exit

Func MyDouble($value)
$value = $value * 2
Return $value
EndFunc


語言參照 - 註解

語言參照 - 註解 (Language Reference - Comments)

雖然每個陳述式只允許佔用一行，但是較長的陳述式，可以在 "漏掉" 的那行尾端加一個空白和底線 " _"， 如此就可以跨越數行了。至於字串定義，是不能分成好幾行的，所以還是必須連續使用。

MsgBox(4096,"", "這一行相當長，所以我用底線 「 _」連接" & _
"漏掉的部份。")

分號 (;) 是用來做註解的。除非它在字串裡面，否則所有跟隨在後面的字串，將全部被腳本直譯器/編譯器忽略掉。

; 下面一行結尾內含說明用意的註解：
Sleep(5000) ;暫停 5 秒

您可以搭配使用底線和分號放在該行的註解上，讓冗長的陳述式仍可以連續跨越到下一行：

dim $b_ ; 這個 _ 底線不是連續符號，也不能到下一行
dim $k_
Dim $a[8][2] = [ _
[ "文字", 4 ], _ ; 註解 1
[ "測試", 3 ], _
[ "pi", 3.14159], _ ; 以數值將名稱連接起來
[ "e", 2.718281828465], _ ; 這邊也一樣
[ "測試；1;2;3", 123], _
[ ';', Asc(';') ], _ ; 此區段的註解已移除，不過字串仍然保留
["", 0] ]

也可以用 #comments-start 和 #comments-end 指令將一大段腳本批次註解。


GUI 參照

GUI 參照 (GUI Reference)

  • GUI 的概念
  • GUI MessageLoop 模式
  • GUI OnEvent 模式


GUI 視窗參照

GUI 視窗參照 (GUI Reference)

AutoIt 腳本可建立出由視窗及控制項所組成的簡單圖形使用者介面 (Graphical User Interfaces -GUI)

GUI 的概念

GUI 是由一個或數個 "視窗" 組成，而每個視窗又有一個以上的 "控制項"。GUI 是靠 "已驅動事件" 來實現與使用者互動的 - 像一個按鈕的點選動作即是。您可以閒耗時間擱置程式並等待事件發生 - 這是它與一般腳本的稍微不同之處，因為您可隨心所欲控制發生的事件跟時間！可以想像一下自己正在門邊等郵差 - 您一直坐在那兒直有信被送進郵筒，等郵差把信送來了，您就會閱讀信件並決定下一步要做什麼，這就是 GUI 的概念：您是在等待郵差直到信被送來為止。

當然，在 GUI 執行時您也可以選擇要做其它工作 - 像是用 GUI 函數建立一個自動更新狀態的進度列，同時以腳本執行其它複雜的動作。

GUI 控制項

所有使用者應該都對控制項非常瞭解了 - 任何在視窗上能被點選或進行互動的部分，全都是控制項的一種。AutoIt 可建立的控制項類型如下 - 您肯定已在其它 Windows 程式中用過它們：

標籤(Label) | 一段由純文字組成的內容。
按鈕(Button) | 一個簡單的按鈕。
輸入框(Input) | 一個單行編輯框控制項，可輸入文字。
編輯框(Edit) | 一個多行編輯框控制項，可輸入文字。
複選框(Checkbox) | 一個可 "選取" 或 "取消選取" 的複選框。
單選框(Radio) | 一個圓形按鈕 - 每次只能啟動/選擇其中一個。
下拉式選單(Combo) | 一個可往下拉的清單框。
清單(List) | 一個清單。
日期(Date) | 一個日期選擇物件。
圖片(Pic) | 一張圖片。
圖示(Icon) | 一個圖示。
進度列(Progress) | 一個進度列。
籤頁(Tab) | 一個內含數個籤頁的控制項群組 (Group)。
調整控制(UpDown) | 一個可被加入到輸入框的控制項。
AVI | 一個以 AVI 格式顯示的動畫。
選單(Menu) | 一個橫列於視窗上方的選單。
右鍵選單(ContextMenu) | 一個在視窗上點選右鍵彈出的選單。
樹狀檢視(TreeView) | 一個跟視窗的檔案管理員相當類似的控制項。
滑動軸(Slider) | 一個跟視窗的音量控制相當類似的控制項。
檢視清單(ListView) | 一個顯示欄位資訊的控制項。
檢視清單項目(ListViewItem) | 一個顯示於 ListView 內的類別控制項。
圖片物件(Graphic) | 一個由 GUICtrlSetGraphic 描繪顯示出的圖片控制項。
虛擬物件(Dummy) | 一個虛擬的使用者控制項。

下面是一個視窗 GUI 範例，它包括了許多被 AutoIt 支援的控制項，從這張圖您可以看到 AutoIt 可建立內容非常豐富的 GUI(s)！

使用 GUICtrlCreate... 等函數即可建立控制項。在建立時函數會返回 控制項ID，關於控制項ID有幾個注意事項：

  • 控制項 ID 是一個正數 (也是說該數必大於 0)
  • 每個控制項 ID 都是獨一無二的 - 即使有多個視窗存在亦然
  • 由 AutoIt 視窗訊息工具 顯示取得的控制項 ID，跟您想要的是完全一樣的

    • GUI 基本函數

    下面這些就是您將用於建立 GUI 的主要函數，但這些都是比較初階的應用，如果您已經準備好要建立更進階的 GUI，那麼還有許多可用：

    函數 | 解釋說明
GUICreate | 建立一個視窗。
GUICtrlCreate... | 在視窗上建立各種控制項。
GUISetState | 顯示或隱藏視窗。
GUIGetMsg | 通知 GUI 檢查是否有事件發生 (僅限 MessageLoop 訊息迴圈模式)。
GUICtrlRead | 讀取控制項的資料。
GUICtrlSetData | 設定/修改控制項的資料。
GUICtrlSet... | 調整控制項的各種不同選項 (顏色、類型等等)。

    您需先包括檔案 [#include <GUIConstantsEx.au3>] 為基本 GUI 相關常數做引導，它已包括了其它檔案，還有各種控制項相關常數，讓您可以在 GUI 上建立視窗。

    讓我們先來建立一個視窗吧，把它命名為 "Hello World"，設定其大小分別為 200 和 100 個像素。當一個新視窗被建立時它是被隱藏的 - 所以我們還要把它給 "秀(SHOW)" 出來。

    #include <GUIConstantsEx.au3>

    GUICreate("Hello World", 200, 100)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    如果執行上面的腳本，您會看到一個視窗出現並在兩秒後消失。看來很沒有意思哦...那讓我們新增一些文字和一個 "還OK吧" 按鈕到視窗上吧！把文字加入到 30, 10 這個位置並把按鈕放到 70, 50 這個位置，此外按鈕寬度設為 60 像素。

    #include <GUIConstantsEx.au3>

    GUICreate("Hello World", 200, 100)
    GUICtrlCreateLabel("Hello world! 您好嗎？", 30, 10)
    GUICtrlCreateButton("還OK吧", 70, 50, 60)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    好，現在看來還不錯，但是要怎樣使這個 GUI 能反應我們點選按鈕的事件呢？嗯，這時我們必須先決定究竟如何處理事件 - 要麼利用 訊息迴圈(MessageLoop) 不然就利用 OnEvent 函數。

    GUI 事件模式

    正如上面所提到的那樣，我們有兩種基本的 GUI 模式：訊息迴圈(MessageLoop) 模式和 OnEvent 模式。這兩種簡單的不同模式都是反應 GUI 事件的方法。要選取哪一種模式主要看您的 個人喜好、以及您想要建立 GUI 類型的程度是如何了。這兩種模式都能用於建立任何您想要的 GUI，只不過某些時候使用其中一個會比另外一個要好用些。

    訊息迴圈(MessageLoop) 是預設的模式，要切換為 OnEvent 模式請使用：Opt("GUIOnEventMode", 1)。

    訊息迴圈模式 (預設) - MessageLoop

    在訊息迴圈模式下，腳本大部分時間都在執行一個非常短的迴圈，這個迴圈會使用 GUIGetMsg 函數簡單地檢查 GUI 視窗。當某個事件發生時 GUIGetMsg 函數會把詳細訊息作為返回值返回 (如某個按鈕被按下、GUI被關閉，等等)。

    在此模式下，只有當我們頻繁地使用 GUIGetMsg 函數時才有可能接收到事件，因此您必須確定能在一秒內不斷呼叫該函數，否則您的 GUI 將無法對事件做出回應。

    此模式最適合用於那些以 GUI 為 "主要對象(king)" 的腳本中，而且您在乎的就是等待使用者事件發生。

    如要了解關於 訊息迴圈模式(MessageLoop) 的更詳細說明請到 此頁 檢視。

    OnEvent 模式

    在 OnEvent (事件驅動) 模式下，腳本不會頻繁地要求檢查 GUI 是否有任何事件發生，而是僅當某個事件發生時 GUI 才臨時暫停腳本，並呼叫一個使用者事先定義的函數來處理事件。例如，假定使用者點選了 "按鈕1"，則 GUI 將擱置主腳本並呼叫某個事先定義的使用者函數來處理 "按鈕1" 事件。當函數呼叫完成後主腳本才會繼續執行。此模式較像 Visual Basic 視窗所用的方法。

    此模式最適合用於那些 GUI 處於第二重要地位的腳本中，而且您的腳本除了有 GUI 要注意外，還要執行其它的工作。

    如要了解關於 OnEvent 模式 的更詳細說明請到 此頁 檢視。


GUI 視窗說明 - MessageLoop 模式

在訊息迴圈模式下，腳本大部分時間都在執行一個非常短的迴圈，這個迴圈會使用 GUIGetMsg 函數簡單地檢查 GUI 視窗。當某個事件發生時 GUIGetMsg 函數會把詳細訊息作為返回值返回 (如某個按鈕被按下、GUI被關閉，等等)。

MessageLoop 是為 AutoIt GUI 預設的訊息模式 - 另一個可用的模式為：OnEvent 模式。

在此模式下，只有當我們頻繁地使用 GUIGetMsg 函數時才有可能接收到事件，因此您必須確定能在一秒內不斷呼叫該函數，否則您的 GUI 將無法對事件做出回應。

MessageLoop 的基本格式

MessageLoop 代碼的一般設計佈局如下：

While 1
$msg = GUIGetMsg()
...
...
WEnd

通常上這類迴圈週期非常短的腳本通常會把 CPU 佔用率推到高達 100% - 幸運的是 GUIGetMsg 函數可在無等待事件時自動閒置 CPU。另外 千萬不要 因為怕增加 CPU 的負載而自己新增休眠 Sleep 到腳本中 - 這麼做只會讓 GUI 反應遲鈍。

GUI 事件

GUIGetMsg 返回的事件訊息有以下三種：

  • 無事件
  • 控制項事件
  • 系統事件

    • 無事件

    當沒有任何可等待進行處理的事件時 GUIGetMsg 會返回 0。在一般的 GUI 中這也是 最常發生的事件。

    控制項事件

    當有某個控制項被點選或有一個修改過的控制項事件傳送 - 這類事件都是 正數，該值跟用 GUICtrlCreate... 建立控制項所返回的控制項ID 是完全一樣的。

    系統事件

    系統事件 - 像是 GUI 關閉的動作 - 都是 負數。各種系統事件列出如下且在 GUIConstantsEx.au3 中有定義：

    $GUI_EVENT_CLOSE
    $GUI_EVENT_MINIMIZE
    $GUI_EVENT_RESTORE
    $GUI_EVENT_MAXIMIZE
    $GUI_EVENT_PRIMARYDOWN
    $GUI_EVENT_PRIMARYUP
    $GUI_EVENT_SECONDARYDOWN
    $GUI_EVENT_SECONDARYUP
    $GUI_EVENT_MOUSEMOVE
    $GUI_EVENT_RESIZED
    $GUI_EVENT_DROPPED

    GUI 範例

    在 GUI 視窗說明 (GUI Reference) 的主頁面上，我們曾編寫過一個簡單的 Hello World 範例像這樣：

    #include <GUIConstantsEx.au3>

    GUICreate("Hello World", 200, 100)
    GUICtrlCreateLabel("Hello world! 你好嗎？", 30, 10)
    GUICtrlCreateButton("還OK吧", 70, 50, 60)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    現在我們來使用 MessageLoop 以及上面說明的事件訊息來完成代碼。通常上因為訊息可用數量的因素考量，所以我們使用可讀性較好的條件選擇陳述式 (Select statement)：

    #include <GUIConstantsEx.au3>

    GUICreate("Hello World", 200, 100)
    GUICtrlCreateLabel("Hello world! 你好嗎？", 30, 10)
    $okbutton = GUICtrlCreateButton("還OK吧", 70, 50, 60)
    GUISetState(@SW_SHOW)

    While 1
    $msg = GUIGetMsg()

    Select
    Case $msg = $okbutton
    MsgBox(0, "GUI 事件", "您已按下「還OK吧」")

    Case $msg = $GUI_EVENT_CLOSE
    MsgBox(0, "GUI 事件", "您已按下關閉！結束執行...")
    ExitLoop
    EndSelect
    WEnd

    很簡單，對吧？很明顯建立的視窗及控制項越多則會越複雜，但基本都是類似上面您所見的那樣。

    進階的 GUIGetMsg 和多重視窗

    即使有很多視窗存在，控制項 ID 也是唯一的，因此如上面帶控制項及數個視窗的代碼可以順利執行。但是，在處理如 $GUI_EVENT_CLOSE 或 $GUI_MOUSEMOVE 等訊息時，您還必須知道究竟是哪個視窗引發的事件。為了解決這個問題，您必須呼叫 GUIGetMsg 函數像這樣：

    $msg = GUIGetMsg(1)

    在函數 GUIGetMsg 中指定 1 參數進行呼叫時，它將取代事件值而返回一個 群組(array)。這個群組不僅內含事件 (在$array[0]中)，還內含其它訊息如視窗控制碼等 (在$array[1]中)。假如在先前的範例中我們要建立兩個視窗，則腳本代碼的正確撰寫方式是：

    #include <GUIConstantsEx.au3>

    $mainwindow = GUICreate("Hello World", 200, 100)
    GUICtrlCreateLabel("Hello world! 你好嗎？", 30, 10)
    $okbutton = GUICtrlCreateButton("還OK吧", 70, 50, 60)

    $dummywindow = GUICreate("這是測試用的虛設視窗", 200, 100)

    GUISwitch($mainwindow)
    GUISetState(@SW_SHOW)

    While 1
    $msg = GUIGetMsg(1)

    Select
    Case $msg[0] = $okbutton ;注意這裡的$msg[0]和後面的$msg[1]
    MsgBox(0, "GUI 事件", "您已按下「還OK吧」")

    Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $mainwindow
    MsgBox(0, "GUI 事件", "您已點選主視窗上的「關閉」！結束執行...")
    ExitLoop
    EndSelect
    WEnd

    第一個主要的修改是 GUISwitch 函數的呼叫 - 當新的視窗被建立後，即變成後面所有 GUI 動作的 "預設" 視窗 (包括建立控制項在內)。在我們的例子中要執行的是重要的 "Hello World" 視窗，而不是測試視窗，所以我們用了 GUISwitch 函數。某些 GUI 函數允許您讓函數本身在呼叫時，使用視窗控制碼 - 那麼這些函數屆時就會執行自動切換動作了。所以在這個範例中，我們可以用這樣的方式來完成：

    GUISetState(@SW_SHOW, $mainwindow)

    另一項修改就是 GUIGetMsg 函數的呼叫以及決定事件如何被選取的方式，請注意一下 $msg[0] 和 $msg[1] 的使用 - 現在我們可以讓視窗的關閉按鈕被點選後，而且 是從主視窗傳送關閉事件的條件下，才離開 GUI 了。


GUI 視窗說明 - OnEvent 模式

在 OnEvent (事件驅動) 模式下，腳本不會頻繁地要求檢查 GUI 是否有任何事件發生，而是僅當某個事件發生時 GUI 才臨時暫停腳本，並呼叫一個使用者事先定義的函數來處理事件。例如，假定使用者點選了 "按鈕1"，則 GUI 將擱置主腳本並呼叫某個事先定義的使用者函數來處理 "按鈕1" 事件。當函數呼叫完成後主腳本才會繼續執行。此模式較像 Visual Basic 視窗所用的方法。

當 GUI 執行時，您的主腳本還可以做其它一般的工作，但為了方便示範，我們只是讓主腳本在一個無窮 While 迴圈裡 "閒置" 一下。

因為 MessageLoop 訊息迴圈是預設的模式，所以在使用 OnEvent 模式之前，我們必須先使用 Opt("GUIOnEventMode", 1)。

OnEvent 的基本格式

OnEvent 代碼的一般設計佈局如下：

While 1
Sleep(1000) ; 閒置一段時間不動作
WEnd

Func Event1()
; 處理事件的代碼在這裡執行
EndFunc

Func Event2()
; 處理事件的代碼在這裡執行
EndFunc

GUI 事件

在 OnEvent 模式下您的 GUI 將產生下列 "事件"：

  • 控制項事件
  • 系統事件

    • 如有為 GUI (GUISetOnEvent) 或一個控制項 (GUICtrlSetOnEvent) 的其中一項設定了函數，則這兩種事件類型都將呼叫使用者事先定義的函數。如沒有為某事件定義函數，則該事件會直接被忽略。在這些被呼叫的函數內，我們將須設定各種巨集的數值以協助處理事件：

    巨集 | 詳細說明
@GUI_CTRLID | 傳送訊息的控制項ID 或是 系統事件ID。
@GUI_WINHANDLE | 傳送訊息的 GUI 控制碼。
@GUI_CTRLHANDLE | 傳送訊息的控制項控制碼 (如果可用的話)

    請注意：使用同一個函數來回應好幾個事件是完全合法的，在這類例子中您要做的就是靈活應用以 @GUI_CTRLID 巨集為基礎的動作。例如，您可以註冊所有系統事件到同一個函數。

    控制項事件

    當有某個控制項被點選或有一個修改過的控制項事件被傳送，該事件將被傳到由 GUICtrlSetOnEvent 定義的函數中。在控制項被以 GUICtrlCreate... 等函數建立後，會在使用者定義函數中，為返回的 控制項ID 設定 @GUI_CTRLID。

    系統事件

    系統事件 - 像是 GUI 關閉的動作 - 會以類似控制項事件的方式被傳送，不過事件類型是由 @GUI_CTRLID 所定義的。 系統事件被傳送到由 GUISetOnEvent 定義的函數中，可用的系統事件如下：

    $GUI_EVENT_CLOSE
    $GUI_EVENT_MINIMIZE
    $GUI_EVENT_RESTORE
    $GUI_EVENT_MAXIMIZE
    $GUI_EVENT_PRIMARYDOWN
    $GUI_EVENT_PRIMARYUP
    $GUI_EVENT_SECONDARYDOWN
    $GUI_EVENT_SECONDARYUP
    $GUI_EVENT_MOUSEMOVE
    $GUI_EVENT_RESIZED
    $GUI_EVENT_DROPPED

    GUI 範例

    在 GUI 視窗說明 (GUI Reference page) 的主頁面上，我們曾編寫過一個簡單的 Hello World 範例像這樣：

    #include <GUIConstantsEx.au3>

    GUICreate("Hello World", 200, 100)
    GUICtrlCreateLabel("Hello world! 你好嗎？", 30, 10)
    GUICtrlCreateButton("還OK吧", 70, 50, 60)
    GUISetState(@SW_SHOW)
    Sleep(2000)

    現在我們來使用 OnEvents 以及上面說明的事件訊息來完成代碼。

    #include <GUIConstantsEx.au3>

    Opt("GUIOnEventMode", 1) ; 切換為 OnEvent 模式
    $mainwindow = GUICreate("Hello World", 200, 100) ;建立視窗並返回視窗控制碼
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") ;設定視窗關閉事件
    GUICtrlCreateLabel("Hello world! 你好嗎？", 30, 10)
    $okbutton = GUICtrlCreateButton("還OK吧", 70, 50, 60)
    GUICtrlSetOnEvent($okbutton, "OKButton")
    GUISetState(@SW_SHOW)

    While 1
    Sleep(1000) ; 閒置一段時間
    WEnd

    Func OKButton()
    ;請注意：此時 @GUI_CTRLID 將等於 $okbutton
    ;而 @GUI_WINHANDLE 將等於 $mainwindow
    MsgBox(0, "GUI 事件", "您已按下「還OK吧」！")
    EndFunc

    Func CLOSEClicked()
    ;請注意：此時 @GUI_CTRLID 將等於 $GUI_EVENT_CLOSE
    ;而 @GUI_WINHANDLE 將等於 $mainwindow
    MsgBox(0, "GUI 事件", "您已按下關閉！結束執行...")
    Exit
    EndFunc

    它相當的簡單，很明顯建立的視窗及控制項越多則會越複雜，但基本都是類似上面您所見的那樣。

    進階的動作和多重視窗

    即使有很多視窗存在，控制項 ID 也是唯一的，但是我們要如何處理多重視窗呢？

    這個範例和上面的很像，但多出了另一個 "虛擬的(dummy)" 視窗 。

    #include <GUIConstantsEx.au3>

    Opt("GUIOnEventMode", 1) ; 切換為 OnEvent 模式
    $mainwindow = GUICreate("Hello World", 200, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUICtrlCreateLabel("Hello world! 你好嗎？", 30, 10)
    $okbutton = GUICtrlCreateButton("還OK吧", 70, 50, 60)
    GUICtrlSetOnEvent($okbutton, "OKButton")

    $dummywindow = GUICreate("這是測試用的虛擬視窗", 200, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

    GUISwitch($mainwindow)
    GUISetState(@SW_SHOW)

    While 1
    Sleep(1000) ; 閒置一段時間
    WEnd

    Func OKButton()
    ;請注意：此時 @GUI_CTRLID 將等於 $okbutton
    MsgBox(0, "GUI 事件", "您已按下「還OK吧」！")
    EndFunc

    Func CLOSEClicked()
    ;請注意：此時 @GUI_CTRLID 將等於 $GUI_EVENT_CLOSE,
    ;@GUI_WINHANDLE 將等於 $mainwindow 或 $dummywindow
    If @GUI_WINHANDLE = $mainwindow Then
    MsgBox(0, "GUI 事件", "您已點選主視窗上的「關閉」！結束執行...")
    Exit
    EndIf
    EndFunc

    第一個主要的修改是 GUISwitch 函數的呼叫 - 當新的視窗被建立後，即變成後面所有 GUI 動作的 "預設" 視窗 (包括建立控制項在內)。在我們的例子中要執行的是重要的 "Hello World" 視窗，而不是測試視窗，所以我們用了 GUISwitch 函數。某些 GUI 函數允許您讓函數本身在呼叫時，使用視窗控制碼 - 那麼這些函數屆時就會執行自動切換動作了。所以在這個範例中，我們可以用這樣的方式來完成：

    GUISetState(@SW_SHOW, $mainwindow)

    另外要注意的就是：我們使用了同一個 OnEvent 函數來處理兩個視窗的 "關閉" 事件，然後使用 @GUI_WINHANDLE 來識別傳送訊息的視窗是哪一個 - 現在我們可以讓視窗的關閉按鈕被點選後，而且 是從主視窗傳送關閉事件的條件下，才離開 GUI 了。如您喜歡的話，也可以只是簡單地為各個視窗指定不同的函數。


關鍵字參照說明

關鍵字參照說明（Keyword Reference）

下面是AutoIt所用所有關鍵字的清單。點選關鍵字名稱即可檢視其相關說明。

關鍵字 | 詳細說明
#comments-start | 用於將腳本一大段陳述式批註。
ContinueCase | 放棄目前 Case，並於下一個 Select 及 Switch 資料段 Case 中建立新的 Case。
ContinueLoop | 跳過 While/Do/For 陳述式中的當前迴圈而繼續下一個。
Default | 將關鍵字數值用於函數呼叫。
Dim / Global / Local / Const | 聲明一個變數、常數、或建立群組。
Do...Until | 基於運算式的迴圈。
Enum | 列出常數。
Exit | 結束腳本。
ExitLoop | 結束一個 While/Do/For 迴圈。
False / True | 用於邏輯運算式的布林值。
For...In...Next | 列出於物件集合或某群組 (Array) 的各種類別。
For...To...Step...Next | 基於運算式的迴圈。
Func OnAutoItExit ()...EndFunc | 定義一個使用者自訂函數，用於腳本結束時呼叫。
Func OnAutoItStart ()...EndFunc | 定義一個使用者自訂函數，用於腳本開啟前呼叫。
Func...Return...EndFunc | 定義一個使用者自訂函數，此函數可帶零值或一個以上的參數，並選擇是否返回結果。
If...ElseIf...Else...EndIf | 多重條件分支陳述式。
If...Then | 單一條件分支陳述式。
#include | Include 指定檔案到腳本中。
#include-once | 設定當前檔案只能被 "include" 一次。
#NoTrayIcon | 指定在腳本程式執行時不顯示 AutoIt 常駐圖示。
ReDim | 修改已存在群組的大小。
#RequireAdmin | 指定在腳本程式執行時要求需有完整管理員權限。
Select...Case...EndSelect | 條件執行陳述式。
Switch...Case...EndSwitch | 條件執行陳述式。
While...WEnd | 基於運算式的迴圈。
With...EndWith | 用於縮短參照到物件類型變數的長度。


Keyword #comments-start

關鍵字說明 (Keyword Reference)

#comments-start

用於將腳本一大段陳述式批註。

#comments-start
...
...
#comments-end

參數

無。

附註

#comments-start 和 #comments-end 指令可巢狀崁入使用。
您也可以用縮寫關鍵字 #cs 和 #ce 代替。
除此之外，這個指令本身也可以被註解！

相關

#include, #include-once

範例

#comments-start
MsgBox(4096, "", "這一段是不執行的")
MsgBox(4096, "", "換成這個訊息")
#comments-end

;;; #cs
MsgBox(4096, "", "若已註解 '#cs' 則列出這個訊息。")
#ce


Keyword #include

關鍵字說明 (Keyword Reference)

#include

Include 指定檔案到腳本中。

#include "[路徑\]檔案名稱"
#include <檔案名稱>

參數

檔案名稱 當前腳本要 include 的檔案名稱。路徑可選擇使用，這一個必須是字串--不能是變數。
如使用 "..." 則以目前腳本的相對位置來取得檔案名稱。
如使用<...> 則以 include 資料庫目錄的相對位置來取得檔案名稱 (通常位於 C:\Program Files\AutoIt3\Include 下)。在 include 資料庫目錄中，已內含許多事先寫好的使用者函數給您使用！

附註

在 AutoIt 腳本中，其它的腳本也可以用 "#include" 指令包括進去。

要運用 include 資料庫語法的話 (#include <檔案>)，AutoIt 必須用支援的安裝程式做過安裝，否則程式將會因為無從得知安裝目錄的位置，換成使用當前的腳本目錄 (@ScriptDir\Include)。

如果您在 include 相同檔案內，還多次包括某個使用者函數的話，將會收到一個 "函式名稱重覆 (Duplicate function name)" 的錯誤訊息。因此在撰寫會運用到這方式的 include 檔案時，請確定在腳本上面那行包括了 #include-once 指令，避免檔案被重覆包括進來。

在 "HKEY_CURRENT_USER\Software\AutoIt v3\AutoIt" 登錄下會建立一個特別的數值，它叫做 "Include"，這個機碼應該是一個 REG_SZ (字串) 數值。這個值的內容是一串用分號區隔的控管清單，它會在 AutoIt 解析 #include 的標準位置時，另外搜尋所有可能的檔案。

AutoIt 搜尋的順序係依照您使用 #include 的方式而定，下方的表格列出了搜尋順序的方向，有兩種格式：

使用 #include <> 方式
標準資料庫 | 以執行附帶 "\Include" 直譯器所在當前目錄的路徑做搜尋。
使用者自訂資料庫 | 讀取上方提到的登錄值、並照他們出現的順序搜尋每個目錄。
腳本目錄 | 當前執行腳本的所在目錄。

使用 #include "" 方式 (這個跟 #include <> 的方向是相反的)
腳本目錄 | 當前執行腳本的所在目錄。
使用者自訂資料庫 | 讀取上方提到的登錄值、並照他們出現的相反順序搜尋每個目錄。
標準資料庫 | 以執行附帶 "\Include" 直譯器所在當前目錄的路徑做搜尋。

請注意一下關於 /AutoIt3ExecuteScript 選項的使用。 一旦從目前直譯器目錄下開始標準資料庫搜尋的時候，它將會找不到標準資料庫函數。這個函數只有透過 AutoIt3.exe 才能被找到，因此建議您在嘗試以 /AutoIt3ExecuteScript 指令執行前，先將腳本編譯為 *..a3x 格式再進行。

Aut2Exe 使用跟 AutoIt3.exe 相同的演算法，唯一不同的地方是，它會搜尋 Include 下的子目錄，這是因為它會將本身鄰近的資料夾 (..\Include) 都翻過一遍。

如 Opt("TrayIconDebug",1)，則此指令最多只能在工具提示中顯示 64 個 include 檔案名稱，至於其它檔案名稱將無法顯示出來。

相關

#include-once, FileInstall

範例

;;; TIME.AU3 ;;;
MsgBox(0,"", "時間為 " & @HOUR & "：" & @MIN & "：" & @SEC)

;;; SCRIPT.AU3 ;;;
#include "TIME.AU3"
MsgBox(0,"", "範例")
#include "TIME.AU3"
Exit

; 執行 script.au3 會輸出三個訊息框：
; 一個是時間、一個是 "範例"、另一個也是時間


Keyword #include-once

關鍵字說明 (Keyword Reference)

#include-once

設定當前檔案只能被 "include" 一次。

#include-once

參數

無。

附註

如果您在 include 相同檔案內，還多次包括某個使用者函數的話，將會收到一個 "函式名稱重覆 (Duplicate function name)" 的錯誤訊息。因此在撰寫會運用到這方式的 include 檔案時，請確定在腳本上面那行包括了 #include-once 指令，避免檔案被重覆包括進來。

相關

#include, FileInstall

範例

;;; LIBRARY.AU3 ;;;
#include-once

Func myFunc()
MsgBox(0,"", "您好，它來自 library.au3")
EndFunc

;;; SCRIPT.AU3 ;;;
#include "Library.au3"
#include "Library.au3" ; 如沒有使用 #include-once 就拋出一個錯誤

MsgBox(0, "範例", "這是一個 'script.au3' 格式檔案")
myFunc()
Exit

; 執行 script.au3 會輸出兩個訊息框：
; 第一個會說 "這是一個 'script.au3' 格式檔案"
; 而另一個則說 "您好，它來自 library.au3"


Keyword #NoTrayIcon

關鍵字說明 (Keyword Reference)

#NoTrayIcon

指定在腳本程式執行時不顯示 AutoIt 常駐圖示。

#NoTrayIcon

參數

無。

附註

此指令也可以使用 Opt("TrayIconHide", 1) 將 AutoIt 常駐圖示移除，不過第二次執行腳本的時候還是看的見。只要在您的腳本上方放 #NoTrayIcon 指令，就可以讓圖示不會在開啟時被顯示出來了。

您也可以讓圖示稍後自己重新出現，使用 Opt("TrayIconHide", 0) 即可。

相關

TrayIconHide (Option)

範例

#NoTrayIcon
MsgBox(4096,"選擇確定","顯示常駐圖示 5 秒...")
Opt("TrayIconHide", 0) ;不隱藏圖示
Sleep(5000)


Keyword #RequireAdmin

關鍵字說明 (Keyword Reference)

#RequireAdmin

指定在腳本程式執行時要求需有完整管理員權限。

#RequireAdmin

參數

無。

附註

此函數主要是為了讓 AutoIt 腳本能順利地在使用者帳戶控制 (UAC) 環境下使用的 (不過，在 Windows 2000 和 Windows XP 下也是可以)。

更多相關的詳細說明請見：在 Windows Vista 上使用 AutoIt。

當此函數執行一個新的程序時，某些函數像 Consolewrite() 是無法被擷取的 (Scite 不會顯示任何訊息)。

相關

無。

範例

#RequireAdmin

MsgBox(4096,"訊息","現在已經以管理員權限執行")


Keyword Func...Return...EndFunc

關鍵字說明 (Keyword Reference)

Func...Return...EndFunc

定義一個使用者自訂函數，此函數可帶零值或一個以上的參數，並選擇是否返回結果。

Func 函數名稱 ( [Const] [ByRef] $參數1, ..., [Const] [ByRef] $參數N, $選擇性參數1 = 數值, ...)
...
[Return [數值]]
EndFunc

參數

參數是由您設定的。您可以像其它內建的函數那樣，稍後用來做函數呼叫。

附註

Const 常數關鍵字是選擇性的，係表示該參數值在執行函數時不允許修改。一個宣告了常數的變數，只能用一個 Const 參數被傳遞至函數內。

ByRef 關鍵字可以選擇是否要用，係表示：(1) 參數必須為一個變數 (2) 原始變數必須跟參數是有關聯的；所以在函數內對參數的任何修改，將會同樣影響到原始變數。預設值上，一個參數是 經由數值來傳遞 的，這也表示說該參數值的副本，會被函數私自做過修改。

ByRef 和 Const 關鍵字的順序並不重要，只要它們被置於變數的前方，就可以修改。

群組 (Array) 也可以被傳遞至函數內 (同樣也如此返回)，只要簡單地使用群組名稱即可，不需要任何括號。群組應該用 ByRef 關鍵字來傳送至使用者自訂函數，以避免群組內的所有資料被複製進來。

定義的選擇性參數是經由指定預設值所給予的，該值可能是一個全域變數、巨集或原始數值。該參數始終都會出現在函數定義的最後面，所有在第一個選擇性參數後加入的參數，都必須一樣也能選擇是否使用。在函數內，所給予的參數數字，可以在函數呼叫時藉由 @NUMPARAMS 巨集來取得。

請使用 Return 關鍵字來結束函數，它跟內建的函數不同，使用者自訂函數會返回 0，除非另外指定了返回值。

請注意函數的宣告，它不能出現在其它函數宣告內。

相關

Dim/Global/Local, #include, Const

範例

; 使用三個使用者自訂函數的簡單腳本
; 注意一下變數、ByRef、和 Return 的使用

$foo = 2
$bar = 5
msgBox(0,"今天是：" & today() & ".........", "$foo 等於 " & $foo)
swap($foo, $bar)
msgBox(0,"將 $foo 和 $bar 換掉的結果 ........", "$foo 目前內含：" & $foo)
msgBox(0,"最後的結果", "3 和 4 中較大的數字是：" & max(3,4))
Exit

Func swap(ByRef $a, ByRef $b) ;將兩個變數的內容換掉
Local $t
$t = $a
$a = $b
$b = $t
EndFunc

Func today() ;依 yyyy/mm/dd 格式返回目前的日期
return (@YEAR & "/" & @MON & "/" & @MDAY & "日")
EndFunc

Func max($x, $y) ;返回這兩個數字中較大的一方
If $x > $y Then
return $x
Else
return $y
EndIf
EndFunc

;結束範例腳本


Keyword Dim / Global / Local / Const

關鍵字說明 (Keyword Reference)

Dim / Global / Local / Const

聲明一個變數、常數、或建立群組。

Dim [Const] $variable [ = 初始化參數(initializer) ]
Dim [Const] $array[下標符號 1]...[下標符號 n] [ = 初始化參數(initializer) ]

參數

Const (常數) | [選擇性參數] 如果出現，則常數關鍵字會建立一個常數，而不是變數。
$variable | 要宣告的變數/常數名稱。
初始化參數(initializer) | 此數值會於初始的時候就被指定為變數。一個常數都須包括一個初始化參數，該參數可用於函數呼叫。
下標符號 | 為群組範圍所建立的類別 (element) 數量，索引編號從 0 至 n-1。

附註

Dim/Local/Global 關建字的作用與函數很像：
1. 您在使用前必須先宣告一個變數 (與 VBScript 類似)
2. 都可以建立一個群組

請注意：在 AutoIt 中您是可以簡單地指定一個數值來建立變數的 ($myvar = 0)，不過還是有許多人喜歡明確為他們做宣告。如啟用 AutoItSetOption("MustDeclareVars", 1) 設定的話，那麼這些變數都須宣告以備往後的需要。

您也可以在一行中宣告好幾個變數：

Dim $a, $b, $c

至於初始化變數為：

Dim $a = 2, $b = 10, $c = 20

常數的建立用簡單的方式就可以完成：

Const $a = 2, $b = 10, $c = 20
Dim Const $d = 21, $e = Exp(1)
Local Const $f = 5, $g = 7, $h = -2

一但建立了常數，您就不能再修改任何數值，也就是說，您是不能變動存在於常數內的任何變數的。

要初始化一個群組，須為方括號內的每個類別 (element) 指定好數值，再以逗號分隔。至於多重範圍，只要巢狀崁入初始化參數就可以了。您可以在初始化參數內少量指定一些類別、再行宣告，但別用太多。此外函數呼叫也可以被置於群組的初始化參數 (initializer) 中，如該函數呼叫後返回了一個群組，將該群組類別 (array element) 內會帶著所返回的群組：

Dim $Array1[12]=[3, 7.5, "字串"], $array[5] = [8, 4, 5, 9, 1]
Dim $Grid[2][4]=[["Paul", "Jim", "Richard", "Louis"], [485.44, 160.68, 275.16, 320.00]]
Dim $Test[5] = [3, 1, StringSplit("Abe|Jack|Bobby|Marty", "|"), Cos(0)]

Dim, Local 和 Global 宣告之間不同的地方在於，它們所建立的有效範圍 (scope) 都是不同的：
Dim = 如變數名稱不存在於 Global 全域區域中，則設定為 Local 區域範圍 (此情況下它會再度使用全域變數！)
Global = 強制以 Global 全域範圍建立變數
Local = 強制以 Local(區域)/函數 的有效範圍來建立變數。

您應該用 Local 或 Global，而不是 Dim，以明確的態度告訴程式，必需用有效的範圍來建立 "變數/常數/群組 (array)"。

當使用變數的時後，此函數會優先檢查 local，而 global 的範圍其次。

建立群組時，您最多只能建立達 64 個範圍 (dimension) 及總共 1600 萬組類別 (element)。

在 AutoIt 中有一個與眾不同的特色，那就是具備複製群組的能力，像這樣：
$mycopy = $myarray
在這個例子中，$mycopy 會成為 $myarray 的完整副本，而且連擁有的範圍 (dimension) 都是一樣的 - 您不需要用 Dim 陳述式來第一次宣告群組的大小。如啟用 AutoItSetOption("MustDeclareVars", 1) 設定的話，則該變數在還是需要做第一次的宣告，但大小不必去管。如該變數 $mycopy 已是一個群組 (array) 或單獨的數值，那麼在此函數進行複製動作前，它們都會被全部清除掉。

要刪除一個群組 (可能是因為全域群組太大了，所以您要把它從記憶體清除)，只要簡單指定一個單獨的數值給它即可：
$array = 0
如此就可以清空該群組、並將單獨的數值換回 0。

再次宣告相同變數名稱的動作會清除掉所有的群組數值，而且範圍 (dimension) 會被被重新設定為新的定義，因此以一樣的數值和有效範圍宣告某個變數時，變數內的數值是不會改變的。

如果您用跟參數相同的名稱宣告了一個變數，在使用者函數內使用 Local 的話，就會發生一個錯誤。雖然 Global 可以用來將全域函數指定到某個函數內，但是在遇到一個區域變數 (或參數) 擁有與全域變數名稱相同的情況，將只能挑一個區域函數來使用。因此建議您區域和全域函數都用個別的名稱。

相關

UBound, ReDim, AutoItSetOption

範例

; 範例 1 - 宣告變數
Dim $x, $y = 23, $z
Global $_PI = 3.14159, $RADIUS
Local $_daysWorking = 5

; 範例 2 - 宣告群組
Dim $weeklyWorkSchedule[$_daysWorking]
Global $chessBoard[8][8]
Local $mouseCoordinates[2], $windowStats[4]

; 範例 3 - 宣告常數變數
Const $x1 = 11, $y1 = 23, $z1 = 55
Global Const $PI = 3.14159, $E = 2.71828
Local Const $daysWorking = 5


Keyword ContinueCase

關鍵字說明 (Keyword Reference)

ContinueCase

放棄目前 Case，並於下一個 Select 及 Switch 資料段 Case 中建立新的 Case。

ContinueCase

參數

無。

附註

在一個 Select 或 Switch 資料段中，通常會遇到某個 Case 結尾跟下一個 Case 陳述式衝突的問題，執行 ContinueCase 可以告訴AutoIt 停止目前執行的 Case，直接自下一段 Case 開始執行。

如果您嘗試在 Select 或 Switch 外執行 ContinueCase 時，將會遇到一個致命錯誤 (fatal error)。

相關

Select...EndSelect, Switch...EndSwitch

範例

$msg = ""
$szName = InputBox(Default, "請輸入一個文字：", "", " M", Default, Default, Default, Default, 10)
Switch @error
Case 2
$msg = "逾時！"
ContinueCase
Case 1; 繼續前一個 Case
$msg &= "取消動作。"
Case 0
Switch $szName
Case "a", "e", "i", "o", "u"
$msg = "字母"
Case "QP"
$msg = "數學運算"
Case "Q" to "QZ"
$msg = "科學標記"
Case Else
$msg = "其它"
EndSwitch
Case Else
$msg = "一些事件導致嚴重錯誤"
EndSwitch

MsgBox(0, Default, $msg)


Keyword ContinueLoop

關鍵字說明 (Keyword Reference)

ContinueLoop

跳過 While/Do/For 陳述式中的當前迴圈而繼續下一個。

ContinueLoop [層級]

參數

層級 [選擇性參數] 迴圈重新開始的層級，預設為 1 (表示當前迴圈)。

附註

ContinueLoop 會在運算式做陳述式測試時，繼續迴圈執行的動作 (也就是 While, Until 或 Next 陳述式)。

層級 若為負數或零值是無作用的。

雖然用到 ContinueLoop 的程式可以也改寫成 If-ElseIf-EndIf 陳述式，不過 ContinueLoop 對於內容較長的腳本來說更易於解讀。.
建立 While/Do 迴圈時請小心，因為只要您使用 ContinueLoop 一個不當，就會讓它形成無窮迴圈。

相關

ExitLoop, For, While, Do

範例

; 將 1 到 10 數字全部列出，除了 7 以外
For $i = 1 to 10
If $i = 7 Then ContinueLoop
MsgBox(0, "$i 的數值為：", $i)
Next

;在範例中 "層級" 參數是不可或缺的


Keyword Default

關鍵字說明 (Keyword Reference)

Default

將關鍵字數值用於函數呼叫。

$var = Default

參數

無。

附註

這個關鍵字不應該被用於數學運算式的用途上，AutoIt 是不會理睬 這類使用情況的，原因是這麼做對效能的負面影響很大。

當將此函數做為參數使用時，所傳遞的動作係完全跟據 AutoIt 的函數預設值來指定。
至於 UDF 使用者函數，檢查參數是否已設定了 Default 關鍵字、並能依照使用者希望的動作執行，這是腳本作者的責任。
傳遞的參數將會被設為 Default 關鍵字，您既不能也無法定義任何選擇性參數。

相關

IsKeyWord

範例

WinMove("[active]","",default, default, 200,300) ; 僅做調整活動視窗的動作 (不移動)

MyFunc2(Default,Default)

Func MyFunc2($Param1 = Default, $Param2 = '二', $Param3 = Default)
If $Param1 = Default Then $Param1 = '一'
If $Param3 = Default Then $Param3 = '三'
If $Param2 = Default Then $Param2 = '預設值'

MsgBox(0, '參數值', '1 = ' & $Param1 & @LF & _
'2 = ' & $Param2 & @LF & _
'3 = ' & $Param3)
EndFunc


Keyword Do...Until

關鍵字說明 (Keyword Reference)

Do...Until

基於運算式的迴圈。

Do
陳述式
...
Until <運算式>

參數

運算式 在 Do...Until 區段內執行，直到運算式成立的陳述式。

附註

Do...Until 陳述式必須為巢狀結構。
在迴圈執行後才會開始做運算式的測試，所以迴圈會被執行一次或好幾次。

相關

ContinueLoop, ExitLoop, While...WEnd, For...Next

範例

$i = 0
Do
MsgBox(0, "$i 的數值為：-------", $i)
$i = $i + 1
Until $i = 10


Keyword Enum

關鍵字說明 (Keyword Reference)

Enum

列出常數。

[有效範圍] Enum [Step <步過變數(stepval)>] <函數清單>

參數

有效範圍 | [選擇性參數] Enum 的有效範圍(scope) 應該設定出來，可以是 Local, Global, Dim 或不設定。如不設定，則使用 Dim 來動作。
步過變數(stepval) | [選擇性參數] 預設的步過 (Step) 是加 1，至於其它可用的模式有：*n, +n, -n 其中的 n 代表全部數字。
函數清單 | 列出的常數清單。

附註

預設第一個常數為 0，結尾是從 0 開始、以 1 累加到最後。
當在步過 (Step) 參數使用多個運算子時，會將第一個常數的值指定為 1，最後的結果以前一筆常數值為準不斷累計。

常數是可以用任何有效陳述式明確定義的。

相關

無。

範例

Global Enum $E1VAR1, $E1VAR2, $E1VAR3
MsgBox(4096, "", "計算結果 0：" & $E1VAR1)
MsgBox(4096, "", "計算結果 1：" & $E1VAR2)
MsgBox(4096, "", "計算結果 2：" & $E1VAR3)

Global Enum $E2VAR1 = 10, $E2VAR2, $E2VAR3 = 15
MsgBox(4096, "", "計算結果 10：" & $E2VAR1)
MsgBox(4096, "", "計算結果 11：" & $E2VAR2)
MsgBox(4096, "", "計算結果 15：" & $E2VAR3)

Global Enum Step *2 $E3VAR1, $E3VAR2, $E3VAR3
MsgBox(4096, "", "計算結果 1：" & $E3VAR1)
MsgBox(4096, "", "計算結果 2：" & $E3VAR2)
MsgBox(4096, "", "計算結果 4：" & $E3VAR3)


Keyword Exit

關鍵字說明 (Keyword Reference)

Exit

結束腳本。

Exit [返回碼]

參數

返回碼 [選擇性參數] 所設定的腳本返回碼整數。此返回碼可被 Windows 或 DOS 的環境變數 %ERRORLEVEL% 使用。預設值是 0，若腳本順利完成，一般都會將 errorlevel 設定為 0，錯誤層級為 1 或更高數值通常都代表腳本並未順利執行。

附註

如該參數被包含在內的話，可以用圓括弧括起來。所以說，下面幾個都會一樣：Exit, Exit 0, 和 Exit(0)，不過，Exit() 是無效的。

該碼可以在 Func OnAutoItExit() 內由 @EXITCODE 取得。

相關

ExitLoop, Func OnAutoItExit ()

範例

;第一個範例
Exit

;第二個範例
; 如果沒有命令行參數則結束腳本
If $CmdLine[0] = 0 Then Exit(1)

;第三個範例
開啟第一個命令行參數所指定的檔案
$file = FileOpen($CmdLine[1], 0)

; 檢查檔案是否已開啟並讀取 OK
If $file = -1 Then Exit(2)

; 如該檔案空白則結束 (腳本已成功執行)
$line = FileReadLine($file)
If @error = -1 Then Exit

;處理檔案的程式碼在這裡執行
FileClose($file)
Exit ;如為腳本最後一行，可選擇是否要用


Keyword ExitLoop

關鍵字說明 (Keyword Reference)

ExitLoop

結束一個 While/Do/For 迴圈。

ExitLoop [層級]

參數

層級 [選擇性參數] 迴圈結束的層級數值。預設值為 1 (表示當前的迴圈)。

附註

層級 若為負數或零值是無作用的。

ExitLoop 會結束一個 While, Do 或 For 迴圈的執行動作。
當您有不斷地重現錯誤的額外需要，以進行在迴圈-測試、迴圈-本體兩者間除錯檢查時，ExitLoop 是很有用的。

相關

ContinueLoop, Exit, For, Do, While

範例

$sum = 0
While 1 ;使用無窮迴圈，因為稍後將會呼叫 ExitLoop
$ans = InputBox("執行統計運算=" & $sum, _
" 輸入一個正數。 (若是負數則結束)")
If $ans < 0 Then ExitLoop
$sum = $sum + $ans
WEnd
MsgBox(0,"總計為：", $sum)


Keyword False / True

關鍵字說明 (Keyword Reference)

False / True

用於邏輯運算式的布林值。

$var = False
$var = True

參數

無。

附註

這個關鍵字不應該被用於數學運算式的用途上，AutoIt 是不會理睬 這類亂用情況的，因為會產生無法預料的後果。

相關

無。

範例

$bool= False
if NOT $bool = true Then Msgbox(0,"布林值比對的結果：--------", "沒有問題")


Keyword For...To...Step...Next

關鍵字說明 (Keyword Reference)

For...To...Step...Next

基於運算式的迴圈。

For <變數> = <開始> To <停止> [Step <步過變數(stepval)>]
陳述式
...
Next

參數

變數 | 用來做計算的變數。
開始 | 變數的開頭數字。
停止 | 變數的最後數字。
步過變數(stepval) | [選擇性參數] 十進位數值 (可能會分段漸進)，迴圈會於每次執行時不斷累加，預設值是 1。

附註

變數會自動以 LOCAL 有效範圍建立，甚至 MustDeclareVars 於作用狀態時也是一樣。

For...Next 陳述式可能必須為巢狀結構，因為當 變數 值超過 停止 參數所允許的上限時，For 迴圈會結束。如 步過變數(stepval) 或 停止 是一個變數，那麼在迴圈第一次執行時，該變數是唯讀不能存取的。

若有以下情況，For 迴圈將計數為零不予執行：
開始 > 停止 且 step > 0，或者
開始 < 停止 且 step 是負值。

相關

ContinueLoop, ExitLoop

範例

For $i = 5 to 1 Step -1
MsgBox(0, "開始向下計數！ -------", $i)
Next
MsgBox(0,"", "意外結束！")


Keyword For...In...Next

關鍵字說明 (Keyword Reference)

For...In...Next

列出於物件集合或某群組 (Array) 的各種類別。

For <$variable> In <運算式>
陳述式
...
Next

參數

$variable | 一個指定了類別 (element) 的變數。
運算式 | 必須是一個能在物件、或至少帶一個以上的類別群組 (Array) 內取得結果的運算式。

附註

變數會自動以 LOCAL 有效範圍建立，甚至 MustDeclareVars 於作用狀態時也是一樣。
如果運算式是一個無任何類別的物件集合 (Object collection)，將直接跳過迴圈且變數內容為一個空白字串。
如果運算式既不是一個物件也不是群組 (Array)，腳本將彈出錯誤並結束，除非已設定了 COM Error handler 則外 (COM 錯誤處理)。
當使用 For...In 時 Autoit 的群組 (Array) 是唯讀的，因此您可以在 For...In loop 內為變數指定一個數值，不過這樣的改變並不會反應在群組上面，您必須在使用 For...To 迴圈列出時，將群組的內容做修改。

For...In...Next 陳述式是不能用巢狀結構的。.

相關

With...EndWith, ObjEvent (COM Error handler)

範例

;使用一個群組 (Array)
Dim $aArray[4]

$aArray[0]="a"
$aArray[1]=0
$aArray[2]=1.3434
$aArray[3]="測試"

$string = ""
FOR $element IN $aArray
$string = $string & $element & @CRLF
NEXT

Msgbox(0,"For..IN 群組測試 --------","結果為：" & @CRLF & $string)

;使用一個物件集合 (Object Collection)

$oShell = ObjCreate("shell.application")
$oShellWindows=$oShell.windows

if Isobj($oShellWindows) then
$string=""

for $Window in $oShellWindows
$String = $String & $Window.LocationName & @CRLF
next

msgbox(0,"","您開啟的視窗如下：" & @CRLF & $String)
else

msgbox(0,"","您並沒有開啟任何 shell window 視窗。")
endif


Keyword Func OnAutoItStart ()...EndFunc

關鍵字說明 (Keyword Reference)

Func OnAutoItStart ()...EndFunc

定義一個使用者自訂函數，用於腳本開啟前呼叫。

Func OnAutoItStart ( )
...
EndFunc

參數

無。

附註

函數的名稱是不能修改的，因為它可被用於 "OnAutoItExit" 關鍵字。

相關

Func OnAutoItExit (), OnExitFunc (Option)

範例

MsgBox(0,"","第一個陳述式")

Func OnAutoItStart()
MsgBox(0,"","在第一個陳述式之前")
EndFunc


Keyword Func OnAutoItExit ()...EndFunc

關鍵字說明 (Keyword Reference)

Func OnAutoItExit ()...EndFunc

定義一個使用者自訂函數，用於腳本結束時呼叫。

Func OnAutoItExit ( )
...
EndFunc

參數

無。

附註

在此函數內，@ExitCode 可用於 Exit 陳述式以取得程式碼設定。

結束模式可用 @ExitMethod 來取得：
0 | 正常關閉。
1 | 以 Exit 函數關閉。
2 | 以點選常駐提示 "結束" 的方式關閉。
3 | 經使用者登出關閉。
4 | 經 Windows 關機關閉。

函數的名稱是可以修改的，如：endscript()。

相關

Func OnAutoItStart (), OnExitFunc (Option)

範例

Opt("OnExitFunc", "endscript")
MsgBox(0,"","第一個陳述式")

Func endscript()
MsgBox(0,"","在第一個陳述式之後：" & @EXITMETHOD)
EndFunc


Keyword If...Then

關鍵字說明 (Keyword Reference)

If...Then

單一條件分支陳述式。

If <運算式> Then 陳述式

參數

運算式 如運算式成立，則執行陳述式。

附註

這一種 If 陳述式，是用來執行一個上方不帶 EndIf 的單獨陳述式。
運算式 可以包括布林運算子 AND, OR, 和 NOT，同樣的邏輯運算子 <, <=, >, >=, =, ==, 和 <> 都要以圓括號括住來群組化。

相關

If...Else...EndIf, Select...Case...EndSelect

範例

;如沒有命令行參數則結束腳本
If $CmdLine[0] = 0 Then Exit

;二中選一
If $CmdLine[0] = 0 Then
Exit
EndIf


Keyword If...ElseIf...Else...EndIf

關鍵字說明 (Keyword Reference)

If...ElseIf...Else...EndIf

多重條件分支陳述式。

If <運算式> Then
陳述式
...
[ElseIf 運算式-n Then
[elseif 陳述式... ]]
...
[Else
[else 陳述式]
...
EndIf

參數

運算式 如運算式成立，則執行第一個陳述式區段。如不成立，則執行第一個成立的 ElseIf 區段。其它情況為執行 "Else" 資料段。

附註

If 陳述式可以為巢狀結構。
運算式 可以包括布林運算子 AND, OR, 和 NOT，同樣的邏輯運算子 <, <=, >, >=, =, ==, 和 <> 都要以圓括號括住來群組化。

相關

If...Then, Select...Case...EndSelect

範例

$ans = InputBox("判斷數值類型", _
" 請輸入一個數值：")
$var = $ans

If $var > 0 Then
MsgBox(4096,"", "數值為正。")
ElseIf $var < 0 Then
MsgBox(4096,"", "數值為負。")
Else
If StringIsXDigit ($var) Then
MsgBox(4096,"", "數值可能為十六進位！")
Else
MsgBox(4096,"", "數值為其它類型。")
EndIf
EndIf


Keyword ReDim

關鍵字說明 (Keyword Reference)

ReDim

修改已存在群組的大小。

ReDim $array[下標符號 1]...[下標符號 n]

參數

$array | 要重新調整大小的群組名稱。
下標符號 | 為群組範圍建立的類別 (element)，索引編號從 0 至 n-1。

附註

ReDim 關鍵字跟 Dim 相當類似，不同的是 ReDim 會保留群組內的數值，而不會在重新調整大小時將數值丟掉。範圍的數值同樣必須保留下來，否則在 ReDim 執行時，較舊的群組會遺失。該群組將保有其有效的範圍 (Global 或 Local)，並事先做過大小調整。

相關

Dim, UBound

範例

; 示範重新調整群組(array)的大小
Dim $I, $K, $T, $MSG
Dim $X[4][6], $Y[4][6]

For $I = 0 To 3
For $K = 0 To 5
$T = Int(Random(20) + 1) ;在 1 到 20 之間隨機取得數值
$X[$I][$K] = $T
$Y[$I][$K] = $T
Next
Next

ReDim $X[3][8]
Dim $Y[3][8]

$MSG = ""
For $I = 0 To UBound($X, 1) - 1
For $K = 0 To UBound($X, 2) - 1
If $K > 0 Then $MSG = $MSG & ", "
$MSG = $MSG & $X[$I][$K]
Next
$MSG = $MSG & @CR
Next
MsgBox(0, "ReDim 展示示範", $MSG)

$MSG = ""
For $I = 0 To UBound($Y, 1) - 1
For $K = 0 To UBound($Y, 2) - 1
If $K > 0 Then $MSG = $MSG & ", "
$MSG = $MSG & $Y[$I][$K]
Next
$MSG = $MSG & @CR
Next
MsgBox(0, "ReDim 展示示範", $MSG)


Keyword Select...Case...EndSelect

關鍵字說明 (Keyword Reference)

Select...Case...EndSelect

條件執行陳述式。

Select
Case <運算式>
陳述式1
...
[Case <運算式>
陳述式2
...]
[Case Else
陳述式N
...]
EndSelect

參數

Case <運算式> 如果運算式成立，則會將下方的陳述式從上方到下一個 Case 或 EndSelect 依序執行，如有一個以上的 Case 陳述式成立，則僅執行第一個。

附註

Select 陳述式可以為巢狀結構。
運算式 可以包括布林運算子 AND, OR, 和 NOT，同樣的邏輯運算子 <, <=, >, >=, =, ==, 和 <> 都要以圓括號括住來群組化。

相關

If...Then, If...Else...EndIf, Switch...EndSwitch, ContinueCase

範例

$var = 0
$var2= ""

Select
Case $var = 1
MsgBox(0, "", "第一個 Case 運算式成立。")
Case $var2 = "測試"
MsgBox(0, "", "第二個 Case 運算式成立。")
Case Else
MsgBox(0, "", "前面的條件都不成立！")
EndSelect


Keyword Switch...Case...EndSwitch

關鍵字說明 (Keyword Reference)

Switch...Case...EndSwitch

條件執行陳述式。

Switch <運算式>
Case <數值> [To <數值>] [,<數值> [To <數值>] ...]
陳述式1
...
[Case <數值> [To <數值>] [,<數值> [To <數值>] ...]
陳述式2
...]
[Case Else
陳述式N
...]
EndSwitch

參數

<運算式> | 一個用來返回數值的運算式。這個值會被用來跟每個 Case 的數值比對，直到找到符合的內容為止。
<數值> To <數值> | 如運算式介於兩個數值之間，則執行 Case。
<數值> | 如運算式跟數值符合，則執行 Case。

附註

Switch 陳述式可以為巢狀結構。
如沒有跟 Switch 數值符合的 Case，則視 Case Else 區段是否出現，再決定執行。要是無符合的 Case 且未定義 Case Else，那麼 Switch 結構內的所有程式碼將不予執行。

相關

If...Then, If...Else...EndIf, Select...EndSelect, ContinueCase

範例

Switch @HOUR
Case 6 To 11
$msg = "早安阿"
Case 12 To 17
$msg = "午安"
Case 18 To 21
$msg = "晚安"
Case Else
$msg = "您還在摸什麼？"
EndSwitch

MsgBox(0, Default, $msg)


Keyword With...EndWith

關鍵字說明 (Keyword Reference)

With...EndWith

用於縮短參照到物件類型變數的長度。

With <運算式>
陳述式
...
EndWith

參數

運算式 必須為一個物件類型運算式。

附註

With...EndWith 陳述式「不能」用巢狀結構。

相關

For...In...Next

範例

$oExcel = ObjCreate("Excel.Application")
$oExcel.visible =1
$oExcel.workbooks.add

With $oExcel.activesheet
.cells(2,2).value = 1
.range("A1:B2").clear
EndWith

$oExcel.quit


Keyword While...WEnd

關鍵字說明 (Keyword Reference)

While...WEnd

基於運算式的迴圈。

While <運算式>
陳述式
...
WEnd

參數

運算式 如果運算式成立，則會將下方的陳述式從上方到 WEnd 依序執行，這迴圈會一直執行到運算式不成立為止。

附註

While...WEnd 陳述式可以為巢狀結構。
迴圈在執行前會進行運算式的測試，所以迴圈有可能打從開始就不執行、或連續跑好幾次。
要建立一個無窮迴圈，您可以使用非零值做為 運算式。

相關

ContinueLoop, Do...Until, ExitLoop

範例

$i = 0
While $i <= 10
MsgBox(0, "$i 的數值為：-------", $i)
$i = $i + 1
WEnd


巨集清單

巨集清單 (Macro Reference)

下面按字母順序列出在 AutoIt 中可用的巨集：

巨集 | 用途說明
@AppDataCommonDir | Application Data 目錄所在路徑。（例如：C:\Documents and Settings\All Users\Application Data）
@AppDataDir | 當前使用者的 Application Data 目錄所在路徑。
@AutoItExe | 當前執行中的 AutoIt 執行檔名稱和完整路徑，如是已編譯腳本則為編譯腳本所在路徑 。
@AutoItPID | 執行腳本程式的 PID。
@AutoItVersion | AutoIt 的版本，如 3.0.102.0。
@AutoItX64 | 若腳本是在原始 AutoIt x64 版本下執行，則返回 1。
@COM_EventObj | 正在執行中的 COM 事件物件，對 COM 事件函數才有效。
@CommonFilesDir | Common Files 資料夾所在路徑。（例如：C:\Program Files\Common Files）
@Compiled | 如腳本已編譯為執行檔則為 1，否則返回 0。
@ComputerName | 電腦的網路名稱。
@ComSpec | %comspec% 的值，即指定的第二個 COM 指令直譯器；主要做於命令行用途，例如： Run(@ComSpec & " /k help | more")。
@CPUArch | 當 CPU 是 64-位元則返回 "X64"；若用的是 32-位元 CPU 則返回 "X86"。
@CR | Carriage return，Chr(13)；有時用於換行。
@CRLF | = @CR & @LF；偶爾也用於換行。
@DesktopCommonDir | 桌面所在路徑。（例如：C:\Documents and Settings\All Users\桌面）
@DesktopDir | 目前使用者的桌面所在路徑。
@DesktopHeight | 桌面螢幕的像素高度。(垂直解析度)
@DesktopWidth | 桌面螢幕的像素寬度。(水平解析度)
@DesktopDepth | 桌面螢幕的深度，以每像素多少位元為單位。
@DesktopRefresh | 桌面螢幕更新的頻率，以赫茲為單位。
@DocumentsCommonDir | Documents 目錄所在路徑。（例如：C:\Documents and Settings\All Users\Documents）
@error | 錯誤旗標的狀態，請見 SetError 函數部份。
@exitCode | 由 Exit 陳述式所設定的結束碼。
@exitMethod | Exit 的模式，請見 Func OnAutoItExit() 函數部分。
@extended | 延伸函數返回值，用於某些如 StringReplace 等函數。
@FavoritesCommonDir | Favorites 所在路徑。（例如：C:\Documents and Settings\All Users\Favorites）
@FavoritesDir | 當前使用者的 Favorites 所在路徑。
@GUI_CtrlId | 最近點選的控制項識別碼，在事件函數內才有效，請檢視：GUICtrlSetOnEvent 函數部分。
@GUI_CtrlHandle | 最近點選的控制碼，在事件函數內才有效，請檢視：GUICtrlSetOnEvent 函數部分。
@GUI_DragId | 拖曳控制項的識別碼，對拖曳(Drag)事件才有效，請檢視：GUISetOnEvent 函數部分。
@GUI_DragFile | 被拖曳的檔案名稱，對拖曳事件才有效，請檢視：GUISetOnEvent 函數部分。
@GUI_DropId | 拖放控制項的識別碼，對拖放(Drop)事件才有效，請檢視：GUISetOnEvent 函數部分。
@GUI_WinHandle | 最近點選的 GUI 視窗控制碼，在事件函數內才有效，請檢視：GUICtrlSetOnEvent 函數部分。
@HomeDrive | 內有目前使用者帳號資料夾的硬碟機代號。
@HomePath | 目前使用者帳號資料夾的另一種，要取得完整路徑，請搭配 @HomeDrive 做關聯。（例如：\Documents and Settings\yonken）
@HomeShare | 內含目前使用者根目錄的分享名稱和伺服器。
@HOUR | 以 24 時制顯示時鐘是幾點，範圍為 00 ∼ 23。
@HotKeyPressed | 最近按過的快速鍵，請檢視：HotkeySet 函數部分。
@InetGetActive | 若呼叫 InetGet 函數所執行的下載仍在進行中則為 1，否則為 0。
@InetGetBytesRead | 於 InetGet 函數執行下載期間，所讀取到的當前已下載位元組，若於下載過程中出錯則為 -1。
@IPAddress1 | 第一個網路配接卡的 IP 位址，在某些電腦上可能會返回 127.0.0.1。
@IPAddress2 | 第二個網路配接卡的 IP 位址，若無可用 IP 則返回 0.0.0.0。
@IPAddress3 | 第三個網路配接卡的 IP 位址，若無可用 IP 則返回 0.0.0.0。
@IPAddress4 | 第四個網路配接卡的 IP 位址，若無可用 IP 則返回 0.0.0.0。
@KBLayout | 返回碼將依照鍵盤佈局設定，請檢視：附錄 (Appendix) 的可用數值。
@LF | Line feed，Chr(10)；通常用於換行。
@LogonDNSDomain | 登入的 DNS 網域。
@LogonDomain | 登入的網域。
@LogonServer | 登入的伺服器。
@MDAY | 當天該月的日期，範圍為 01 ∼ 31。
@MIN | 目前時鐘為幾分，範圍為 00 ∼ 59。
@MON | 目前月份，範圍為 01 ∼ 12。
@MSEC | 時鐘為幾毫秒，範圍為 00 ∼ 999。
@MyDocumentsDir | 我的文件夾目標路徑。
@NumParams | 用於呼叫使用者函數的參數數量。
@OSArch | 返回下列中其中一個："X86", "IA64", "X64" - 這些是目前使用的作業系統架構類型。
@OSBuild | 返回作業系統的 build 編號，例如：Windows 2003 Server 返回的是 3790。
@OSLang | 依照作業系統語系設定返回碼，請檢視：附錄 (Appendix) 的可用數值。
@OSServicePack | "Service Pack 3" 整合包的資訊內容。
@OSType | 為 NT/2000/XP/2003/Vista/2008 返回 "WIN32_NT"。
@OSVersion | 返回下列其中一個： "WIN_2008", "WIN_VISTA", "WIN_2003", "WIN_XP", "WIN_2000"。
@ProgramFilesDir | Program Files 資料夾所在路徑。（例如：C:\Program Files）
@ProgramsCommonDir | 開始選單的 Programs 資料夾路徑。（例如：C:\Documents and Settings\All Users\「開始」功能表\程式集）
@ProgramsDir | 目前使用者的 Programs 資料夾路徑 (開始選單上的資料夾)。
@ScriptDir | 目前執行的腳本所在目錄。(結果不會包括結尾的反斜線符號)
@ScriptFullPath | 等於 @ScriptDir & "\" & @ScriptName。
@ScriptLineNumber | 目前執行的腳本程式碼行數，對於陳述式的除錯特別有用，尤其是在呼叫某個函數時，你可以傳遞被呼叫的那一行。(在已編譯腳本中是無意義的)
@ScriptName | 執行中腳本的長檔名。
@SEC | 時鐘的秒數，範圍為 00 ∼ 59。
@StartMenuCommonDir | 開始選單資料夾的路徑。（例如：C:\Documents and Settings\All Users\「開始」功能表）
@StartMenuDir | 目前使用者的開始選單資料夾路徑。
@StartupCommonDir | 啟動資料夾的路徑。（例如：C:\Documents and Settings\All Users\「開始」功能表\程式集\啟動）
@StartupDir | 目前使用者的啟動資料夾路徑。
@SW_DISABLE | 關閉禁用視窗。
@SW_ENABLE | 開啟視窗。
@SW_HIDE | 隱藏視窗並開啟另一個視窗。
@SW_LOCK | 鎖定視窗避免重繪。
@SW_MAXIMIZE | 最大化指定視窗。
@SW_MINIMIZE | 最小化指定視窗，並啟動下一個在 Z 軸方向的置頂視窗。
@SW_RESTORE | 啟動並顯示視窗，如果該視窗已最小化或最大化，則系統會還原其原始的大小和位置。應用程式應該在還原一個最小化視窗時指定此旗標。
@SW_SHOW | 啟動視窗並以目前的大小和位置顯示。
@SW_SHOWDEFAULT | 由開啟應用程式的程序，以指定的 SW_值為準來設定顯示狀態。
@SW_SHOWMAXIMIZED | 啟動視窗並最大化顯示。
@SW_SHOWMINIMIZED | 啟動視窗並最小化顯示。
@SW_SHOWMINNOACTIVE | 以最小化顯示視窗，這個值和 @SW_SHOWMINIMIZED 很類似，只是視窗不會被啟動。
@SW_SHOWNA | 以目前的大小和位置顯示視窗，這個值和 @SW_SHOW 很類似，只是視窗不會被啟動。
@SW_SHOWNOACTIVATE | 以最近的大小和位置顯示視窗，這個值和 @SW_SHOWNORMAL 很類似，只是視窗不會被啟動。
@SW_SHOWNORMAL | 啟動並顯示一個視窗，如該視窗已最小化或最大化，則還原其原始的大小和位置。當應用程式第一次顯示視窗時，應該設定此旗標。
@SW_UNLOCK | 解鎖視窗允許繪圖。
@SystemDir | Windows 的 System (或System32) 資料夾路徑。（例如：C:\WINDOWS\system32）
@TAB | Tab 符號，Chr(9)。
@TempDir | Temporary 檔案資料夾所在路徑。（例如：C:\DOCUME~1\yonken\LOCALS~1\Temp）
@TRAY_ID | 在 TraySet(Item)OnEvent 執行期間，最近點選的項目識別碼。
@TrayIconFlashing | 若常駐圖示正在閃爍返回 1；否則返回 0。
@TrayIconVisible | 若常駐圖示為可見返回 1；否則返回 0。
@UserProfileDir | 目前使用者的 Profile 資料夾。（例如：C:\Documents and Settings\yonken）
@UserName | 目前登入的使用者 ID。
@WDAY | 一週內的日期數字編號，範圍為 1 ∼ 7，依次表示星期天到星期六。
@WindowsDir | Windows 資料夾路徑。
@WorkingDir | 目前/啟動的工作目錄。(結果不會包括結尾的反斜線符號)
@YDAY | 一年內的日期數字編號，範圍為 1 ∼ 366 (若不是閏年則為 365)。
@YEAR | 目前的 4 位數年份。


巨集參照 - 與 AutoIt 有關的巨集

巨集參照 - 與 AutoIt 有關的巨集 (Macro Reference - AutoIt Related)

下表是與 AutoIt 有關的巨集清單。

完整的巨集清單請檢視 這裡。

巨集 | 詳細說明
@Compiled | 如腳本已編譯為執行檔則為 1，否則返回 0。
@error | 錯誤旗標的狀態，請見 SetError 函數部份。
@exitCode | 由 Exit 陳述式所設定的結束碼。
@exitMethod | Exit 的模式，請見 Func OnAutoItExit() 函數部分。
@extended | 延伸函數返回值，用於某些如 StringReplace 等函數。
@NumParams | 用於呼叫使用者函數的參數數量。
@ScriptName | 執行中腳本的長檔名。
@ScriptDir | 目前執行的腳本所在目錄。(結果不會包括結尾的反斜線符號)
@ScriptFullPath | 等於 @ScriptDir & "\" & @ScriptName。
@ScriptLineNumber | 目前執行的腳本程式碼行數，對於陳述式的除錯特別有用，尤其是在呼叫某個函數時，你可以傳遞被呼叫的那一行。(在已編譯腳本中是無意義的)
@WorkingDir | 目前/啟動的工作目錄。(結果不會包括結尾的反斜線符號)
@AutoItExe | 當前執行中的 AutoIt 執行檔名稱和完整路徑，如是已編譯腳本則為編譯腳本所在路徑 。
@AutoItPID | 執行腳本程式的 PID。
@AutoItVersion | AutoIt 的版本，如 3.0.102.0。
@AutoItX64 | 若腳本是在原始 AutoIt x64 版本下執行，則返回 1。
@InetGetActive | 若呼叫 InetGet 函數所執行的下載仍在進行中則為 1，否則為 0。
@InetGetBytesRead | 於 InetGet 函數執行下載期間，所讀取到的當前已下載位元組，若於下載過程中出錯則為 -1。
@COM_EventObj | 正在執行中的 COM 事件物件，對 COM 事件函數才有效。
@GUI_CtrlId | 最近點選的控制項識別碼，在事件函數內才有效，請檢視：GUICtrlSetOnEvent 函數部分。
@GUI_CtrlHandle | 最近點選的控制碼，在事件函數內才有效，請檢視：GUICtrlSetOnEvent 函數部分。
@GUI_DragId | 拖曳控制項的識別碼，對拖曳(Drag)事件才有效，請檢視：GUISetOnEvent 函數部分。
@GUI_DragFile | 被拖曳的檔案名稱，對拖曳事件才有效，請檢視：GUISetOnEvent 函數部分。
@GUI_DropId | 拖放控制項的識別碼，對拖放(Drop)事件才有效，請檢視：GUISetOnEvent 函數部分。
@GUI_WinHandle | 最近點選的 GUI 視窗控制碼，在事件函數內才有效，請檢視：GUICtrlSetOnEvent 函數部分。
@HotKeyPressed | 最近按過的快速鍵，請檢視：HotkeySet 函數部分。
關於使用 WinSetState, Run, RunWait, FileCreateShortcut 和 FileGetShortcut 等函數的方法請點連結檢視：
@SW_DISABLE | 關閉禁用視窗。
@SW_ENABLE | 開啟視窗。
@SW_HIDE | 隱藏視窗並開啟另一個視窗。
@SW_LOCK | 鎖定視窗避免重繪。
@SW_MAXIMIZE | 最大化指定視窗。
@SW_MINIMIZE | 最小化指定視窗，並啟動下一個在 Z 軸方向的置頂視窗。
@SW_RESTORE | 啟動並顯示視窗，如果該視窗已最小化或最大化，則系統會還原其原始的大小和位置。應用程式應該在還原一個最小化視窗時指定此旗標。
@SW_SHOW | 啟動視窗並以目前的大小和位置顯示。
@SW_SHOWDEFAULT | 由開啟應用程式的程序，以指定的 SW_值為準來設定顯示狀態。
@SW_SHOWMAXIMIZED | 啟動視窗並最大化顯示。
@SW_SHOWMINIMIZED | 啟動視窗並最小化顯示。
@SW_SHOWMINNOACTIVE | 以最小化顯示視窗，這個值和 @SW_SHOWMINIMIZED 很類似，只是視窗不會被啟動。
@SW_SHOWNA | 以目前的大小和位置顯示視窗，這個值和 @SW_SHOW 很類似，只是視窗不會被啟動。
@SW_SHOWNOACTIVATE | 以最近的大小和位置顯示視窗，這個值和 @SW_SHOWNORMAL 很類似，只是視窗不會被啟動。
@SW_SHOWNORMAL | 啟動並顯示一個視窗，如該視窗已最小化或最大化，則還原其原始的大小和位置。當應用程式第一次顯示視窗時，應該設定此旗標。
@SW_UNLOCK | 解鎖視窗允許繪圖。
@TRAY_ID | 在 TraySet(Item)OnEvent 執行期間，最近點選的項目識別碼。
@TrayIconFlashing | 若常駐圖示正在閃爍返回 1；否則返回 0。
@TrayIconVisible | 若常駐圖示為可見返回 1；否則返回 0。
@CR | Carriage return，Chr(13)；有時用於換行。
@LF | Line feed，Chr(10)；通常用於換行。
@CRLF | = @CR & @LF；偶爾也用於換行。
@TAB | Tab 符號，Chr(9)。


巨集參照 - 目錄

巨集參照 - 目錄 (Macro Reference - Directory)

下表是目錄巨集的清單，請注意路徑結尾不包括反斜線符號。

完整的巨集清單請檢視 這裡。

巨集 | 詳細說明
"All Users" 資料的巨集，大部份數值讀取自：HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
@AppDataCommonDir | Application Data 目錄所在路徑。（例如：C:\Documents and Settings\All Users\Application Data）
@DesktopCommonDir | 桌面所在路徑。（例如：C:\Documents and Settings\All Users\桌面）
@DocumentsCommonDir | Documents 目錄所在路徑。（例如：C:\Documents and Settings\All Users\Documents）
@FavoritesCommonDir | Favorites 所在路徑。（例如：C:\Documents and Settings\All Users\Favorites）
@ProgramsCommonDir | 開始選單的 Programs 資料夾路徑。（例如：C:\Documents and Settings\All Users\「開始」功能表\程式集）
@StartMenuCommonDir | 開始選單資料夾的路徑。（例如：C:\Documents and Settings\All Users\「開始」功能表）
@StartupCommonDir | 啟動資料夾的路徑。（例如：C:\Documents and Settings\All Users\「開始」功能表\程式集\啟動）
目前使用者資料的巨集，大部份數值讀取自：HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion
@AppDataDir | 當前使用者的 Application Data 目錄所在路徑。
@DesktopDir | 目前使用者的桌面所在路徑。
@FavoritesDir | 當前使用者的 Favorites 所在路徑。
@MyDocumentsDir | 我的文件夾目標路徑。
@ProgramsDir | 目前使用者的 Programs 資料夾路徑 (開始選單上的資料夾)。
@StartMenuDir | 目前使用者的開始選單資料夾路徑。
@StartupDir | 目前使用者的啟動資料夾路徑。
@UserProfileDir | 目前使用者的 Profile 資料夾。（例如：C:\Documents and Settings\yonken）
跟電腦系統相關的其它巨集：
@CommonFilesDir | Common Files 資料夾所在路徑。（例如：C:\Program Files\Common Files）
@ComSpec | %comspec% 的值，即指定的第二個 COM 指令直譯器；主要做於命令行用途，例如： Run(@ComSpec & " /k help | more")。
@HomeDrive | 內有目前使用者帳號資料夾的硬碟機代號。
@HomePath | 目前使用者帳號資料夾的另一種，要取得完整路徑，請搭配 @HomeDrive 做關聯。（例如：\Documents and Settings\yonken）
@HomeShare | 內含目前使用者根目錄的分享名稱和伺服器。
@LogonDNSDomain | 登入的 DNS 網域。
@LogonDomain | 登入的網域。
@LogonServer | 登入的伺服器。
@ProgramFilesDir | Program Files 資料夾所在路徑。（例如：C:\Program Files）
@SystemDir | Windows 的 System (或System32) 資料夾路徑。（例如：C:\WINDOWS\system32）
@TempDir | Temporary 檔案資料夾所在路徑。（例如：C:\DOCUME~1\yonken\LOCALS~1\Temp）
@WindowsDir | Windows 資料夾路徑。


巨集參照 - 系統訊息

巨集參照 - 系統訊息 (Macro Reference - System Info)

下表是系統訊息巨集的清單。

完整的巨集清單請檢視 這裡。

巨集 | 詳細說明
@ComputerName | 電腦的網路名稱。
@CPUArch | 當 CPU 是 64-位元則返回 "X64"；若用的是 32-位元 CPU 則返回 "X86"。
@IPAddress1 | 第一個網路配接卡的 IP 位址，在某些電腦上可能會返回 127.0.0.1。
@IPAddress2 | 第二個網路配接卡的 IP 位址，若無可用 IP 則返回 0.0.0.0。
@IPAddress3 | 第三個網路配接卡的 IP 位址，若無可用 IP 則返回 0.0.0.0。
@IPAddress4 | 第四個網路配接卡的 IP 位址，若無可用 IP 則返回 0.0.0.0。
@KBLayout | 返回碼將依照鍵盤佈局設定，請檢視：附錄 (Appendix) 的可用數值。
@OSArch | 返回下列中其中一個："X86", "IA64", "X64" - 這些是目前使用的作業系統架構類型。
@OSBuild | 返回作業系統的 build 編號，例如：Windows 2003 Server 返回的是 3790。
@OSLang | 依照作業系統語系設定返回碼，請檢視：附錄 (Appendix) 的可用數值。
@OSServicePack | "Service Pack 3" 整合包的資訊內容。
@OSType | 為 NT/2000/XP/2003/Vista/2008 返回 "WIN32_NT"。
@OSVersion | 返回下列其中一個： "WIN_2008", "WIN_VISTA", "WIN_2003", "WIN_XP", "WIN_2000"。
@UserName | 目前登入的使用者 ID。
@DesktopHeight | 桌面螢幕的像素高度。(垂直解析度)
@DesktopWidth | 桌面螢幕的像素寬度。(水平解析度)
@DesktopDepth | 桌面螢幕的深度，以每像素多少位元為單位。
@DesktopRefresh | 桌面螢幕更新的頻率，以赫茲為單位。


巨集參照 - 時間和日期

巨集參照 - 時間和日期 (Macro Reference - Time And Date)

下表是時間和日期的巨集清單，請注意大部份的返回值長度都是兩位數。

完整的巨集清單請檢視 這裡。

巨集 | 詳細說明
@MSEC | 時鐘為幾毫秒，範圍為 00 ∼ 999。
@SEC | 時鐘的秒數，範圍為 00 ∼ 59。
@MIN | 目前時鐘為幾分，範圍為 00 ∼ 59。
@HOUR | 以 24 時制顯示時鐘是幾點，範圍為 00 ∼ 23。
@MDAY | 當天該月的日期，範圍為 01 ∼ 31。
@MON | 目前月份，範圍為 01 ∼ 12。
@YEAR | 目前的 4 位數年份。
@WDAY | 一週內的日期數字編號，範圍為 1 ∼ 7，依次表示星期天到星期六。
@YDAY | 一年內的日期數字編號，範圍為 1 ∼ 366 (若不是閏年則為 365)。


函數參照

函數參照（Function Reference)

下面是AutoIt提供的所有函數清單。點選函數名稱即可檢視其相關說明。

函數 | 詳細說明
Abs | 求某個數的絕對值。
ACos | 求某個數的反餘弦值 (arcCosine) 。
AdlibDisable | 關閉 Adlib 功能。
AdlibEnable | 開啟 Adlib 功能。
Asc | 返回某字元的 ASCII 碼。
AscW | 返回某字元的 Unicode 碼。
ASin | 求某個數的反正弦值 (arcsine) 。
Assign | 以數值資料名稱指定一個變數。
ATan | 求某個數的反正切值 (arctangent) 。
AutoItSetOption | 調整各種 AutoIt 函數/參數的運作模式。
AutoItWinGetTitle | 取得 AutoIt 視窗的標題名稱。
AutoItWinSetTitle | 修改 AutoIt 視窗的標題名稱。
Beep | 播放嗶聲提醒使用者。
Binary | 返回二進位運算數值。
BinaryLen | 在二進位變數返回某個位元組數值。
BinaryMid | 在二進位變數擷取某個位元組數值。
BinaryToString | 將某個二進位變數轉換成字串。
BitAND | 按照位元進行「AND」運算。
BitNOT | 按照位元進行「NOT」運算。
BitOR | 按照位元進行「OR」運算。
BitRotate | 按照位元進行「位移並旋轉」運算動作。
BitShift | 按照位元進行「位移」運算動作。
BitXOR | 按照位元進行「互斥 (XOR)」運算。
BlockInput | 關閉/開啟滑鼠與鍵盤。
Break | 允許或禁止使用者從腳本程式的常駐選單中離開。
Call | 呼叫使用者自訂函數。
CDTray | 彈出或關閉光碟機拖盤。
Ceiling | 向上捨入返回最近的整數值。
Chr | 返回指定ASCII碼所對應的字元。
ChrW | 返回指定Unicode碼所對應的字元。
ClipGet | 取得剪貼簿儲存的資料。
ClipPut | 向剪貼簿寫入資料。
ConsoleRead | 讀取來自 AutoIt 腳本程式的 STDIN 字串。
ConsoleWrite | 將資料寫入 STDOUT 字串。一些文字編輯器可讀取此字串，而在該字串上有可能被預期資料的其它程式也是。
ConsoleWriteError | 將資料寫入 STDOUT 字串。一些文字編輯器可讀取此字串，而在該字串上有可能被預期資料的其它程式也是。
ControlClick | 向指定控制項傳送滑鼠點選指令。
ControlCommand | 向指定控制項傳送指令。
ControlDisable | 關閉或使某控制項變成灰色不可用狀態。
ControlEnable | 使某控制項從灰色不可用狀態恢復成正常可用狀態。
ControlFocus | 設定輸入焦點到指定視窗的某個控制項上。
ControlGetFocus | 返回指定視窗上鍵盤焦點所在的控制項的 ControlRef#。
ControlGetHandle | 取得指定控制項的內部控制碼。
ControlGetPos | 取得指定控制項相對其視窗的座標位置和大小等訊息。
ControlGetText | 取得指定控制項上的文字。
ControlHide | 隱藏指定控制項。
ControlListView | 向指定的 ListView32 控制項傳送指令。
ControlMove | 在視窗內移動控制項。
ControlSend | 向指定的控制項傳送字串。
ControlSetText | 修改指定控制項的文字。
ControlShow | 把隱藏的控制項顯示出來。
ControlTreeView | 向 TreeView32 控制項傳送某個指令。
Cos | 求某個數的餘弦值 (cosine) 。
Dec | 返回某個十六進位字串的十進位值。
DirCopy | 複製指定目錄及其所有子目錄和檔案 (類似於xcopy指令) 。
DirCreate | 新增一個目錄/資料夾。
DirGetSize | 返回指定目錄的佔用空間大小 (單位：位元組) 。
DirMove | 移動指定目錄及其所有子目錄和檔案。
DirRemove | 移除一個目錄/資料夾。
DllCall | 呼叫指定 DLL(動態連結函式庫) 檔案內部的函數。
DllCallbackFree | 針對前一個以 DllCallbackRegister 建立的控制碼挪出可用空間。
DllCallbackGetPtr | 返回到指標，並到可被傳遞到 Win32 API 的某個返回函數。
DllCallbackRegister | 建立一個使用者自訂的 DLL 返回呼叫函數。
DllClose | 關閉以前開啟過的DLL檔案。
DllOpen | 開啟指定的 DLL 檔案以供 DllCall 函數使用。
DllStructCreate | 建立一個 C/C++ 結構鍵入 DllCall 中使用。
DllStructGetData | 返回某個 struct 的類別資料。
DllStructGetPtr | 返回指標到 struct 或一個 struct 類別。
DllStructGetSize | 返回在 struct 位元內的大小。
DllStructSetData | 設定在 struct 內類別的輸入資料。
DriveGetDrive | 返回一個含有指定硬碟機硬碟的群組。
DriveGetFileSystem | 返回指定硬碟機的檔案系統類型。
DriveGetLabel | 若指定的硬碟機分區的標籤沒有空白，則返回標籤名稱。
DriveGetSerial | 返回指定硬碟機的序號。
DriveGetType | 返回指定硬碟機的類型。
DriveMapAdd | 映射網路硬碟機。
DriveMapDel | 中斷網路硬碟機。
DriveMapGet | 接收映射硬碟的詳細資料。
DriveSetLabel | 設定指定硬碟機的標籤。
DriveSpaceFree | 以MB（兆位元組) 為單位返回指定路徑所在分區的剩餘空間。
DriveSpaceTotal | 以MB（兆位元組) 為單位返回指定路徑所在分區的總計空間。
DriveStatus | 以字串的形式返回指定硬碟機的狀態。
EnvGet | 返回指定的系統環境變數的值。
EnvSet | 寫入或修改一個環境變數。
EnvUpdate | 更新作業系統的環境變數。
Eval | 返回被字串定義變數的值。
Execute | 執行某個運算式。
Exp | 求自然對數 e 的指定運算結果。
FileChangeDir | 變更當前的工作目錄。
FileClose | 關閉之前已開啟的文字檔案。
FileCopy | 複製一個或多個檔案。
FileCreateNTFSLink | 建立一個 NTFS 硬碟連結到檔案或某個目錄。
FileCreateShortcut | 建立指定檔案的捷徑（.lnk檔案) 。
FileDelete | 移除一個或多個檔案。
FileExists | 檢查指定檔案或目錄是否存在。
FileFindFirstFile | 返回一個以檔案關鍵字搜尋的 "控制碼"。
FileFindNextFile | 搜尋指定字串並返回 (下一個) 與之符合的檔案名稱，但要求在呼叫過 FileFindFirstFile 函數之後。
FileGetAttrib | 返回指定檔案的屬性代碼。
FileGetLongName | 返回指定路徑的長檔名。
FileGetShortcut | 取得指定捷徑的詳細內容。
FileGetShortName | 返回指定路徑的短檔名（按8.3命名稱規則，即檔案前綴8個字元，後綴3個字元) 。
FileGetSize | 以位元組為單位返回指定檔案的大小。
FileGetTime | 返回指定檔案的時間戳記 (時間和日期) 訊息。
FileGetVersion | 返回指定 "檔案" (通常是指可執行檔案) 的版本訊息。
FileInstall | 包裝並載入指定檔案到編譯後的腳本程式中。
FileMove | 移動一個或多個檔案。
FileOpen | 開啟指定的文字檔案以供讀寫。
FileOpenDialog | 顯示一個檔案開啟對話框。
FileRead | 從之前已開啟的文字檔案中讀取指定數量的字元。
FileReadLine | 從之前已開啟的文字檔案中讀取指定行的字元。
FileRecycle | 把指定的檔案或目錄放入資源回收筒。
FileRecycleEmpty | 清理資源回收筒。
FileSaveDialog | 顯示一個儲存檔案對話框。
FileSelectFolder | 顯示一個瀏覽資料夾對話框。
FileSetAttrib | 設定一個或多個檔案的屬性。
FileSetTime | 修改一個或多個檔案的時間戳記。
FileWrite | 向之前已開啟的文字檔案結尾追加一行資料。
FileWriteLine | 向之前已開啟的文字檔案結尾追加一行資料。
Floor | 向下捨入返回至最近的整數值。
FtpSetProxy | 設定連線FTP時使用的代理伺服器。
GUICreate | 建立一個 GUI 視窗。
GUICtrlCreateAvi | 在GUI上建立一個 AVI 視訊控制項。
GUICtrlCreateButton | 在GUI上建立一個按鈕 (Button) 控制項。
GUICtrlCreateCheckbox | 在GUI上建立一個複選 (Checkbox) 控制項。
GUICtrlCreateCombo | 在GUI上建立一個下拉式選單 (Combo) 控制項。
GUICtrlCreateContextMenu | 在指定控制項或GUI視窗上建立右鍵選單。
GUICtrlCreateDate | 在GUI上建立一個日期控制項。
GUICtrlCreateDummy | 在GUI上建立一個 Dummy 控制項。
GUICtrlCreateEdit | 在GUI上建立一個編輯 (Edit) 控制項。
GUICtrlCreateGraphic | 在GUI上建立一個圖片 (Graphic) 控制項。
GUICtrlCreateGroup | 在GUI上建立一個群組 (Group) 控制項。
GUICtrlCreateIcon | 在GUI上建立一個圖示 (Icon) 控制項。
GUICtrlCreateInput | 在GUI上建立一個輸入框 (Input) 控制項。
GUICtrlCreateLabel | 在GUI上建立一個 Label 控制項。
GUICtrlCreateList | 在GUI上建立一個清單 (List) 控制項。
GUICtrlCreateListView | 在GUI上建立一個 ListView 控制項。
GUICtrlCreateListViewItem | 在GUI上建立一個 ListView 控制項項目。
GUICtrlCreateMenu | 在GUI上建立一個選單控制項。
GUICtrlCreateMenuItem | 在GUI上建立一個選單項目控制項。
GUICtrlCreateMonthCal | 在GUI上建立一個月曆控制項。
GUICtrlCreateObj | 在GUI上建立一個 ActiveX 控制項。
GUICtrlCreatePic | 在GUI上建立一個圖片控制項。
GUICtrlCreateProgress | 在GUI上建立一個進度列控制項。
GUICtrlCreateRadio | 在GUI上建立一個單選 (Radio) 控制項。
GUICtrlCreateSlider | 在GUI上建立一個滑動軸 (Slider) 控制項。
GUICtrlCreateTab | 在GUI上建立一個標籤頁 (Tab) 控制項。
GUICtrlCreateTabItem | 在GUI上建立一個標籤控制項項目。
GUICtrlCreateTreeView | 在GUI上建立一個 TreeView 控制項。
GUICtrlCreateTreeViewItem | 在GUI上建立一個 TreeView 控制項項目。
GUICtrlCreateUpdown | 在GUI上建立一個 Updown (上下箭頭) 控制項。
GUICtrlDelete | 移除指定控制項。
GUICtrlGetHandle | 返回指定控制項的控制碼及某些特殊控制碼 (Menu, ContextMenu, TreeViewItem)。
GUICtrlGetState | 取得指定控制項的當前狀態。
GUICtrlRead | 讀取指定控制項的狀態或資料。
GUICtrlRecvMsg | 傳送控制項訊息並接收在 lParam 內的資訊。
GUICtrlRegisterListViewSort | 註冊某個已定義使用者，其對內部 listview 排序返回呼叫的函數值。
GUICtrlSendMsg | 向指定控制項傳送訊息。
GUICtrlSendToDummy | 向指定的 Dummy 控制項傳送訊息。
GUICtrlSetBkColor | 設定指定控制項的背景顏色。
GUICtrlSetColor | 設定指定控制項的文字顏色。
GUICtrlSetCursor | 設定某個以特定模式控制的滑鼠游標圖示。
GUICtrlSetData | 修改指定控制項的相關資料。
GUICtrlSetDefBkColor | 設定 GUI 視窗所有控制項的預設背景色彩。
GUICtrlSetDefColor | 設定 GUI 視窗所有控制項的預設文字色彩。
GUICtrlSetFont | 設定指定控制項的字型。
GUICtrlSetGraphic | 修改指定控制項的相關資料。
GUICtrlSetImage | 設定指定控制項的點陣圖或圖示。
GUICtrlSetLimit | 設定某些控制項的字元數或像素限制。
GUICtrlSetOnEvent | 為指定控制項的點選行為定義一個功能函數。
GUICtrlSetPos | 調整某個控制項在視窗中的座標位置。
GUICtrlSetResizing | 設定某個控制項的大小調整模式。
GUICtrlSetState | 調整指定控制項的狀態。
GUICtrlSetStyle | 變更指定控制項的類型。
GUICtrlSetTip | 定義指定控制項的相關提示文字。
GUIDelete | 銷毀指定視窗及其所有控制項 (在記憶體佔用的空間)。
GUIGetCursorInfo | 取得 (相對於視窗的) 滑鼠位置。
GUIGetMsg | 列出檢視所有可能已發生事件的 GUI 視窗。
GUIGetStyle | 接收一個 GUI 視窗的樣式類型。
GUIRegisterMsg | 註冊一個定義使用者到已知視窗訊息 ID (WM_MSG)。
GUISetAccelerators | 設定一個用於 GUI 視窗的加速參數表。
GUISetBkColor | 設定視窗的背景顏色。
GUISetCoord | 設定下一個控制項的絕對座標值。
GUISetCursor | 設定 (滑鼠經由視窗時的) 滑鼠游標。
GUISetFont | 設定視窗的預設字型。
GUISetHelp | 設定在使用者按下F1時就開啟的 (可執行) 檔案。
GUISetIcon | 設定用在視窗 (標題欄上顯示) 的圖示。
GUISetOnEvent | 定義一個當系統按鈕被點選時，欲呼叫的使用者函數。
GUISetState | 調整視窗的狀態。
GUISetStyle | 調整視窗的類型。
GUIStartGroup | 使此後所有被建立的控制項都歸為一個群組。
GUISwitch | 切換視窗。
Hex | 返回一個整數字串值或某個被轉換為十六進位的二進位類型。
HotKeySet | 設定一個可呼叫某使用者函數的快速鍵。
HttpSetProxy | 設定連線HTTP時使用的代理伺服器。
HWnd | 轉換某個運算子為 HWND 控制碼。
InetGet | 利用HTTP或FTP協定從網際網路上下載指定檔案。
InetGetSize | 以位元組為單位返回存放在網際網路上的指定檔案大小。
IniDelete | 從標準設定檔 (*.ini) 中移除某個數值。
IniRead | 從標準設定檔 (*.ini) 中讀取某個數值。
IniReadSection | 從標準設定檔 (*.ini) 中讀取某個位元中的所有關鍵字或值。
IniReadSectionNames | 從標準設定檔 (*.ini) 中讀取所有位元的訊息。
IniRenameSection | 從標準設定檔 (*.ini) 中重新命名某個位元的訊息。
IniWrite | 向標準設定檔 (*.ini) 中寫入某個數值。
IniWriteSection | 向標準設定檔 (*.ini) 中寫入某個字元。
InputBox | 顯示以一個輸入框以供使用者輸入資料。
Int | 返回某個運算式的整數值。
IsAdmin | 檢查目前使用者是否有完整管理員權限。
IsArray | 檢查某個變數是否為群組類型。
IsBinary | 檢查某個變數或運算式是否為二進位類型。
IsBool | 檢查某個變數的主要類型是否為布林變數。
IsDeclared | 檢查某個變數是否已聲明。
IsDllStruct | 檢查某個變數是否為 DllStruct 類型。
IsFloat | 檢查某個變數或運算式是否為浮點類型。
IsHWnd | 檢查某個變數的主要類型是否為指標及視窗控制碼。
IsInt | 檢查某個變數或運算式是否為整數。
IsKeyword | 檢查某個變數是否為關鍵字 (例如：Default)。
IsNumber | 檢查某個變數是否為數字類型資料。
IsObj | 檢查某個變數或運算式是否為物件類型。
IsPtr | 檢查某個變數的主要類型是否為指標。
IsString | 檢查某個變數是否字元類型資料。
Log | 求某個數的自然對數。
MemGetStats | 取得記憶體相關訊息。
Mod | 執行模組運算。
MouseClick | 執行滑鼠點選動作。
MouseClickDrag | 執行滑鼠拖曳動作。
MouseDown | 在當前位置產生一個滑鼠按下 (按鍵) 事件。
MouseGetCursor | 返回目前滑鼠游標的游標 ID 碼。
MouseGetPos | 取得當前滑鼠的座標位置。
MouseMove | 移動滑鼠游標。
MouseUp | 在當前位置產生一個滑鼠釋放 (按鍵) 事件。
MouseWheel | 向上或向下捲動滑鼠滾輪事件，僅支援NT/2000/XP。
MsgBox | 顯示一個簡單的對話框 (可設定逾時屬性) 。
Number | 返回某運算式的數值結果。
ObjCreate | 建立一個從取得類別名稱關聯到 COM 的物件。
ObjEvent | 處理從取得物件進來的事件。
ObjGet | 接收從工作階段程式或檔名關聯到 COM 的某個物件。
ObjName | 返回名稱或某個物件的整數說明。
Ping | 向指定的遠端主電腦發Ping指令並返回收發時間量。
PixelChecksum | 生成某區域像素的校驗和。
PixelGetColor | 返回指定座標位置上的像素點的顏色值。
PixelSearch | 在指定矩形區域中搜尋與指定顏色值符合的像素 (並返回第一個符合的像素的座標) 。
ProcessClose | 結束某個程式。
ProcessExists | 檢查指定程式是否存在。
ProcessGetStats | 返回一個跟記憶體相關的群組或某在執行中程式的 IO 訊息。
ProcessList | 返回當前執行中的程式清單 (含有程式名稱和PID值) 。
ProcessSetPriority | 設定某個程式的優先層級。
ProcessWait | 暫停腳本的執行直至給定程式存在為止。
ProcessWaitClose | 暫停腳本的執行直至給定程式不再存在為止。
ProgressOff | 關閉進度列視窗。
ProgressOn | 建立自訂進度列視窗。
ProgressSet | 設定之前建立的進度列視窗的座標位置、文字等屬性。
Ptr | 轉換某個運算式為指標變數。
Random | 產生一個浮點偽隨機數。
RegDelete | 從登錄中移除指定機碼。
RegEnumKey | 根據物件 instance 讀取指定子機碼名稱。
RegEnumVal | 根據物件 instance 讀取指定子機碼數值。
RegRead | 從登錄讀取一個數值。
RegWrite | 從登錄建立一個機碼或數值。
Round | 返回某數值精確到指定位的結果。
Run | 執行外部程式。
RunAs | 執行位於其它使用者環境下的外部程式。
RunAsWait | 執行位於其它使用者環境下的外部程式及暫停腳本的執行直到程式執行完畢。
RunWait | 執行一個外部程式並暫停腳本的執行直至該程式執行完畢。
Send | 向啟動視窗傳送模擬按鍵動作。
SendKeepActive | 嘗試在 Send() 期間保持指定視窗為作用狀態。
SetError | 手動設定巨集 @error 的值。
SetExtended | 手動設定巨集 @extended 的值。
ShellExecute | 執行一個外部程式直到使用 ShellExecute API 為止。
ShellExecuteWait | 執行一個外部程式來使用 ShellExecute API 並暫停腳本的執行直到執行完畢。
Shutdown | 關機。
Sin | 求某個數的正弦值 (sine) 。
Sleep | 使腳本暫停指定時間段。
SoundPlay | 播放指定的音訊檔案。
SoundSetWaveVolume | 調整系統 Wave 音量的百分比大小。
SplashImageOn | 建立一個自訂的圖片 (彈出畫面/封面) 視窗。
SplashOff | 關閉彈出畫面。
SplashTextOn | 建立一個自訂的文字 (彈出畫面) 視窗。
Sqrt | 求某個數的平方根。
SRandom | 設定要產生隨機碼的運算式。
StatusbarGetText | 取得標準狀態列控制項的文字。
StderrRead | 從前一個執行副程式的 STDERR 字串讀取。
StdinWrite | 寫入數值或字元到前一個執行副程式的 STDIN 字串。
StdioClose | 關閉以 STDIO 重新導向前一個執行程式的所有相關資源。
StdoutRead | 從前一個執行副程式的 STDOUT 字串讀取。
String | 返回某運算式的字串結果。
StringAddCR | 在指定字串的所有換行符號 ( Chr(10) ) 前附加一個ENTER ( Chr(13) ) （ASCII碼) 。
StringCompare | 依照選項比對兩個字串。
StringFormat | 返回格式化字串 (類似於C語言的sprintf() 函數) 。
StringFromASCIIArray | 覆寫某個 ASCII 碼群組為一個字串。
StringInStr | 檢查某個字串是否含有給定的子字串。
StringIsAlNum | 檢查某個字串是否僅含有字母或數字。
StringIsAlpha | 檢查某個字串是否僅含有字母。
StringIsASCII | 檢查某個字串是否僅含有ASCII碼值介於 0x00 - 0x7f（0 - 127) 之間的字元。
StringIsDigit | 檢查某個字串是否僅含有數字 (0-9) 。
StringIsFloat | 檢查某個字串是否為浮點。
StringIsInt | 檢查某個字串是否為整數。
StringIsLower | 檢查某個字串是否僅含有小寫字母。
StringIsSpace | 檢查某個字串是否僅含有「空白符號」。
StringIsUpper | 檢查某個字串是否僅含有大寫字母。
StringIsXDigit | 檢查某個字串是否僅含有十六進位字元 (0-9, A-F) 。
StringLeft | 返回字串中從左開始指定數量的字元。
StringLen | 返回指定字串的字元總數。
StringLower | 轉換字串為小寫字母。
StringMid | 取某個字串的部分字元。
StringRegExp | 檢查某個字串是否符合規則陳述式要求。
StringRegExpReplace | 在邏輯運算式中以某個字串取代文字。
StringReplace | 置換字串中的指定子字串。
StringRight | 返回字串中從右開始指定數量的字元。
StringSplit | 以指定分隔符號把字串分割成若干子字串。
StringStripCR | 移除字串中的所有ENTER ( Chr(13) ) 。
StringStripWS | 除去字串中的所有「空白符號」。
StringToASCIIArray | 覆寫某個字串為每個字元都內含 ASCII 碼的群組。
StringToBinary | 將某個字串覆寫為二進位資料。
StringTrimLeft | 移除字串中從左開始指定數量的字元。
StringTrimRight | 移除字串中從右開始指定數量的字元。
StringUpper | 轉換字串為大寫字母。
Tan | 求某個數的正切值 (tan) 。
TCPAccept | 允許連接埠上的進入連線嘗試。
TCPCloseSocket | 關閉 TCP 連接埠。
TCPConnect | 建立一個連線至存在伺服器的連接埠。
TCPListen | 建立一個列出某個進入連線的連接埠。
TCPNameToIP | 覆寫網路連線名稱到 IP 位址。
TCPRecv | 從已連線的連接埠上接收資料。
TCPSend | 在已連線的連接埠上傳送資料。
TCPShutdown, UDPShutdown | 終止 TCP/UDP 服務。
TCPStartup, UDPStartup | 啟動 TCP 或 UDP 服務。
TimerDiff | 從前一個呼叫至 TimerInit() 即時返回差異。
TimerInit | 返回當前時間戳記 (以毫秒為單位) 。
ToolTip | 在螢幕的任意位置顯示一個工具提示。
TrayCreateItem | 建立在常駐區的選單項目 (menuitem) 控制項。
TrayCreateMenu | 建立在常駐區的選單 (menu) 控制項。
TrayGetMsg | 若發生事件彈出提示供檢視。
TrayItemDelete | 從右鍵選單移除選單/項目控制項。
TrayItemGetHandle | 返回右鍵選單的控制瑪。
TrayItemGetState | 取得指定控制項的當前狀態。
TrayItemGetText | 取得某個選單/項目控制項的 itemtext 文字。
TrayItemSetOnEvent | 定義一個當右鍵選單項目被選擇時，呼叫的使用定義函數。
TrayItemSetState | 設定選單/項目控制項的狀態。
TrayItemSetText | 設定選單/項目控制項的 itemtext 文字。
TraySetClick | 設定右鍵圖示的選擇模式以何種模式彈出右鍵選單。
TraySetIcon | 載入/設定一個指定的常駐圖示。
TraySetOnEvent | 定義一個當特殊常駐提示動作發生時，呼叫的使用定義函數。
TraySetPauseIcon | 載入/設定一個指定的常駐暫停圖示。
TraySetState | 設定常駐圖示的狀態。
TraySetToolTip | (重覆)設定工具列圖示區中的快顯提示。
TrayTip | 從 AutoIt 圖示上提示快顯 (僅 2000/XP)。
UBound | 返回 (多重範圍) 群組中各範圍的大小。
UDPBind | 建立一個接受進入連線的連接埠。
UDPCloseSocket | 關閉某個 UDP 連接埠。
UDPOpen | 開啟一個連線至存在伺服器的連接埠。
UDPRecv | 接收來自開啟連接埠的資料。
UDPSend | 傳送於開啟連接埠的資料。
VarGetType | 返回變數運算式整數類型。
WinActivate | 啟動指定的視窗 (使其成為活動視窗) 。
WinActive | 檢查指定的視窗是否存在且當前被啟動。
WinClose | 關閉指定視窗。
WinExists | 檢查指定的視窗是否存在。
WinFlash | 將工作列的某個視窗以閃爍提示。
WinGetCaretPos | 返回頂層視窗的插入符號的座標位置。
WinGetClassList | 取得指定視窗的所有控制項類別清單。
WinGetClientSize | 取得指定視窗用戶區的大小訊息。
WinGetHandle | 取得指定視窗的內部控制碼。
WinGetPos | 取得指定視窗的座標位置和大小等屬性。
WinGetProcess | 取得指定視窗的相關程序 ID (PID) 。
WinGetState | 取得指定視窗的狀態。
WinGetText | 取得指定視窗中的文字。
WinGetTitle | 取得指定視窗的完整標題名稱。
WinKill | 強行關閉指定視窗。
WinList | 取得視窗清單。
WinMenuSelectItem | 呼叫視窗中的某個選單項目。
WinMinimizeAll | 最小化全部視窗。
WinMinimizeAllUndo | 取消之前 WinMinimizeAll 的效果。
WinMove | 移動指定的視窗或調整視窗的大小。
WinSetOnTop | 設定指定視窗的「始終在頂層」屬性。
WinSetState | 顯示、隱藏、最小化、最大化或復原某個視窗。
WinSetTitle | 修改指定視窗的標題。
WinSetTrans | 設定指定視窗的透明度 (僅支援Windows 2000/XP或更高版本) 。
WinWait | 暫停腳本的執行直至指定視窗存在 (出現) 為止。
WinWaitActive | 暫停腳本的執行直至指定視窗被啟動 (成為可活動狀態) 為止。
WinWaitClose | 暫停腳本的執行直至所指定視窗不再存在 (被關閉或其它) 為止。
WinWaitNotActive | 暫停腳本的執行直至指定視窗不是啟動狀態為止。


函數注意事項

許多函數都含有一些選擇性參數。 如您想要指定一個選擇性參數，那麼在它前面的全部參數都須指定！
例如，以執行 Run ( "檔案名稱", ["工作目錄" [, 旗標]] ) 函數來說，如果您要指定這個 旗標 ，則必須把它前面的工作目錄 (workingdir) 參數指定出來，不能省略。

大部分的 Win___ 函數都帶有 "文字" 這類選擇性參數， 這個參數係用來區分那些有相同標題名稱的視窗。

某些函數會利用 返回值 來表示函數執行成功/失敗； 有些則利用設定 @error flag 的值來表示，還有些則同時使用這兩種模式…
@error = 0 ;代表成功
Return = varies ;變數，通常為了便於瞭解而以 非零值 的返回值來表示一個成功的結果。

If someUserFunc() then ;...函式成功執行
If Not someUserFunc() then ;...函式失敗

$x = FileReadLine("C:\someFile.txt")
If @error = -1 Then ;檔案結尾

在呼叫某個函數的時候，如該函數有設定 @error 旗標，則應該在使用返回值之前，優先考慮利用 @error 旗標來檢查函數。這是因為 if @error 陳述式可以明確地指出錯誤，而返回值卻通常是未定義的...

@error 在進入函式時通常是設定為 0 。

當檔案標示 [返回值 = 無] 時，AutoIt 通常會返回一個值以避免錯誤。 返回值通常上是 1 ，不過你不必非設定取該值不可。

當有某個選擇性參數需被定義、且順序位於一個或更多其它參數前面時，就要指定 一個預設值。這個有可能是 "" 的參數字串和 -1 等其它類型。某些函數像 StringInStr 或 StringReplace 須為 0，端看對應的選擇參數性質說明來區分。


Function ClipGet

函數說明（Function Reference）

ClipGet

取得剪貼簿儲存的資料。

ClipGet ( )

參數

無。

返回值

成功： | 返回剪貼簿內的字串。
失敗： | 若剪貼簿空白則設 @error 為 1。
 | 若剪貼簿不含文字為 2。
 | 若剪貼簿拒絕存取為 3 或 4。

附註

當要多重選擇 檔案/目錄(DIR) 剪貼簿儲存的內容時，用 @LF 分隔文字返回檔案/目錄名稱。

相關

ClipPut

範例

$bak = ClipGet()
MsgBox(0, "剪貼簿內容：", $bak)

ClipPut($bak & "加入的文字")
MsgBox(0, "剪貼簿內容：", ClipGet())


Function ClipPut

函數說明（Function Reference）

ClipPut

向剪貼簿寫入資料。

ClipPut ( "寫入" )

參數

寫入 要寫入剪貼簿的文字。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

剪貼簿內任何資料將被覆寫。
若是空白字串 "" 則會清理剪貼簿資料。

相關

ClipGet

範例

ClipPut("我被複製到剪貼簿")


Function EnvGet

函數說明（Function Reference）

EnvGet

返回指定的系統環境變數的值。

EnvGet ( "環境變數(env-variable)" )

參數

環境變數 環境變數的名稱如："TEMP" 或 "PATH"。

返回值

返回請求的變數 (若變數不存在則返回空白字串)。

附註

無。

相關

EnvSet, EnvUpdate

範例

$var = EnvGet("PATH")
MsgBox(4096, "路徑變數為：", $var)


Function EnvSet

函數說明（Function Reference）

EnvSet

寫入或修改一個環境變數。

EnvSet ( "環境變數(env-variable)" [, "數值"] )

參數

環境變數 | 設定的環境變數名稱。
數值 | [選擇性參數] 要設定的環境變數數值，若數值不能使用則將移除環境變數。

返回值

成功： | 不返回 0。
失敗： | 返回值 0。

附註

以此方法設定的環境變數，只能用來處理 AutoIt 產生的程式 (Run, RunWait)。
一但關閉了 AutoIt，則變數將被禁止結束。

相關

EnvGet, EnvUpdate

範例

EnvSet("MYENV", "這是測試")


Function EnvUpdate

函數說明（Function Reference）

EnvUpdate

更新作業系統的環境變數。

EnvUpdate ( )

參數

無。

返回值

成功： | 無。
失敗： | 設定 @error 為 1。

附註

此函數類似系統登出並重新啟動，例如，變更為 %path% 環境變數可能暫時沒有效果，直到您呼叫 EnvUpdate 才能發生作用 (或是您登出/重新開機)。

相關

EnvGet, EnvSet

範例

EnvUpdate()


Function MemGetStats

函數說明（Function Reference）

MemGetStats

取得記憶體相關訊息。

MemGetStats ( )

參數

無。

返回值

返回內含記憶體訊息的七種類別群組(Array)：

$array[0] = 載入記憶體 (記憶體使用率百分比)
$array[1] = 實體 RAM 總計大小
$array[2] = 實體 RAM 可用空間
$array[3] = 分頁表總計大小
$array[4] = 分頁表可用空間
$array[5] = 虛擬總計大小
$array[6] = 虛擬可用空間

所有記憶體大小均以 KB 表示。

附註

無。

相關

無。

範例

$mem = MemGetStats()
MsgBox(0, "實體 RAM 總計大小 (KB) --", $mem[1])


Function ConsoleRead

函數說明（Function Reference）

ConsoleRead

讀取來自 AutoIt 腳本程式的 STDIN 字串。

ConsoleRead ( [取值 = false[, 二進位 = false ]])

參數

取值 | 如果成立，則函數不會移除自字串讀取到的字元。
二進位 | 如果成立，則函數會以二進位讀取資料而不是文字 (預設是文字)。

返回值

成功： | 返回讀取得到的資料，@extended 內含讀取的位元組大小。
失敗： | 如到達 EOF (End Of File)、STDIN 不能與程序連線、或其它錯誤則設定 @error 為非零值。

附註

ConsoleRead 會讀取來自 AutoIt 腳本程式的控制台標準輸入字串，它一般被控制台程式用來讀取來自主程序的輸出資料。
ConsoleRead 不能被擋住，否則將立即返回。為了取得全部的資料，它必須在迴圈內被呼叫。
擷取字串上的內容是不會將資料從緩衝區中移除的，不過，它可以將有用資料如一般返回。
預設值上，返回的資料是文字格式。使用二進位選項的話，該資料將以二進位格式返回。

相關

ConsoleWrite, ConsoleWriteError, Run

範例

; 將此腳本編譯為 "ConsoleRead.exe"。
; 在 ConsoleRead.exe 所在資料夾內開啟指令提示字元
; 輸入下列指令
; echo 您好！！ConsoleRead.exe
; 當於控制台視窗請求呼叫時，上方的指令行會出現回應文字 "您好！"
; 但不會直接彈出來，因為 | 會告訴控制台把它輸出到 ConsoleRead.exe 程式的 STDIN 字串。
If Not @Compiled Then
MsgBox(0, "", "此腳本必須被編譯，以正確示範此類型的作用。")
Exit -1
EndIf

Local $data
While True
$data &= ConsoleRead()
If @error Then ExitLoop
Sleep(25)
WEnd
MsgBox(0, "", "已收到：" & @CRLF & @CRLF & $data)


Function ConsoleWrite

函數說明（Function Reference）

ConsoleWrite

將資料寫入 STDOUT 字串。一些文字編輯器可讀取此字串，而在該字串上有可能被預期資料的其它程式也是。

ConsoleWrite ( "資料" )

參數

資料 您要輸出的資料，可以是文字也可以是二進位資料。

返回值

寫入的資料數量。若寫入二進位資料，為寫入的位元數值；若寫入的是文字，則為字元數量。

附註

此函數的目標是寫入 STDOUT 字串。許多常見的文字編輯器都可以讀取，將腳本編譯為控制台程式也可以擁有 STDOUT 字串。

單純使用是無法寫入到 DOS 控制台的，除非將腳本編譯為控制台程式才可以...

相關

ConsoleWriteError, ConsoleRead

範例

Local $var = "測試"
ConsoleWrite("var=" & $var & @CRLF)
; 請在可補捉控制台輸出這類的文字編輯器中執行此腳本，便可以產生字串："var=測試"


Function ConsoleWriteError

函數說明（Function Reference）

ConsoleWriteError

將資料寫入 STDOUT 字串。一些文字編輯器可讀取此字串，而在該字串上有可能被預期資料的其它程式也是。

ConsoleWriteError ( "資料" )

參數

資料 您要輸出的資料，可以是文字也可以是二進位資料。

返回值

寫入的資料數量。若寫入二進位資料，為寫入的位元數值；若寫入的是文字，則為字元數量。

附註

此函數的目標是寫入 STDOUT 字串。許多常見的文字編輯器都可以讀取，將腳本編譯為控制台程式也可以擁有 STDOUT 字串。

單純使用是無法寫入到 DOS 控制台的，除非將腳本編譯為控制台程式才可以...

相關

ConsoleWrite, ConsoleRead

範例

Local $var = "測試"
ConsoleWriteError("var=" & $var & @CRLF)
; 請在可補捉控制台輸出這類的文字編輯器中執行此腳本，便可以產生字串："var=測試"


Function DirCopy

函數說明（Function Reference）

DirCopy

複製指定目錄及其所有子目錄和檔案（類似於xcopy指令）。

DirCopy ( "來源目錄", "目標目錄" [, 旗標] )

參數

來源目錄 | 來源目錄路徑 (結尾不須反斜線符號)，如："C:\Path1"。
目標目錄 | 目標目錄路徑 (結尾不須反斜線符號)，如："C:\Path_Copy"。
旗標 | [選擇性參數] 此旗標決定當目標已存在時如何覆寫檔案的動作： 0 = 不覆寫已存在的檔案 (預設) 1 = 覆寫存在的檔案

返回值

成功： | 返回值為1。
失敗： | 若複製目錄發生錯誤，則返回 0。

附註

若目標資料夾不存在，將自行建立 (在可能情況下)。

相關

DirRemove, FileCopy

範例

DirCopy(@MyDocumentsDir, "C:\Backups\MyDocs", 1)


Function DirCreate

函數說明（Function Reference）

DirCreate

新增一個目錄/資料夾。

DirCreate ( "路徑" )

參數

路徑 要建立的目錄路徑。

返回值

成功： | 返回值為1。
失敗： | 若建立目錄發生錯誤，則返回 0。

附註

此函數也可以在提供的 "路徑" 不存在時，自行建立主目錄。

相關

DirRemove, FileCopy

範例

DirCreate("C:\Test1\Folder1\Folder2")


Function DirGetSize

函數說明（Function Reference）

DirGetSize

返回指定目錄的佔用空間大小 (單位：位元組)。

DirGetSize ( "路徑" [, 旗標] )

參數

目標路徑 | 要取得佔用空間的目錄路徑，例如："C:\Windows"。
旗標 | [選擇性參數] 此旗標決定了函數的行為和結果，可以依下表所列來組合： 0 = (預設) 1 = 開啟進階模式 -> 返回一個內含進階訊息的群組類別 (請見下表) 2 = 不計算子目錄下的檔案大小 (遞迴模式關閉-Off)

返回值

成功： | 返回 >= 0 計算得出的大小。
失敗： | 若路徑不存在，則返回 -1 並設 @error 為 1。

附註

若暫停腳本則此函數也會暫停，將等待直到恢復腳本才會繼續！

若您用的是進階模式，那麼從此函數返回的群組(Array)會是內含下列類別的單一範圍群組：
$array[0] = 大小
$array[1] = 計算檔案
$array[2] = 計算目錄

相關

無。

範例

$size = DirGetSize(@HomeDrive)
Msgbox(0,"內含子目錄","大小(MB 位元組)：" & Round($size / 1024 / 1024))

$size = DirGetSize(@WindowsDir, 2)
Msgbox(0,"不內含子目錄","大小(MB 位元組)：" & Round($size / 1024 / 1024))

$timer = TimerInit()
$size = DirGetSize("\\10.0.0.1\h$",1)
$diff = Round(TimerDiff($timer) / 1000) ; 時間秒數
If IsArray($size) Then
Msgbox(0,"DirGetSize-訊息","大小(位元組)：" & $size[0] & @LF _
& "檔案：" & $size[1] & @LF & "目錄：" & $size[2] & @LF _
& "經由時間(Sec)：" & $diff)
EndIf


Function DirMove

函數說明（Function Reference）

DirMove

移動指定目錄及其所有子目錄和檔案。

DirMove ( "來源目錄", "目標目錄" [, 旗標] )

參數

來源目錄 | 要移動的來源目錄路徑 (結尾不須反斜線符號)，如："C:\Path1"。
目標目錄 | 目標目錄路徑 (結尾不須反斜線符號)，如："C:\Path_Copy"。
旗標 | [選擇性參數] 此旗標決定當目標已存在時如何覆寫檔案的動作： 0 = 不覆寫已存在的檔案 (預設) 1 = 覆寫存在的檔案

返回值

成功： | 返回值為1。
失敗： | 若搬移目錄發生錯誤，則返回 0。

附註

若來源目錄和目標目錄位於不同的硬碟代號，或是 UNC 路徑已被使用，則將執行複製/移除動作而不是直接移動。

若目標目錄已存在且設定了旗標為覆寫，則來源目錄將被移動到目標目錄裡面。

由於 AutoIt 並沒有 "DirRename"(目錄重新命名) 函數，請使用 DirMove 來重新命名資料夾！

相關

DirRemove, FileMove

範例

DirMove(@MyDocumentsDir, "C:\Backups\MyDocs")


Function DirRemove

函數說明（Function Reference）

DirRemove

移除一個目錄/資料夾。

DirRemove ( "路徑" [, 遞歸參數] )

參數

路徑 | 要移除的目錄路徑。
遞歸參數 | [選擇性參數] 使用此旗標參數來決定您是否也要一併移除子目錄： 0 = 不移除檔案和子目錄 (預設) 1 = 移除檔案和子目錄 (就像 DOS 的 DelTree 指令)

返回值

成功： | 返回值為1。
失敗： | 若移除目錄發生錯誤，則返回 0 (或是目錄不存在的話)。

附註

某些目錄的屬性設定會使得移除失敗。

相關

DirCreate, FileRecycle

範例

; 移除 C:\Test1 子目錄及其下檔案
DirRemove("C:\Test1", 1)


Function DriveGetDrive

函數說明（Function Reference）

DriveGetDrive

返回一個含有指定硬碟機硬碟的群組。

DriveGetDrive ( "類型" )

參數

類別 尋找的裝置類型：
"ALL", "CDROM", "REMOVABLE", "FIXED", "NETWORK", "RAMDISK", 或 "UNKNOWN" (全部、光碟機、卸除式裝置、本機硬碟、網路裝置、記憶體硬碟、不明裝置)

返回值

成功： | 以一個字串群組返回找到的裝置 (裝置代號後帶著冒號)，第 0 個群組類型內含裝置的數量。
失敗： | 返回 "" 並設定 @error 為 1。

附註

無。

相關

DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveGetType, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal, DriveStatus

範例

$var = DriveGetDrive( "all" )
If NOT @error Then
MsgBox(4096,"", "已找到 " & $var[0] & " 個裝置。")
For $i = 1 to $var[0]
MsgBox(4096,"裝置" & $i, $var[$i])
Next
EndIf


Function DriveGetFileSystem

函數說明（Function Reference）

DriveGetFileSystem

返回指定硬碟機的檔案系統類型。

DriveGetFileSystem ( "路徑" )

參數

路徑 取得訊息的裝置路徑。

返回值

成功： | 以一個字串返回裝置的檔案系統類型；請見下表。
失敗： | 設定 @error 為 1。

返回值 | 解釋說明
1 (數字) | 裝置「不包括」媒體 (CD, 軟碟機, Zip) 或是該媒體尚未格式化 (RAW)。
"FAT" | 裝置小於 ~500 MB 通常使用的檔案系統，如軟碟機、RAM 硬碟、USB "筆"...等等。
"FAT32" | Windows 9x/Me 下的硬碟通常使用的檔案系統。
"NTFS" | Windows NT/2000/XP 下的硬碟通常使用的檔案系統。
"NWFS" | Novell Netware 檔案交換伺服器通常使用的檔案系統。
"CDFS" | 通常是 CD 媒體在使用 (或是是由虛擬光碟裝置掛載的 ISO 映像檔)。
"UDF" | 通常是 DVD 媒體在使用。

附註

清單上列出的返回值可能與實際不同。

相關

DriveGetDrive, DriveGetLabel, DriveGetSerial, DriveGetType, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal, DriveStatus

範例

$var = DriveGetFileSystem( "c:\" )
MsgBox(4096,"檔案系統類型", $var)


Function DriveGetLabel

函數說明（Function Reference）

DriveGetLabel

若指定的硬碟機分區的標籤沒有空白，則返回標籤名稱。

DriveGetLabel ( "路徑" )

參數

路徑 取得訊息的裝置路徑。

返回值

成功： | 以一個字串返回裝置標籤名稱。
失敗： | 設定 @error 為 1。

附註

無。

相關

DriveGetDrive, DriveGetFileSystem, DriveGetSerial, DriveGetType, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal, DriveStatus

範例

$var = DriveGetLabel( "c:\" )
MsgBox(4096,"裝置標籤名稱",$var)


Function DriveGetSerial

函數說明（Function Reference）

DriveGetSerial

返回指定硬碟機的序號。

DriveGetSerial ( "路徑" )

參數

路徑 取得訊息的裝置路徑。

返回值

成功： | 以一個字串返回裝置序號。
失敗： | 設定 @error 為 1。

附註

無。

相關

DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetType, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal, DriveStatus

範例

$var = DriveGetSerial( "c:\" )
MsgBox(4096, "裝置序號", $var)


Function DriveGetType

函數說明（Function Reference）

DriveGetType

返回指定硬碟機的類型。

DriveGetType ( "路徑" )

參數

路徑 取得訊息的裝置路徑。

返回值

成功： | 返回的裝置類型："Unknown", "Removable", "Fixed", "Network", "CDROM", "RAMDisk"。 (不明裝置、卸除式裝置、本機硬碟、網路裝置、CDROM、記憶體硬碟)
失敗： | 返回 "" 並設定 @error 為 1。

附註

清單上列出的返回值可能與實際不同。

相關

DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal, DriveStatus

範例

$var = DriveGetType( "c:\" )
MsgBox(4096, "裝置類型", $var)


Function DriveMapAdd

函數說明（Function Reference）

DriveMapAdd

映射網路硬碟機。

DriveMapAdd ( "裝置", "遠端分享" [, 旗標 [, "使用者" [, "密碼"]]] )

參數

裝置 | 映射的裝置，例如："O:" 或 "LPT1:"。如您在此參數內傳送一個空白的字串，可以建立一個連線，但是不能映射至指定的裝置。如您指用 "*" 選擇未使用的硬碟裝置代號，則會自動選擇。
遠端分享 | 以 "\\server\share" 格式建立的遠端分享連線。
旗標 | [選擇性參數] 如下列的組合模式： 0 = 預設 1 = 一直保持映射 8 = 如有需要則顯示身份認證對話框
使用者 | [選擇性參數] 連線的使用者名稱，格式為："username" 或 "domain\username"。
密碼 | [選擇性參數] 連線的密碼。

返回值

成功： | 返回 1 (請見附註)。
失敗： | 若不能建立新的映射返回 0 並設定 @error 值 (請見下面附註)。

附註

當函數失敗時 (返回 0) @error 將內含下列資訊：
1 = 未定義 / 其它錯誤，@extended 依 Windows API 設定返回。
2 = 遠端分享拒絕存取。
3 = 指定裝置已分配。
4 = 無效的裝置名稱。
5 = 無效的遠端分享。
6 = 無效的密碼。

請注意：當使用 "*" 指定選擇的裝置代號時，將以該代號做參數返回，取代 1 或 0，如："U:"。
若使用 "*" 錯誤則返回一個空白字串 "" 。

若使用者/密碼已定義，則當前連線至遠端電腦的使用者將授予存取權限。

相關

DriveMapDel, DriveMapGet

範例

; 映射裝置 X 到 \\myserver\stuff 給目前的使用者
DriveMapAdd("X:", "\\myserver\stuff")

; 映射裝置 X 到 \\myserver2\stuff2 給來自 "domainx" 網域的目前使用者 "jon" 密碼： "tickle"
DriveMapAdd("X:", "\\myserver2\stuff2", 0, "domainx\jon", "tickle")


Function DriveMapDel

函數說明（Function Reference）

DriveMapDel

中斷網路硬碟機。

DriveMapDel ( "裝置" )

參數

裝置 中斷連線的裝置，例如："O:" 或 "LPT1:"。

返回值

成功： | 返回 1。
失敗： | 若中斷連線不成功則返回 0。

附註

若您的連線沒有映射的硬碟裝置代號，可以使用連線名稱中斷，如：\\server\share。

相關

DriveMapAdd, DriveMapGet

範例

; 映射裝置 X 到 \\myserver\stuff 給目前的使用者
DriveMapAdd("X:", "\\myserver\stuff")

; 中斷連線
DriveMapDel("X:")


Function DriveMapGet

函數說明（Function Reference）

DriveMapGet

接收映射硬碟的詳細資料。

DriveMapGet ( "裝置" )

參數

裝置 查詢的裝置代號 (裝置或指標)，例如："O:" 或 "LPT1:"。

返回值

成功： | 返回映射裝置內容，如：\\server\share。
失敗： | 返回空白字串 "" 並設定 @error 為 1。

附註

無。

相關

DriveMapAdd, DriveMapDel

範例

; 映射裝置 X 到 \\myserver\stuff 給目前的使用者
DriveMapAdd("X:", "\\myserver\stuff")

; 取得裝置內容
MsgBox(0, "裝置 X: 已映射至", DriveMapGet("X:"))


Function DriveSetLabel

函數說明（Function Reference）

DriveSetLabel

設定指定硬碟機的標籤。

DriveSetLabel ( "路徑", "標籤" )

參數

路徑 | 變更的裝置路徑。
標籤 | 裝置的新標籤名稱 (通常上限為 11 字元)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

大部份的硬碟都有 11 字元長度上限，若長度超過範圍會造成 DriveSetLabel 失敗，同樣的 FAT32 分割區標籤也最好全部都大寫字母。

相關

DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveGetType, DriveSpaceFree, DriveSpaceTotal, DriveStatus

範例

DriveSetLabel("C:\", "新標籤_代號：")


Function DriveSpaceFree

函數說明（Function Reference）

DriveSpaceFree

以MB（兆位元組）為單位返回指定路徑所在分區的剩餘空間。

DriveSpaceFree ( "路徑" )

參數

路徑 取得訊息的裝置路徑。

返回值

成功： | 以帶浮點 MB 單位返回硬碟剩餘空間。
失敗： | 返回 0 並設定 @error 為 1。

附註

DriveSpaceFree 甚至還可以取得完整目錄 (若存在) 的可用空間，然而若為一個檔案路徑是無效的。
若覺得返回的數值精確度過高，可使用 Round 函數取整數。

相關

DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveGetType, DriveSetLabel, DriveSpaceTotal, DriveStatus

範例

$var = DriveSpaceFree( "c:\" )
MsgBox(4096, "C 碟剩餘可用空間：", $var & " MB")


Function DriveSpaceTotal

函數說明（Function Reference）

DriveSpaceTotal

以MB（兆位元組）為單位返回指定路徑所在分區的總計空間。

DriveSpaceTotal ( "路徑" )

參數

路徑 取得訊息的裝置路徑。

返回值

成功： | 以帶浮點 MB 單位返回硬碟大小。
失敗： | 設定 @error 為 1。

附註

DriveSpaceTotal 甚至還可以取得完整目錄 (若存在) 的可用空間，然而若為一個檔案路徑是無效的。

相關

DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveGetType, DriveSetLabel, DriveSpaceFree, DriveStatus

範例

$var = DriveSpaceTotal( "c:\" )
MsgBox(4096, "C 碟統計大小：", $var & " MB")


Function DriveStatus

函數說明（Function Reference）

DriveStatus

以字串的形式返回指定硬碟機的狀態。

DriveStatus ( "路徑" )

參數

路徑 取得訊息的裝置路徑。

返回值

數值 | 解釋說明
UNKNOWN | (不明) ==> 裝置可能未格式化 (RAW)。
READY | (就緒) ==> 通常為硬碟且內含卸除式媒體的裝置。
NOTREADY | (未就緒) ==> 通常為軟碟機和不含卸除式媒體的光碟機。
INVALID | (無效裝置) ==> 可能指定了不存在的代號或映射的網路裝置拒絕存取。

附註

清單所列返回值可能與實際情況不同。
DriveStatus 甚至還可以取得完整目錄 (若存在) 的狀態，然而若為一個檔案路徑是無效的。

相關

DriveGetDrive, DriveGetFileSystem, DriveGetLabel, DriveGetSerial, DriveGetType, DriveSetLabel, DriveSpaceFree, DriveSpaceTotal

範例

$var = DriveStatus( "c:\" )
MsgBox(4096,"狀態：",$var)


Function FileChangeDir

函數說明（Function Reference）

FileChangeDir

變更當前的工作目錄。

FileChangeDir ( "路徑" )

參數

路徑 建立目前工作目錄的路徑。

返回值

成功： | 返回值 1。
失敗： | 若工作目錄未變更返回 0。

附註

無。

相關

@WorkingDir

範例

FileChangeDir(@WindowsDir)


Function FileClose

函數說明（Function Reference）

FileClose

關閉之前已開啟的文字檔案。

FileClose ( 檔案控制碼 )

參數

檔案控制碼 檔案的控制碼，由前一個 FileOpen 呼叫返回取得。

返回值

成功： | 返回值 1。
失敗： | 若控制碼無效返回 0。

附註

在完成結束時，AutoIt 會自動關閉任何它開啟的檔案，不過呼叫 FileClose 仍然是較建議的方式。

此函數還可以用於關閉搜尋控制碼，同樣由 FileFindFirstFile() 返回。

相關

FileFindFirstFile, FileOpen

範例

$handle = FileOpen("test.txt", 0)

FileClose($handle)


Function FileCopy

函數說明（Function Reference）

FileCopy

複製一個或多個檔案。

FileCopy ( "來源檔案", "目地" [, 旗標] )

參數

來源檔案 | 複製的來源檔路徑，支援萬用字元 (Wildcards)。
目地 | 複製數個檔案的目標路徑。
旗標 | [選擇性參數] 此旗標決定當目標已存在時如何覆寫檔案的動作，依下列的模式組合： 0 = 不移除存在的檔案 (預設) 1 = 覆寫已存在的檔案 8 = 若不存在則自行建立目地資料夾結構 (請見附註) 9 = 請見附註說明

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

目地資料夾必須為存在的目錄，除非使用旗標值 '8' 則外。
可替代使用旗標 '9' (1 + 8) 來覆寫目標檔案，事先檢查資料夾結構且在該目標不存在時自動建立。

請檢視：FileFindFirstFile 關於萬用字元的討論。

某些目錄的屬性設定會使得覆寫失敗。

相關

FileMove, FileDelete, DirCopy

範例

FileCopy("C:\*.au3", "D:\我的資料夾\*.*")

; 複製資料夾模式 (內含其下檔案內容)
DirCreate("C:\新資料")
FileCopy("C:\舊資料\*.*", "C:\新資料\")

FileCopy("C:\暫存\*.txt", "C:\暫存\plain文字檔\", 8)
; 「右方路徑」 - '純文字檔' 現在為目標資料夾，檔案名稱由來源名稱的提供取得。

FileCopy("C:\暫存\*.txt", "C:\暫存\plain文字檔\", 9) ; 旗標 = 1 + 8 (覆寫 + 建立目地資料夾結構)
; 從來源複製 '純文字檔' 並以相同名稱覆寫目標檔案


Function FileCreateNTFSLink

函數說明（Function Reference）

FileCreateNTFSLink

建立一個 NTFS 硬碟連結到檔案或某個目錄。

FileCreateNTFSLink ( "來源檔案", "超連結" [, 旗標] )

參數

來源檔案 | 建立超連結的來源路徑。
超連結 | 超連結路徑。
旗標 | [選擇性參數] 此旗標決定當目標已存在時如何覆寫檔案的動作，依下列的模式組合： 0 = 不移除存在的檔案 (預設) 1 = 覆寫已存在的檔案

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

目地資料夾必須為存在的目錄。

此函數只能在 NTFS 檔案系統下執行。

若來源是檔案，超連結的大小也必須相同。
若來源是目錄，大小允許不同。

FileDelete 或 FileMove 指令都可用於超連結。

要使用 explorer 管理超連結，您可以使用 NTFSLink 軟體建立右鍵資源。
補註：NTFS ─ 維基百科介紹

相關

FileCreateShortcut

範例

FileChangeDir(@ScriptDir)

DirCreate('目錄')
FileWriteLine("目錄\測試.txt","測試")
FileWriteLine("目錄\測試記錄.log","測試記錄")
MsgBox(0,"超連結", FileCreateNTFSLink("目錄\測試記錄.log", "測試.txt",1))


Function FileCreateShortcut

函數說明（Function Reference）

FileCreateShortcut

建立指定檔案的捷徑（.lnk檔案）。

FileCreateShortcut ( "檔案", "捷徑" [, "工作目錄" [, "引數" [, "說明" [, "圖示" [, "快速鍵" [, 圖示編號 [, 狀態]]]]]]] )

參數

檔案 | 完整路徑和要建立捷徑的檔案名稱。
捷徑 | 完整路徑和捷徑名稱。
工作目錄 | [選擇性參數] 工作的目錄。
引數 | [選擇性參數] 額外的檔案參數。
說明 | [選擇性參數] 檔案說明。
圖示 | [選擇性參數] 完整路徑/要使用的圖示檔名稱。
快速鍵 | [選擇性參數] 快速鍵 - 與 Send() 指令格式相同。
圖示編號 | [選擇性參數] 實際用到的圖示 (通常為 0)。
狀態 | [選擇性參數] 捷徑執行時的狀態，可以使用 @SW_SHOWNORMAL, @SW_SHOWMINNOACTIVE 或 @SW_SHOWMAXIMIZED 這幾種。

返回值

成功： | 返回值 1。
失敗： | 若捷徑未建立返回 0。

附註

Windows 捷徑的快速鍵有下列幾種格式：Ctrl+Alt+X, Ctrl+Shift+X, Shift+Alt+X, Ctrl+NumPadKey, 或 Alt+NumPadKey，
其中 X 代表字母、數字、標點符號、或功能鍵。若您指定無效的格式，Windows 通常會預設為 Ctrl+Alt。
請注意 Windows 會將數字鍵區的按鍵與一般數字和標點符號做區隔，FileCreateShortcut 允許您建立 Ctrl+X 和 Alt+X 快速鍵 (通常 Windows 只接受 X 為數字區按鍵)；
然而，您還是可能有需要將這些組合避開，以避免和一般應用程式的快速鍵衝突。
Windows 禁止使用 ESC, ENTER, TAB, SPACEBAR, PRINT SCREEN, SHIFT, 或 BACKSPACE 幾種做為快速鍵使用。

FileCreateShortcut 不要求需要一個有效的目地、工作目錄、圖示、或快速鍵以 "成功" 建立捷徑 (LNK) 檔。
不過捷徑檔 (LNK) 請務必是有效的！若您選擇的快速鍵已有程式使用，那麼新增加的快速鍵會有較高的優先權。
同樣的，若您建立的捷徑跟存在的捷徑路徑/名稱一樣，那麼將會以新的版本覆寫取代。

相關

FileGetShortcut

範例

; 以 ctrl+alt+t 快速鍵設定一個捷徑
FileCreateShortcut(@WindowsDir & "\Explorer.exe",@DesktopDir & "\捷徑測試.lnk",@WindowsDir,"/e,c:\", "這是 Explorer 連結 :-)", @SystemDir & "\shell32.dll", "^!t", "15", @SW_MINIMIZE)


Function FileDelete

函數說明（Function Reference）

FileDelete

移除一個或多個檔案。

FileDelete ( "路徑" )

參數

路徑 移除檔案的路徑，可使用萬用字元 (Wildcards )。

返回值

成功： | 返回值 1。
失敗： | 若檔案已移除或不存在返回 0。

附註

請注意：若 FileDelete 傳送的 "路徑" 是資料夾，位於該目錄的檔案將會被全部移除，如同您使用 *.* 一樣。
請檢視：FileFindFirstFile 關於萬用字元的說明討論。

某些目錄的屬性設定會使得覆寫失敗。

相關

FileCopy, FileMove, FileRecycle, DirRemove

範例

FileDelete("D:\*.tmp")


Function FileExists

函數說明（Function Reference）

FileExists

檢查指定檔案或目錄是否存在。

FileExists ( "路徑" )

參數

路徑 檢查的目錄或檔案。

返回值

成功： | 返回值 1。
失敗： | 若路徑/檔案不存在返回 0。

附註

若您指定內部沒放磁片的軟碟機，FileExists 將返回 0。

相關

FileGetAttrib, DriveStatus

範例

If FileExists("C:\autoexec.bat") Then
MsgBox(4096, "C:\autoexec.bat 檔案", "存在。")
Else
MsgBox(4096,"C:\autoexec.bat 檔案", "不存在。")
EndIf

If FileExists("C:\") Then
MsgBox(4096, "C:\目錄", "存在。")
Else
MsgBox(4096,"C:\目錄" , "不存在。")
EndIf

If FileExists("D:") Then
MsgBox(4096, "D:裝置", "存在")
Else
MsgBox(4096,"D:裝置", "不存在。")
EndIf


Function FileFindFirstFile

函數說明（Function Reference）

FileFindFirstFile

返回一個以檔案關鍵字搜尋的 "控制碼"。

FileFindFirstFile ( "檔案名稱" )

參數

檔案名稱 檔案搜尋字串 (* 和 ? 允許萬用字元)

返回值

成功： | 返回搜尋 "控制碼"，供用於隨後的 FileFindNextFile 函數。
失敗： | 若錯誤發生返回 -1，如資料夾是空白的設定 @error 為 1。

附註

搜尋的字串是不區分大小寫的。
萬用字元：通常上，* 表示 0 或其它大部份字元，? 則表示 0 或某個字元。如您的檔案搜尋字串內僅內含萬用字元 (或是 "*.*")，那麼請參見下方的範例有關返回值的部份！

您可以在檔案名稱內只使用一個萬用字元或於副檔名標示一部份，如： a*.b?。
?? 它被看做為 * (這是 Microsoft 說明文件內沒有說明的)。
當使用一個 3-字元 任意副檔名進行搜尋的時候，開頭的 3 個字母如："*.log" 也會完全符合 "test.log_1" (Microsoft 的說明文件內也沒有說明)。
當您使用 FileFind... 函數完成搜尋後，必須呼叫 FileClose() 來釋放搜尋控制碼。

若有使用萬用字元的話，目錄名稱會依該值返回。

相關

FileClose, FileFindNextFile

範例

; 顯示目前資料夾內的所有檔案名稱
$search = FileFindFirstFile("*.*")

; 若搜尋成功進行檢查
If $search = -1 Then
MsgBox(0, "錯誤", "沒有找到符合的檔案/資料夾。")
Exit
EndIf

While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop

MsgBox(4096, "檔案：", $file)
WEnd

; 關閉搜尋控制碼
FileClose($search)


Function FileFindNextFile

函數說明（Function Reference）

FileFindNextFile

搜尋指定字串並返回 (下一個) 與之符合的檔案名稱，但要求在呼叫過 FileFindFirstFile 函數之後。

FileFindNextFile ( 搜尋 )

參數

搜尋 搜尋控制碼，由 FileFindFirstFile 返回取得。

返回值

成功： | 依前一個 FileFindFirstFile 呼叫返回檔案名稱。
失敗： | 若檔案/資料夾未搜尋到符合項目，設定 @error 為 1。

附註

請在前一個 FileFindFirstFile 函數呼叫完成後，才進行建立搜尋並取得搜尋控制碼。此後每次呼叫 FileFindNextFile 函數，都會返回下一個與 FileFindFirstFile 函數提供的搜尋字串符合的檔案名稱。當 @error = 1 時，則是沒有找到其餘與原始字串符合的檔案。

當您使用 FileFind... 函數完成搜尋後，必須呼叫 FileClose() 來釋放搜尋控制碼。

相關

FileClose, FileFindFirstFile

範例

; 顯示目前資料夾內的所有檔案名稱
$search = FileFindFirstFile("*.*")

; 若搜尋成功進行檢查
If $search = -1 Then
MsgBox(0, "錯誤", "沒有找到符合的檔案/資料夾。")
Exit
EndIf

While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop

MsgBox(4096, "檔案：", $file)
WEnd

; 關閉搜尋控制碼
FileClose($search)


Function FileGetAttrib

函數說明（Function Reference）

FileGetAttrib

返回指定檔案的屬性代碼。

FileGetAttrib ( "檔案名稱" )

參數

檔案名稱 檢查的檔案名稱 (或目錄)。

返回值

成功： | 返回標示檔案屬性的代碼字串。
失敗： | 返回 "" (空白字串) 並設定 @error 為 1。

附註

返回字串會包括這些組合代號 "RASHNDOCT"：
"R" = READONLY(唯讀)
"A" = ARCHIVE (儲存)
"S" = SYSTEM (系統)
"H" = HIDDEN (隱藏)
"N" = NORMAL (一般)
"D" = DIRECTORY (目錄)
"O" = OFFLINE (離線檔案)
"C" = COMPRESSED (NTFS 壓縮，不是 ZIP 格式) >> 壓縮
"T" = TEMPORARY (暫存檔)

相關

FileGetTime, FileSetAttrib

範例

$attrib = FileGetAttrib("c:\boot.ini")
If @error Then
MsgBox(4096,"錯誤", "無法取得資料屬性。")
Exit
Else
If StringInStr($attrib, "R") Then
MsgBox(4096,"", "檔案為唯讀。")
EndIf
EndIf

; 以純文字格式顯示完整檔案資訊
; 群組係依賴每個相等大寫字母為依據
; 這個是清楚運用函數的字串範例...
$input = StringSplit("R,A,S,H,N,D,O,C,T",",")
$output = StringSplit("唯讀 /, 儲存 /, 系統 /, 隱藏 /" & _
", 一般 /, 目錄 /, 離線檔案 /, 已壓縮 /, 暫存檔 /", ",")
For $i = 1 to 9
$attrib = StringReplace($attrib, $input[$i], $output[$i], 0, 1)
; StringReplace 最後的參數代表區分大小寫
Next
$attrib = StringTrimRight($attrib, 2) ;移除反斜線符號
MsgBox(0,"完整檔案屬性：", $attrib)


Function FileGetLongName

函數說明（Function Reference）

FileGetLongName

返回指定路徑的長檔名 (路徑+名稱)。

FileGetLongName ( "檔案" [, 旗標] )

參數

檔案 | 檔案路徑和轉換的檔案名稱。
旗標 | [選擇性參數] 某個檔案是否可以擁有相對目錄，如："..\file.txt"。

返回值

成功： | 返回長檔名名稱 (路徑+名稱為檔案名稱)。
失敗： | 返回參數並設定 @error 為 1。

附註

無。

相關

FileGetShortName

範例

$a = FileGetLongName(@HomeDrive & "\PROGRA~1\")
msgbox(0,"長檔名", $a)
;$a 可能為 "x:\Program Files"


Function FileGetShortcut

函數說明（Function Reference）

FileGetShortcut

取得指定捷徑的詳細內容。

FileGetShortcut ( "捷徑" )

參數

捷徑 完整路徑和捷徑檔案名稱。

返回值

成功： | 返回內含捷徑資訊的群組 (Array)，請見附註。
失敗： | 若捷徑不能存取設定 @error 為 1。

附註

從此函數返回的是內含下列元件的單一範圍群組：
$array[0] = 捷徑目標路徑
$array[1] = 工作目錄
$array[2] = 引數
$array[3] = 說明
$array[4] = 圖示檔名稱
$array[5] = 圖示索引
$array[6] = 捷徑狀態 (@SW_SHOWNORMAL, @SW_SHOWMINNOACTIVE, @SW_SHOWMAXIMIZED)

相關

FileCreateShortcut

範例

; 以 ctrl+alt+t 快速鍵設定一個捷徑
FileCreateShortcut(@WindowsDir & "\Explorer.exe",@DesktopDir & "\捷徑測試.lnk",@WindowsDir,"/e,c:\", "這是 Explorer 連結 :-)", @SystemDir & "\shell32.dll", "^!t", "15", @SW_MINIMIZE)

; 讀取捷徑路徑
$details = FileGetShortcut(@DesktopDir & "\捷徑測試.lnk")
MsgBox(0, "路徑：", $details[0])


Function FileGetShortName

函數說明（Function Reference）

FileGetShortName

返回指定路徑的短檔名 (按8.3命名稱規則，即檔案前綴8個字元，後綴3個字元)。

FileGetShortName ( "檔案" [, 旗標] )

參數

檔案 | 完整路徑和轉換的檔案名稱。
旗標 | [選擇性參數] 某個檔案是否可以擁有相對目錄，如："..\file.txt"

返回值

成功： | 返回 8.3 縮寫路徑+名稱。
失敗： | 返回參數並設定 @error 為 1。

附註

檔案必須存在，因為該函數沒有辦法確認該目標是否存在 ~假設數個檔案開頭都一樣有 8 個字元。

相關

FileGetLongName

範例

$a = FileGetShortName(@HomeDrive & "\PROGRA~1\")
msgbox(0,"短檔名", $a)
;$a 可能為 "x:\PROGRA~1"


Function FileGetSize

函數說明（Function Reference）

FileGetSize

以位元組為單位返回指定檔案的大小。

FileGetSize ( "檔案名稱" )

參數

檔案名稱 檢查的檔案名稱。

返回值

成功： | 以位元組返回檔案大小。
失敗： | 返回 0 並設定 @error 為 1。

附註

不能在資料夾上執行。
返回結果除以 1024 即為 KB，或除以 1048576 取得 MB。

相關

FileGetAttrib, FileGetTime, DriveSpaceTotal

範例

$size = FileGetSize("AutoIt.exe")


Function FileGetTime

函數說明（Function Reference）

FileGetTime

返回指定檔案的時間戳記 (時間和日期) 訊息。

FileGetTime ( "檔案名稱" [, 選項 [, 格式]] )

參數

檔案名稱 | 檢查的檔案名稱。
選項 | [選擇性參數] 指定時間戳記的旗標： 0 = 修改時間 (預設) 1 = 建立時間 2 = 存取時間
格式 | [選擇性參數] 指定返回類型： 0 = 返回群組 (預設) 1 = 返回字串 YYYYMMDDHHMMSS (年月日時分秒)

返回值

成功： | 返回內含檔案時間資訊的字串或群組，請見附註。
失敗： | 返回 0 並設定 @error 為 1。

附註

此單一範圍群組內含六組類別：
$array[0] = 年 (四組阿拉伯數字)
$array[1] = 月 (範圍 01 - 12)
$array[2] = 日 (範圍 01 - 31)
$array[3] = 時 (範圍 00 - 23)
$array[4] = 分 (範圍 00 - 59)
$array[5] = 秒 (範圍 00 - 59)
請注意返回會直接將數值補 0 。

相關

FileGetSize, FileGetAttrib, FileGetVersion, FileSetTime

範例

$t = FileGetTime(@Windowsdir & "\Notepad.exe", 1)

If Not @error Then
$yyyymd = $t[0] & "/" & $t[1] & "/" & $t[2]
MsgBox(0, "建立 notepad.exe 的日期資料", $yyyymd)
EndIf


Function FileGetVersion

函數說明（Function Reference）

FileGetVersion

返回指定 "檔案" (通常是指可執行檔案) 的版本訊息。

FileGetVersion ( "檔案名稱" [,"字串名稱"] )

參數

檔案名稱 | 檢查的檔案名稱。
字串名稱 | [選擇性參數] 嘗試從檔案標題版本訊息取得的範圍名稱。

返回值

成功： | 返回內含版本資訊的字串，如："3.0.81.0"。
失敗： | 若沒有版本訊息 (或其它錯誤) 返回 "0.0.0.0"，或僅得到字串名稱時則為 "" 並設定 @error 為 1。

附註

基本上字串可以為一個名稱如：
Comments, InternalName, ProductName, CompanyName, LegalCopyright, ProductVersion,
FileDescription, LegalTrademarks, PrivateBuild, FileVersion, OriginalFilename, SpecialBuild 等。

也可以是為已編譯腳本而設定的一個特別字串 "CompiledScript"。
FileGetVersion(@AutoItExe, "CompiledScript") 會返回為 "AutoIt v3 Script : 3, 2, 1, 2"。

其它特別的字串名稱 "DefaultLangCodepage"，則可用於取得預設的語系和編碼表。

若有微幅調整 "字串名稱" 的需要，例如："080904b0\Comments" 您可以使用語系編碼表 (請檢視 VerQueryValue 函數內的 MSDN StringFileInfo 說明)。

相關

FileGetSize, FileGetTime

範例

$ver = FileGetVersion("Explorer.exe")
MsgBox(0, "Explorer 版本", $ver)


Function FileInstall

函數說明（Function Reference）

FileInstall

包裝並載入指定檔案到編譯後的腳本程式中。

FileInstall ( "來源檔案", "目地" [, 旗標] )

參數

來源檔案 | 要編譯的來源檔案路徑。這個必須為字母，不能是變數 ，但可以是相對的路徑 (使用 .\ 或 ..\ 在路徑中)。
目地 | 假如只是使用的目錄，則為結尾帶著反斜線的目標檔案路徑，可以是一個變數。
旗標 | [選擇性參數] 此旗標決定當目標已存在時如何覆寫檔案的動作： 0 = 不覆寫已存在的檔案 (預設) 1 = 覆寫存在的檔案

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

FileInstall 該函式本身就是設計來將檔案封包進編譯的 AutoIt 腳本。這些被封包的檔案，若陳述式正執行可以在期間將它們從編譯執行檔中 "解壓縮" 出來。請記住某些檔案如圖片，會大大地增加編譯後腳本的體積。
來源的檔案必須為一個字串且 不能 是一個變數，否則編譯器將不能解壓縮包進的檔案名稱，此外來源不能含有萬用字元。

當此函數被未編譯腳本使用時，取而代之的是複製的動作 (這樣比較方便做預先編譯測試)。
封裝完成後檔案將保持原本的建立/修改時間等時間戳記訊息。

相關

#Include

範例

; 將找到的"C:\測試.bmp" 點陣圖以編譯程式進行封包，並在執行時放在 "D:\我的目錄\測試.bmp" 中
$b = True
If $b = True Then FileInstall("C:\測試.bmp", "D:\我的目錄\測試.bmp")


Function FileMove

函數說明（Function Reference）

FileMove

移動一個或多個檔案。

FileMove ( "來源檔案", "目地" [, 旗標] )

參數

來源檔案 | 目標目錄及要移動的檔案名稱 (支援 * 萬用字元)。
目地 | 目標目錄及已移動的檔案名稱 (支援 * 萬用字元)。
旗標 | [選擇性參數] 此旗標決定當目標已存在時如何覆寫檔案的動作，可以依下表所列來組合： 0 = 不覆寫存在檔案(預設) 1 = 覆寫存在檔案 8 = 若該目標不存在建立資料夾結構 (請見附註) 9 = 請見附註說明

返回值

成功： | 返回值 1。
失敗： | 若 來源檔案 無法移動返回 0，或是 目地 已有存在的檔案則 "旗標=0"。

附註

若源檔案和目標檔案位於不同的標籤，則進行複致和移除動作而不移動。

因為 AutoIt 沒有 "FileRename" 函數，所以請使用 FileMove 返回檔案！

目地資料夾必須為存在的目錄，除非使用旗標值 '8' 則外。
可替代使用旗標 '9' (1 + 8) 來覆寫目標檔案，讓它事先檢查資料夾結構、並在目標不存在時自動建立。

某些目錄的屬性設定會使得覆寫失敗。

相關

FileCopy, FileDelete, FileRecycle, DirMove

範例

FileMove("C:\foo.au3", "D:\我的目錄\備份.au3")

; 第二個範例：
; 同時使用旗標 '1'(覆寫) 和 '8'(自動建立目標資料夾結搆)
; 從暫存資料夾移動所有 "純文字檔" 到 「純文字資料夾」並先行檢查
; 目標資料結構已存在，若不是則自行建立
FileMove(@TempDir & "\*.txt", @TempDir & "\plain文字資料夾\", 9)


Function FileOpen

函數說明（Function Reference）

FileOpen

開啟指定的文字檔案以供讀寫。

FileOpen ( "檔案名稱", 模式 )

參數

檔案名稱 | 要開啟的純文字檔案名稱。
模式 | (讀取或寫入) 開啟檔案的模式，可以依下表所列來組合： 0 = 讀取模式 1 = 寫入模式 (附加至檔案結尾) 2 = 寫入模式 (清除前一筆內容) 4 = 寫入 RAW 模式 8 = 若不存在建立目錄結構 (請見附註) 9 = 請見附註說明 16 = 強制用 FileRead 和 FileWriteForce 函數以二進位模式讀寫 32 = 使用 Unicode UTF16 小尾碼讀寫模式，讀取時不會覆寫存在的 BOM 簽章 64 = 使用 Unicode UTF16 大尾碼讀寫模式，讀取時不會覆寫存在的 BOM 簽章 128 =使用 UTF8 讀寫模式，讀取時不會覆寫存在的 BOM 簽章 兩種寫入模式會在目標不存在時自動建立檔案，該檔案路徑必須已存在 (除非使用模式 '8' - 請見附註)

返回值

成功： | 返回一個檔案 "控制碼"，供用於隨後的檔案函數。
失敗： | 若發生錯誤返回 -1。

附註

檔案只可以為讀取或寫入模式，不能兩者併用。
某些目錄的屬性設定會使得開啟失敗。
當在寫入模式下開啟檔案時，若不存在則建立一份。
當某個檔案工作完成後，請呼叫 FileClose 函數將檔案關閉，AutoIt 正常情形上會主動關閉所有檔案，不過使用 FileClose 呼叫仍然是較建議的方式。

在預設模式下，當寫入的文字是 ANSI 字串 - 請使用 Unicode 旗標來變更。在 Windows 預設模式寫入 Unicode 檔的時候 (而且在 AutoIt 中因為是背景轉換的關係，速度是最快的) ，系統會使用 UTF16 小尾碼模式 (模式32)。

當使用 模式=4 (RAW 讀取) 時，檔案名稱應該明確定義為："\\.\A:" 以進行軟碟機的磁區讀取，計算數值必須以數個磁區為單位 (512)。

── 不存在資料夾的結構：──
------------------------------------
預設值該檔案結構若不存在，檔案將自行建立。
要覆蓋這樣的動作，請同時使用 '1' 或 '2' 並搭配 "模式-旗標 8" 模式！
另一種取代的方式是模式-旗標 '9' (1 + 8)，來覆寫目標檔案，讓它先檢查資料夾結構並在目標不存在時自動建立，然後再開啟檔案供寫入額外資料。

相關

FileClose, FileReadLine, FileWriteLine, FileRead

範例

$file = FileOpen("測試.txt", 0)

; 檢查該檔案是否已開啟並準備好讀取
If $file = -1 Then
MsgBox(0, "錯誤", "無法開啟檔案。")
Exit
EndIf

FileClose($file)

; 另一個示範自動建立資料夾結構的範本
$file = FileOpen("測試.txt", 10) ; 模式 2 + 8 (清除 + 建立目錄)

If $file = -1 Then
MsgBox(0, "錯誤", "無法開啟檔案。")
Exit
EndIf

FileClose($file)


Function FileOpenDialog

函數說明（Function Reference）

FileOpenDialog

顯示一個檔案開啟對話框。

FileOpenDialog ( "標題", "啟始目錄", "自訂檔類型" [, 選項 [, "預設名稱" [, 主控制碼(hwnd)]]] )

參數

標題 | GUI 對話框的標題文字。
啟始目錄 | 在 GUI 檔案樹中選擇的開始資料夾。
自訂檔類型 | 篩選自訂的檔案類型像："全部(*.*)" 或 "純文字檔 (*.txt)" 或數個自訂的檔案群組像： "全部 (*.*)|純文字檔 (*.txt)" (請見附註)。
選項 | [選擇性參數] 對話框選項。可以使用一個以上的選項，同時加入需要的數值即可： 1 = 檔案需為存在 (若使用者輸入的是檔案名稱) 2 = 路徑需為存在 (若使用者輸入的是路徑，需以反斜線做結尾) 4 = 允許多重選擇 (MultiSelect) 8 = 提示建立新檔案 (若該檔不存在)
預設名稱 | [選擇性參數] 提供給使用者開啟的檔案名稱，預設是空白 ("")。
主控制碼(hwnd) | [選擇性參數] 做為對話框主體的視窗控制碼。

返回值

成功： | 返回選擇的檔案完整路徑，多重選擇的結果為 "資料夾|檔案1|檔案2|..."。
失敗： | 設定 @error 為 1。

附註

欲篩選檔案類型請用分號分隔如範例所示。
篩選數個檔案群組須以豎線 "|" 分隔。

若已提供預設的名稱，選項也必須設定。若沒有需要可用的選項，將選項設為 0 即可。

特殊的 Windows 資料夾 (如 "我的檔案") 有些可以設定為啟始目錄，請見：附錄 (Appendix) 說明。

@WorkingDir 在成功返回後會被修改。

相關

FileSaveDialog, FileSelectFolder, StringSplit

範例

$message = "按住 Ctrl 或 Shift 鍵選擇數個檔案"

$var = FileOpenDialog($message, @WindowsDir & "\", "圖片檔 (*.jpg;*.bmp)", 1 + 4 )

If @error Then
MsgBox(4096,"","沒已選擇檔案。")
Else
$var = StringReplace($var, "|", @CRLF)
MsgBox(4096,"","您選擇的是：" & $var)
EndIf

; 數個篩選檔案群組
$message = "按住 Ctrl 或 Shift 鍵選擇數個檔案"

$var = FileOpenDialog($message, @WindowsDir & "", "圖片檔 (*.jpg;*.bmp)|影像檔 (*.avi;*.mpg)", 1 + 4 )

If @error Then
MsgBox(4096,"","沒已選擇檔案。")
Else
$var = StringReplace($var, "|", @CRLF)
MsgBox(4096,"","您選擇的是：" & $var)
EndIf


Function FileRead

函數說明（Function Reference）

FileRead

從之前已開啟的文字檔案中讀取指定數量的字元。

FileRead ( 檔案控制碼或 "檔案名稱" [, 數量] )

參數

檔案控制碼 | 檔案的控制碼，由前一個 FileOpen 呼叫返回。您可以二選一，選擇使用 "檔案名稱" 字串做為第一個參數。
數量 | [選擇性參數] 要讀取的字元數量。預設會讀取整個檔案，若沒指定選項則為 RAW 讀取檔案模式。

返回值

成功： | 返回二進位/字串的讀取。
特殊： | 若已到達最後一個檔案設定 @error 為 -1。
失敗： | 若檔案沒有以讀取模式開啟或發生其它錯誤，設定 @error 為 1。
 | 若在 RAW 讀取模式中沒有設定檔案開啟的數量，設定 @error 為 2。

附註

若給的是檔案名稱而不是檔案控制碼 - 那麼將於函數呼叫期間開啟該檔案並關閉 - 對於大型文字檔案的分析，它會比使用檔案控制碼還要慢的多。
請注意：請不要將檔案控制碼和檔案名稱混合使用，換句話說：別用 FileOpen 函數開啟檔案後，然後在此函數內使用一個檔案名稱。平常可以是檔案控制碼也可以是檔案名稱，但別兩者都用！

若該檔以 Raw 模式=4 開啟，指定數量必需為數個磁區的大小 (512)。

ANSI 和 UTF16/UTF8 兩種文字格式都可以讀取 - AutoIt 會自行決定類型。

檔案可用二進位旗標指定 FileOpen 函數，以二進位(位元組) 讀取資料 - 此情況的大小為 "位元組" 而不是 "字元"。

相關

IniRead, FileClose, FileOpen, FileReadLine, FileWrite, FileWriteLine, String

範例

$file = FileOpen("測試.txt", 0)

; 檢查檔案是否已開啟並已準備好讀取
If $file = -1 Then
MsgBox(0, "錯誤", "無法開啟檔案。")
Exit
EndIf

; 一次讀取 1 個字元直到檔案結尾 EOF(End-Of-File) 為止
While 1
$chars = FileRead($file, 1)
If @error = -1 Then ExitLoop
MsgBox(0, "讀取到的字元：", $chars)
Wend

FileClose($file)


Function FileReadLine

函數說明（Function Reference）

FileReadLine

從之前已開啟的文字檔案中讀取指定行的字元。

FileReadLine ( 檔案控制碼或 "檔案名稱" [, 行數] )

參數

檔案控制碼 | 檔案的控制碼，由前一個 FileOpen 呼叫返回。您可以二選一，選擇使用 "檔案名稱" 字串做為第一個參數。
行數 | [選擇性參數] 要讀取的行數編號。文字檔第一行是行數 1 (不是 0)，最後一行是 -1。

返回值

成功： | 返回該文字行。
特殊： | 若到達檔案結尾設定 @error 為 -1。
失敗： | 若檔案沒有以讀取模式開啟或發生其它錯誤，設定 @error 為 1。

附註

返回該行讀取到的文字，任何讀取到的皆會於行尾以新行符號 ( CHR(10) 或 @LF ) 自動分行。
若沒有提供欲讀取的行，將讀取 "下一行" ("下一行" 對較近開啟的檔案而言是開始的第一行)。
若給的是檔案名稱而不是檔案控制碼 - 那麼將於函數呼叫期間開啟該檔案並關閉 - 對於大型文字檔案的分析，它比使用檔案控制碼還要慢的多。
請注意：請不要將檔案控制碼和檔案名稱混合使用，換句話說：別用 FileOpen 函數開啟檔案後，然後在此函數內使用一個檔案名稱。平常可以是檔案控制碼也可以是檔案名稱，但別兩者都用！

站在讀取效能的觀點來看，指定 "行數" 參數以讀取文字行的模式並不好，因為在使用一次後數值會不斷增加。這會強迫 AutoIt 自開頭重新讀取檔案，直到到達指定的行為止。

ANSI 和 UTF16/UTF8 兩種文字格式都可以讀取 - AutoIt 會自行決定類型。

每次返回的值最大為 65534 字元。

相關

IniRead, FileClose, FileOpen, FileRead, FileWrite, FileWriteLine

範例

$file = FileOpen("測試.txt", 0)

; 檢查檔案是否已開啟並已準備好讀取
If $file = -1 Then
MsgBox(0, "錯誤", "無法開啟檔案。")
Exit
EndIf

; 讀取文字行直到檔案結尾 EOF(End-Of-File) 為止
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
MsgBox(0, "讀取到的行：", $line)
Wend

FileClose($file)


Function FileRecycle

函數說明（Function Reference）

FileRecycle

把指定的檔案或目錄放入資源回收筒。

FileRecycle ( "來源檔案" )

參數

來源檔案 要丟到資源回收筒的來源檔案或資料夾路徑，支援萬用字元。

返回值

成功： | 返回值 1。
失敗： | 返回值 0 (通常也意味該檔使用中或不存在)。

附註

請檢視：FileFindFirstFile 萬用字元的討論說明。
要移除目錄，只須要給個結尾沒反斜線的路徑即可。

相關

FileDelete, FileRecycleEmpty

範例

FileRecycle("C:\*.tmp")


Function FileRecycleEmpty

函數說明（Function Reference）

FileRecycleEmpty

清理資源回收筒。

FileRecycleEmpty ( ["裝置"] )

參數

來源檔案 [選擇性參數] 要清理的硬碟代號 - 若為空白則清除所有硬碟。

返回值

成功： | 返回值 1。
失敗： | 返回值 0 (不能清理資源回收筒，請見下方)。

附註

此函數須有 IE4+ 的支援方能使用。

相關

FileDelete, FileRecycle

範例

FileRecycleEmpty("C:\")


Function FileSaveDialog

函數說明（Function Reference）

FileSaveDialog

顯示一個儲存檔案對話框。

FileSaveDialog ( "標題", "啟始目錄", "自訂檔類型" [, 選項 [, "預設名稱" [, 主控制碼(hwnd)]]] )

參數

標題 | GUI 對話框的標題文字。
啟始目錄 | 在 GUI 檔案樹中選擇的開始資料夾。
自訂檔類型 | 篩選自訂的檔案類型像："全部(*.*)" 或 "純文字檔 (*.txt)" 或數個自訂的檔案群組像： "全部 (*.*)|純文字檔 (*.txt)" (請見附註)。
選項 | [選擇性參數] 2 = 路徑需為存在 (若使用者輸入的是路徑，需以反斜線做結尾) 16 = 提示將覆寫檔案
預設名稱 | [選擇性參數] 提供給使用者儲存的檔案名稱，預設是空白 ("")。
主控制碼 | [選擇性參數] 做為對話框主體的視窗控制碼。

返回值

成功： | 返回選擇的檔案完整路徑，多重選擇的結果為 "資料夾|檔案1|檔案2|..."。
失敗： | 設定 @error 為 1。

附註

欲篩選檔案類型請用分號分隔如範例所示。
篩選數個檔案群組須以豎線 "|" 分隔。

若已提供預設的名稱，選項也必須設定。若沒有需要可用的選項，將選項設為 0 即可。

特殊的 Windows 資料夾 (如 "我的檔案") 有些可以設定為啟始目錄，請見：附錄 (Appendix) 說明。

@WorkingDir 在成功返回後會被修改。

相關

FileOpenDialog, FileSelectFolder

範例

$MyDocsFolder = "::{450D8FBA-AD25-11D0-98A8-0800361B1103}"

$var = FileSaveDialog( "請選擇一個名稱。", $MyDocsFolder, "腳本檔 (*.aut;*.au3)", 2)
; 選項 2 = 對話框將保留有效路徑/檔案被選擇為止

If @error Then
MsgBox(4096,"","儲存已取消。")
Else
MsgBox(4096,"","您選擇的是：" & $var)
EndIf

; 數個篩選的檔案群組
$var = FileSaveDialog( "請選擇一個名稱。", $MyDocsFolder, "腳本檔 (*.aut;*.au3)|純文字檔 (*.ini;*.txt)", 2)
; 選項 2 = 對話框將保留有效路徑/檔案被選擇為止

If @error Then
MsgBox(4096,"","儲存已取消。")
Else
MsgBox(4096,"","您選擇的是：" & $var)
EndIf


Function FileSelectFolder

函數說明（Function Reference）

FileSelectFolder

顯示一個瀏覽資料夾對話框。

FileSelectFolder ( "對話框文字", "根目錄" [, 旗標 [, "啟始目錄" [, 主控制碼(hwnd)]]] )

參數

對話框文字 | 對話框的歡迎文字。
根目錄 | 在 GUI 檔案樹中的根目錄，使用 "" 表示以桌面為根目錄。
旗標 | [選擇性參數] 1 = 顯示建立資料夾按鈕 (需要 IE6.0 或以上) 2 = 使用新的對話框類別 (需要 IE5.0 或以上) 4 = 顯示編輯控制項 (用於輸入資料夾名稱)
啟始目錄 | [選擇性參數] 若選擇的已存在則 起始化/開始 資料夾，預設為空白 ("")。
主控制碼(hwnd) | [選擇性參數] 做為對話框主體的視窗控制碼。

返回值

成功： | 返回選擇的資料夾完整路徑。
失敗： | 若使用者取消/關閉視窗，返回 "" (空白字串) 並設定 @error 為 1。

附註

若啟始目錄(若提供)不存在則選擇根目錄。
一個不存在的根目錄同樣也會使它以桌面為根目錄。
"建立資料夾按鈕" 選項需要 Windows XP 內建 IE6 方能使用。
特殊的 Windows 資料夾 (如 "我的檔案") 可使用正確的 CLSID 設定為根目錄，詳細說明在：附錄 (Appendix)。
尚不支援 UNC 路徑，若您認為該使用者可能會從 UNC 路徑選擇檔案，那麼首先請將該路徑映射為硬碟。

相關

FileSaveDialog, FileOpenDialog, DriveMapAdd

範例

$var = FileSelectFolder("請選擇一個資料夾：", "")


Function FileSetAttrib

函數說明（Function Reference）

FileSetAttrib

設定一個或多個檔案的屬性。

FileSetAttrib ( "檔案", "修改屬性(+-RASHNOT)" [, 復原(遞歸)] )

參數

檔案 | 要修改的檔案，如：C:\*.au3, C:\Dir。
修改屬性(+-RASHNOT) | 要設定/清除的屬性，如："+A", "+RA-SH"。
復原(遞歸) | [選擇性參數] 若此項設定為 1，會自動復原目錄檔案設定，預設為 0 (不予復原)。

返回值

成功： | 返回值 1。
失敗： | 若遇到錯誤返回 0。

附註

檔案 內不能有空格！
該函數可以用 + 或 - 修改屬性：
"R" = READONLY (唯讀)
"A" = ARCHIVE (儲存)
"S" = SYSTEM (系統)
"H" = HIDDEN (隱藏)
"N" = NORMAL (一般)
"O" = OFFLINE (離線檔案)
"T" = TEMPORARY (暫存檔)

(請注意您不能用此函數設定 已壓縮檔/目錄 的屬性)

相關

FileGetAttrib, FileGetTime, FileSetTime

範例

;標示當前資料夾底下所有的 .au3 檔為系統、唯讀
If Not FileSetAttrib("*.au3", "+RS") Then
MsgBox(4096,"錯誤", "設定屬性發生錯誤。")
EndIf

;標示 C:\ 和其下子目錄所有的 .bmp 檔為可寫入、儲存
If Not FileSetAttrib("C:\*.bmp", "-R+A", 1) Then
MsgBox(4096,"錯誤", "設定屬性發生錯誤。")
EndIf


Function FileSetTime

函數說明（Function Reference）

FileSetTime

修改一個或多個檔案的時間戳記。

FileSetTime ( "檔案", "時間" [, 類型 [, 復原(遞歸)] ] )

參數

檔案 | 要修改的檔案，如：C:\*.au3, C:\Dir。
時間 | 新時間的設定格式為："YYYYMMDDHHMMSS" (年, 月, 日, 時 [24時制], 秒)。若時間為空白 "" 則使用目前時間。
類型 | [選擇性參數] 修改的時間戳記： 0 = 修改時間(預設), 1 = 建立時間, 2 = 存取時間
復原(遞歸) | [選擇性參數] 若此項設定為 1，會自動復原目錄檔案設定，預設為 0 (不予復原)。

返回值

成功： | 返回值
失敗： | 若修改時間發生錯誤返回 0。

附註

無。

相關

FileGetTime, FileGetAttrib, FileSetAttrib

範例

;修改「檔案.au3」的 "修改時間" 戳記為2003年11月1日和目前時間
$var = FileSetTime("檔案.au3", "20031101")


Function FileWrite

函數說明（Function Reference）

FileWrite

向之前已開啟的文字檔案結尾追加一行資料。

FileWrite ( 檔案控制碼或 "檔案名稱", "行數" )

參數

檔案控制碼 | 檔案的控制碼，由前一個 FileOpen 呼叫返回。您可以二選一，選擇使用 "檔案名稱" 字串做為第一個參數。
行數 | 要寫入文字檔的文字行，該行不能寫入 @CR 或 @LF 新增字元。

返回值

成功： | 返回值 1。
失敗： | 若該檔沒有以寫入模式開啟返回 0，檔案應為唯讀或檔案不能寫入。

附註

文字檔必須以寫入模式開啟，否則 FileWrite 指令將會失敗。

若給的是檔案名稱而不是檔案控制碼 - 那麼將於函數呼叫期間開啟該檔案並關閉 - 對於大型文字檔案的分析，它比使用檔案控制碼還要慢的多。不過，若檔案名稱不存在則會自行建立。

請注意：請不要將檔案控制碼和檔案名稱混合使用，換句話說：別用 FileOpen 函數開啟檔案後，然後在此函數內使用一個檔案名稱。平常可以是檔案控制碼也可以是檔案名稱，但別兩者都用！

當寫入文字檔時 AutoIt 會使用預設的 ANSI 進行寫入。要以 Unicode 模式寫入檔案，必須用 FileOpen() 函數和適當旗標來開啟。

若該行是一個二進位類型變數 (且非文字)，它將以位元組(byte)寫入檔案位元。二進位動作也可以強制以 Fileopen 及二進位旗標開啟需要的檔案。

相關

FileClose, FileOpen, FileRead, FileReadLine, FileWriteLine, Binary

範例

$file = FileOpen("測試.txt", 1)

; 檢查檔案是否已開啟並已準備好讀取
If $file = -1 Then
MsgBox(0, "錯誤", "無法開啟檔案。")
Exit
EndIf

FileWrite($file, "第一行")
FileWrite($file, "還是第一行" & @CRLF)
FileWrite($file, "第二行")

FileClose($file)


Function FileWriteLine

函數說明（Function Reference）

FileWriteLine

向之前已開啟的文字檔案結尾追加一行資料。

FileWriteLine ( 檔案控制碼或 "檔案名稱", "行數" )

參數

檔案控制碼 | 檔案的控制碼，由前一個 FileOpen 呼叫返回。您可以二選一，選擇使用 "檔案名稱" 字串做為第一個參數。
行數 | 寫入純文字檔的文字行。若該行「不是」以 @CR 或 @LF 做結尾，則自動加入 DOS 換行符號(linefeed)：@CRLF。

返回值

成功： | 返回值 1。
失敗： | 若該檔沒有以寫入模式開啟返回 0，檔案應為唯讀或檔案不能寫入。

附註

文字檔必須以寫入模式開啟或以 FileWriteLine 指令寫入，否則將會失敗。

若給的是檔案名稱而不是檔案控制碼 - 那麼將於函數呼叫期間開啟該檔案並關閉 - 對於大型文字檔案的分析，它比使用檔案控制碼還要慢的多。不過，若檔案名稱不存在則會自行建立。

請注意：請不要將檔案控制碼和檔案名稱混合使用，換句話說：別用 FileOpen 函數開啟檔案後，然後在此函數內使用一個檔案名稱。平常可以是檔案控制碼也可以是檔案名稱，但別兩者都用！

當寫入文字檔時 AutoIt 會使用預設的 ANSI 進行寫入。要以 Unicode 模式寫入檔案，必須用 FileOpen() 函數和適當旗標來開啟。

寫入的文字不能含有 Chr(0) 字元，否則將會被截短。FileWrite 二進位模式必須用於奇特字串，FileRead 可以重新讀取如 FileWrite 這類字串。

相關

FileClose, FileOpen, FileRead, FileReadLine, FileWrite

範例

$file = FileOpen("測試.txt", 1)

; 檢查檔案是否已開啟並已準備好讀取
If $file = -1 Then
MsgBox(0, "錯誤", "無法開啟檔案。")
Exit
EndIf

FileWriteLine($file, "第一行")
FileWriteLine($file, "還是第一行" & @CRLF)
FileWriteLine($file, "第二行")

FileClose($file)


Function IniDelete

函數說明（Function Reference）

IniDelete

從標準設定檔 (*.ini）中移除某個數值。

IniDelete ( "檔案名稱", "區段" [, "關鍵字"] )

參數

檔案名稱 | *.INI 檔的名稱。
區段 | *.INI 檔案中的區段名稱。
關鍵字 | [選擇性參數] 要從*.INI 檔案中移除的關鍵字。若沒提供關鍵字名稱，則整個段的內容將被清除。預設使用的關鍵字也可能會造成該段被刪除。

返回值

成功： | 返回值 1。
失敗： | 若*.INI 檔不存在或唯讀則返回 0。

附註

一個標準的 *.INI 檔看起來像這樣：
[SectionName]
Key=Value

相關

IniRead, IniWrite, IniReadSection, IniReadSectionNames, IniRenameSection, IniWriteSection

範例

IniDelete("C:\Temp\myfile.ini", "section2", "key")


Function IniRead

函數說明（Function Reference）

IniRead

從標準設定檔 (*.ini）中讀取某個數值。

IniRead ( "檔案名稱", "區段", "關鍵字", "預設值" )

參數

檔案名稱 | *.INI 檔的名稱。
區段 | *.INI 檔案中的區段名稱。
關鍵字 | *.INI 檔案中的關鍵字名稱。
預設值 | 若需要的關鍵字沒找到，則返回預設值。

返回值

成功： | 返回需要的關鍵字數值。
失敗： | 若需要的關鍵字沒找到，則返回 預設值。

附註

一個標準的 *.INI 檔看起來像這樣：
[SectionName]
Key=Value

相關

IniDelete, IniWrite, FileReadLine, IniReadSection, IniReadSectionNames, IniRenameSection, IniWriteSection

範例

$var = IniRead("C:\Temp\myfile.ini", "section2", "key", "未找到。")
MsgBox(4096, "結果：", $var)


Function IniReadSection

函數說明（Function Reference）

IniReadSection

從標準設定檔 (*.ini）中讀取某個位元中的所有關鍵字或值。

IniReadSection ( "檔案名稱", "區段" )

參數

檔案名稱 | *.INI 檔的名稱。
區段 | *.INI 檔案中的區段名稱。

返回值

成功： | 返回一個 2D 群組(Array)，其中 element[n][0] 是關鍵字，以及 element[n][1] 是數值。
失敗： | 若無法讀取區段則設定 @error=1 (該 INI 檔不存在或該區段可能不存在)。

附註

一個標準的 *.INI 檔看起來像這樣：
[SectionName]
Key=Value

返回的類別 (element) 數量將存在 $result[0][0] 內，如 @error 發生則不建立群組。
在帳號的一個區段內最多只能取得 32767 個字元，這是受 Win9x 相容性限制。.

相關

IniDelete, IniWrite, FileReadLine, IniRead, IniReadSectionNames, IniRenameSection, IniWriteSection

範例

$var = IniReadSection("C:\Temp\myfile.ini", "section2")
If @error Then
MsgBox(4096, "", "發生錯誤，可能 INI 檔不存在。")
Else
For $i = 1 To $var[0][0]
MsgBox(4096, "", "關鍵字：" & $var[$i][0] & @CRLF & "數值：" & $var[$i][1])
Next
EndIf


Function IniReadSectionNames

函數說明（Function Reference）

IniReadSectionNames

從標準設定檔 (*.ini）中讀取所有位元的訊息。

IniReadSectionNames ( "檔案名稱" )

參數

檔案名稱 *.INI 檔的名稱。

返回值

成功： | 返回*.INI 檔中含有所有區段名稱的一個群組。
失敗： | 失敗則設定 @error 值。

附註

一個標準的 *.INI 檔看起來像這樣：
[SectionName]
Key=Value

返回的類別 (element) 數量將存在 $result[0][0] 內，如 @error 發生則不建立群組。
在帳號的一個區段內最多只能取得 32767 個字元，這是受 Win9x 相容性限制。

相關

IniDelete, IniWrite, FileReadLine, IniRead, IniReadSection, IniRenameSection, IniWriteSection

範例

$var = IniReadSectionNames(@WindowsDir & "\win.ini")
If @error Then
MsgBox(4096, "", "發生錯誤，可能 INI 檔不存在。")
Else
For $i = 1 To $var[0]
MsgBox(4096, "", $var[$i])
Next
EndIf


Function IniRenameSection

函數說明（Function Reference）

IniRenameSection

從標準設定檔 (*.ini）中重新命名某個位元的訊息。

IniRenameSection ( "檔案名稱", "區段", "新區段" [, 旗標] )

參數

檔案名稱 | *.INI 檔的名稱。
區段 | *.INI 檔案中的區段名稱。
新區段 | 新區段名稱。
旗標 | 0 - 若 "新區段" 已存在則失敗 (預設)。 1 - 覆寫 "新區段"，此將清除 "新區段" 所有存在的關鍵字。

返回值

成功： | 非 0 值。
失敗： | 若區段無法被覆寫，則設為 0 並可能設定 @error (旗標 = 0 限定該值)。

附註

一個標準的 *.INI 檔看起來像這樣：
[SectionName]
Key=Value

相關

IniRead, IniDelete, IniWrite, FileReadLine, IniReadSection, IniReadSectionNames, IniWriteSection

範例

$res = IniRenameSection(@ScriptDir & "My.ini", "MySection", "MyNewSection")


Function IniWrite

函數說明（Function Reference）

IniWrite

向標準設定檔 (*.ini）中寫入某個數值。

IniWrite ( "檔案名稱", "區段", "關鍵字", "數值" )

參數

檔案名稱 | *.INI 檔的名稱。
區段 | *.INI 檔案中的區段名稱。
關鍵字 | *.INI 檔案中的關鍵字。
數值 | 要寫入/變更的數值。

返回值

成功： | 返回值 1。
失敗： | 若*.INI 檔為唯讀則返回 0。

附註

一個標準的 *.INI 檔看起來像這樣：
[SectionName]
Key=Value
若該檔案並不存在，則程式將自行建立；不過若為不存在目錄，則不會建立。關鍵字和/或區段將被新增到後面，而且完全不會以任何方式排序。
若寫入的變數已被引號括住，則該引號會被去除。要寫入該引號到數值內，您需以雙重引號括住它，例如：""這是一個測試"" 則將產生 "這是一個測試" 在檔案裡面。
括住空白鍵(空格)的前後引號都會被移除，要確保該空格不被移除，該字串就須用引號括住，例如：" 這是一個測試" 則將保留空格，不過上方所示的幾種情況，引號都會被移除。
此函數不能使用多行數值。

相關

IniDelete, IniRead, FileWriteLine, IniReadSection, IniReadSectionNames, IniWriteSection

範例

IniWrite("C:\Temp\myfile.ini", "section2", "key", "這是一個新數值。")


Function IniWriteSection

函數說明（Function Reference）

IniWriteSection

向標準設定檔 (*.ini）中寫入某個字元。

IniWriteSection ( "檔案名稱", "區段", "資料" [, 索引 ] )

參數

檔案名稱 | *.INI 檔的名稱。
區段 | *.INI 檔案中的區段名稱。
資料 | 要寫入的資料。該資料可以是字串也可以是群組，如該資料為一個字串，則 key=value 兩者都必須以 @LF 定位。如該資料為一個群組，則群組必須為 2D 向量且第二維為 2 個 element 元件類別。
索引 | 如該群組做為資料傳遞，會指定開啟來源的索引。在預設值情況下，它被設為 1 以讓 IniReadSection() 的返回值可以立即使用。對於手動建立的群組，此數值可能會依該群組建立的模式需要而有所不同，此參數在一個字串做為資料傳遞時會被忽略。

返回值

成功： | 返回值 1。
失敗： | 返回值 0，若資料格式不正確將設定 @error 為 1。

附註

一個標準的 *.INI 檔看起來像這樣：
[SectionName]
Key=Value
若該檔案並不存在，則程式將自行建立；不過若為不存在目錄，則不會建立。關鍵字和/或區段將被新增到後面，而且完全不會以任何方式排序。
若該區段在寫入時就已經存在，內容將被覆寫。

相關

IniDelete, IniRead, FileWriteLine, IniReadSection, IniReadSectionNames, IniWrite

範例

; 這是我們將寫入的 INI 檔，該檔將被建立在桌面上
$sIni = @DesktopDir & "\AutoIt-測試.ini"

; 示範將一個字串做為輸入建立一個新區段
$sData = "Key1=數值1" & @LF & "Key2=數值2" & @LF & "Key3=數值3"
IniWriteSection($sIni, "區段1", $sData)

; 示範將一個群組做為輸入建立一個新區段
$aData1 = IniReadSection($sIni, "區段1") ; 讀取我們剛剛上面寫入的字串
For $i = 1 To UBound($aData1) - 1
$aData1[$i][1] &= "-" & $i ; 修改某些資料
Next

IniWriteSection($sIni, "區段2", $aData1) ; 寫入一個新區段

; 示範手動建立一個新群組並做為輸入使用
Dim $aData2[3][2] = [ [ "FirstKey", "第一個數值" ], [ "SecondKey", "第二個數值" ], [ "ThirdKey", "第三個數值" ] ]
; 在我們於 element 類別 0 開始建立群組前，必須先告知 IniWriteSection() 從 element 0 開始寫入動作
IniWriteSection($sIni, "區段3", $aData2, 0)


Function Beep

函數說明（Function Reference）

Beep

播放嗶聲提醒使用者。

Beep ( [ 頻率 [, 間隔]] )

參數

頻率 | [選擇性參數] 以赫茲為單位的嗶音訊率，可以在 37 到 32,767 間設定 (0x25 到 0x7FFF)，預設是 500 Hz。
間隔 | [選擇性參數] 嗶聲的毫秒長度，預設 = 1000 ms。

返回值

成功一定都會返回 1。

附註

無。

相關

SoundPlay

範例

; 播放嗶聲提醒，頻率為 500 每秒

Beep(500, 1000)


Function AutoItSetOption

函數說明（Function Reference）

AutoItSetOption

調整各種 AutoIt 函數/參數的運作模式。

AutoItSetOption ( "選項" [, 參數] )

參數

選項 | 改變的選項，請見下面的附註。
參數 | [選擇性參數] 指定給選項的數值。類型及涵義會隨選項而有所不同，請見下方的附註說明。若沒提供參數則函數只會返回已指定給該選項的值，關鍵字：Default (預設值) 可用於參數來重設該選項為預設值。

返回值

返回該選項的前一次設定值。

附註

可用縮寫函數 Opt() 代替 AutoItSetOption()。

如果指定一個不明屬性則 AutoIt 將會暫停執行並顯示錯誤訊息。選項如下列所示：

選項 | 參數
CaretCoordMode | 設定用於 caret 函數的座標參照，可以是絕對位置也可以是當前指定視窗的相對座標(coord)： 0 = 指定視窗的相對座標 1 = 絕對螢幕座標 (預設) 2 = 指定視窗用戶區的相對座標
ExpandEnvStrings | 會依字母和 % 符號的解譯而有不同。預設會當成普通字串，此選項允許您用 %environment% 環境變數於字串內，如： "暫存資料夾為： %temp%"。 1 = 展開環境變數 (像是 AutoIt v2) 0 = 不展開環境變數 (預設) 不用選項亦可以用其它模式："暫存資料夾為：" & EnvGet("temp")
ExpandVarStrings | 會依字母和變數/巨集 ($ 和 @) 符號的解譯而有不同。預設會當成普通字串，此選項允許您用變數和巨集於字串內，如："變數數值為：$var1$"。 1 = 展開變數 (此模式下您須用一個字母 $ 或 @ 然後以雙位元表示："這是一個美元符號 $$"。 0 = 不展開變數 (預設)
FtpBinaryMode | 變更 FTP 檔傳送的模式。 1 = 二進位 (預設) 0 = ASCII
GUICloseOnESC | 當於 GUI 上按下 ESC 鍵則傳送 $GUI_EVENT_CLOSE 訊息。此選項可控制開啟和關閉。 1 = 當 ESC 按下則傳送 $GUI_EVENT_CLOSE 訊息 (預設) 0 = 當 ESC 按下不傳送 $GUI_EVENT_CLOSE 訊息
GUICoordMode | 改變由 GUICtrlSetPos 定義控制的座標位置。 1 = 保持相對於對話框的絕對座標 (預設) 0 = 最近開啟控制項的相對座標 (左上角) 2 = 相對於目前單元上的偏移定位。而在左方或頂端參數使用 -1，則不能增加起始位置。 因此下一行應該是 -1,offset(位移)；下一格 offset,-1；目前單元位置則是 -1,-1；
 | 由此看很顯然 "offset(位移)" 不能是 -1，因為它暗示不增加數值。 不過若您會使用多種寬度那麼就可以略過或不予理會。
GUIDataSeparatorChar | 設定 GUICtrlSetData 內要限制子項目的字元。 預設字元為：'|'。
GUIOnEventMode | 開啟/關閉 OnEvent 函數的通知功能。 0 = 關閉 (預設) 1 = 開啟
GUIResizeMode | 變更控制項的預設調整大小。 0 = 保持預設的控制大小 (預設) <1024 = 調整大小的所有類型請檢視：GUICtrlSetResizing。
GUIEventOptions | 變更特殊事件的動作或 GUI 函數返回值。 0 = 點選最小化、復原、最大化、調整大小時，以 Windows 預設的方式動作 (預設) 1 = 支援最小化、復原、最大化、調整大小等視窗動作為只傳送通知
MouseClickDelay | 修改點選滑鼠時的短暫延遲長度。 以毫秒至暫停的時間為單位 (預設=10)
MouseClickDownDelay | 修改按住按鍵到放開的延遲時間長度。 以毫秒至暫停的時間為單位 (預設=10)
MouseClickDragDelay | 修改滑鼠拖曳動作的開始和結束延遲。 以毫秒至暫停的時間為單位 (預設=250)
MouseCoordMode | 設定滑鼠函數使用的座標模式，可以是絕對位置也可以是相對目前活動視窗的座標位置： 0 = 指定視窗的相對座標 1 = 絕對螢幕座標 (預設) 2 = 指定視窗用戶區的相對座標
MustDeclareVars | 如果設定了此選項為 1，則所有變數在使用之前必須事先使用 Dim, Local 或 Global 聲明，這有助於減少因變數字母拼字錯誤而引起各種 bug 出現。 1 = 變數必須事先聲明 0 = 變數不需事先聲明 (預設)
OnExitFunc | 設定在 AutoIt 離開時將呼叫的函數(預設值為 OnAutoItExit)。
PixelCoordMode | 設定像素函數使用的座標模式，可以是絕對位置也可以是由 hwnd 定義的目前視窗座標相對位置(預設的活動視窗)： 0 = 指定視窗的相對座標 1 = 絕對螢幕座標 (預設) 2 = 指定視窗用戶區的相對座標
SendAttachMode | 指定在使用 Send() 函數時 AutoIt 是否捆綁(attach) 輸入執行緒。當不捆綁的時候 (預設模式 = 0)，在 NT4 系統下對 capslock/scrolllock 和 numlock 等按鍵狀態的偵測結果會是不準確的。不過，在設定捆綁模式 = 1的時候，Send("{... down/up}") 等語法將不能執行，在傳送按鍵的時候也可能會導致系統 "當機" 等問題。至於 ControlSend() 函數則 總是 捆綁執行緒的，而且不受此模式的影響。 0 = 不捆綁 (預設) 1 = 捆綁
SendCapslockMode | 指定是否讓 AutoIt 在執行 Send 函數前儲存大小寫切換鍵 (CapsLock) 的狀態，並在完成後恢復到原來的狀態。 0 = 不儲存/恢復 1 = 儲存並恢復 (預設)
SendKeyDelay | 修改傳送敲擊按鍵時的延遲時間。設定為 0 則會完全移除延遲。 以毫秒至暫停的時間為單位 (預設=5)
SendKeyDownDelay | 修改每次按住到放開按鍵時的延遲時間長度。對於一些需要花費一些時間登入敲擊按鍵的應用程式(以及許多遊戲)，您可能就要改變預設提高這數值。設定為 0 則會完全移除延遲。 以毫秒至暫停的時間為單位 (預設=5)
TCPTimeout | 設定 TCP 函數無訊息傳送時停止前的等待時間。 以毫秒到時間結束的時間為單位 (預設=100)
TrayAutoPause | 當點選常駐圖示時暫停腳本。 0 = 不暫停 1 = 暫停 (預設)。若沒有 DefaultMenu 將不會暫停。
TrayIconDebug | 若是開啟，則在常駐圖示上顯示當前腳本執行到的那一行提示訊息，以方便除錯。 0 = 無除錯訊息 (預設) 1 = 顯示除錯訊息
TrayIconHide | 隱藏 AutoIt 常駐圖示。注意：常駐圖示在初始化時會延遲約 ~ 750 毫秒才出現。 0 = 顯示常駐圖示 (預設) 1 = 隱藏常駐圖示
TrayMenuMode | 擴充腳本常駐圖示/選單的動作。此可以依下表所列 (新增) 數值等組合完成要求。 0 = 綑綁預設的選單項目(腳本暫停/結束) 到使用者建立的選單；已建立檢查過的元件將自動不予檢查，若您在常駐圖示上點按兩下，會返回具有 "Default"- 類型的控制項 ID (預設)。 1 = 無預設選單 2 = 當點選常駐圖示時，將不會自動檢查使用者建立的項目。 4 = 在常駐圖示上點按兩下後，不返回選單內容中具有 "Default"- 類型的 menuitemID。 8 = 關閉檢查單選項目群組
TrayOnEventMode | 開啟/關閉對提示的 OnEvent 函數通知功能。 0 = 關閉 (預設) 1 = 開啟
WinDetectHiddenText | 指定是否讓隱藏的視窗文字也能被視窗符合函數 "看見"。 0 = 不偵測隱藏文字 (預設) 1 = 偵測隱藏文字
WinSearchChildren | 允許視窗在執行常用的搜尋程式時，在搜尋頂層視窗的同時也搜尋次視窗。 0 = 僅搜尋頂層視窗 (預設) 1 = 搜尋頂層視窗及次視窗。
WinTextMatchMode | 修改執行搜尋動作時的視窗文字符合模式。 1 = 完全符合 -較慢模式 (預設) 2 = 快速模式 在快速符合模式下，AutoIt 將只能 "看見" 對話框文字、按鈕文字和某些控制項的標題，而在預設模式下則能偵測到更多的文字（例如記事本視窗的內容）。 如果在執行較多視窗的搜尋動作時遇到效能上的問題，那麼您就應該考慮使用 "快速" 模式或許有幫助。
WinTitleMatchMode | 修改執行搜尋動作時的視窗標題符合模式。 1 = 符合標題的前面部分 (預設) 2 = 符合標題的任意子字串 3 = 完全符合標題 4 = 進階模式，請檢視：視窗標題與文字 (進階篇) -1 至 -4 = 強制根據其它類型符合小寫 (force lower case match according to other type of match)
WinWaitDelay | 修改每次成功執行視窗相關動作後暫停的腳本延遲。 以毫秒至暫停的時間為單位 (預設=250)

相關

很多很多！

範例

;可直接複製所需陳述式到腳本中 ;最先列出的是各項屬性的預設值

Opt("CaretCoordMode", 1) ;1=絕對位置, 0=相對位置, 2=用戶區
Opt("ExpandEnvStrings", 0) ;0=不展開, 1=展開
Opt("ExpandVarStrings", 0) ;0=不展開, 1=展開
Opt("FtpBinaryMode", 1) ;1=二進位, 0=ASCII
Opt("GUICloseOnESC", 1) ;1=ESC 關閉視窗, 0=按下 ESC 不關閉視窗
Opt("GUICoordMode", 1) ;1=絕對位置, 0=相對位置, 2=單位
Opt("GUIDataSeparatorChar","|") ;預設為 "|"
Opt("GUIOnEventMode", 0) ;0=取消, 1=開啟 OnEvent 模式
Opt("GUIResizeMode", 0) ;0=不調整, <1024 特定調整值
Opt("GUIEventOptions",0) ;0=預設, 1=只通知, 2=GuiCtrlRead 籤頁索引
Opt("MouseClickDelay", 10) ;10 毫秒
Opt("MouseClickDownDelay", 10) ;10 毫秒
Opt("MouseClickDragDelay", 250) ;250 毫秒
Opt("MouseCoordMode", 1) ;1=絕對位置, 0=相對位置, 2=用戶區
Opt("MustDeclareVars", 0) ;0=無, 1=必須預先聲明
Opt("OnExitFunc","OnAutoItExit");"OnAutoItExit" 被呼叫
Opt("PixelCoordMode", 1) ;1=絕對位置, 0=相對位置, 2=用戶區
Opt("SendAttachMode", 0) ;0=不捆綁, 1=捆綁
Opt("SendCapslockMode", 1) ;1=儲存並恢復, 0=不儲存
Opt("SendKeyDelay", 5) ;5 毫秒
Opt("SendKeyDownDelay", 1) ;1 毫秒
Opt("TCPTimeout",100) ;100 毫秒
Opt("TrayAutoPause",1) ;0=不暫停 1=暫停
Opt("TrayIconDebug", 0) ;0=無訊息, 1=顯示除錯訊息
Opt("TrayIconHide", 0) ;0=顯示, 1=隱藏常駐圖示
Opt("TrayMenuMode",0) ;0=綑綁, 1=無預設選單, 2=不自動檢查, 4=menuitemID 不返回
Opt("TrayOnEventMode",0) ;0=關閉, 1=開啟
Opt("WinDetectHiddenText", 0) ;0=不偵測, 1=偵測
Opt("WinSearchChildren", 1) ;0=無, 1=搜尋次視窗
Opt("WinTextMatchMode", 1) ;1=完全符合, 2=快速模式
Opt("WinTitleMatchMode", 1) ;1=開頭, 2=子字串, 3=完全模式, 4=進階模式, -1 至 -4=小寫
Opt("WinWaitDelay", 250) ;250 毫秒


Function PixelChecksum

函數說明（Function Reference）

PixelChecksum

生成某區域像素的檢查和。

PixelChecksum ( 左方, 上方, 右方, 按鈕 [, 步過參數 [,主控制碼(hwnd)]] )

參數

左方 | 區域左方的座標。
上方 | 區域上方的座標。
右方 | 區域右方的座標。
按鈕 | 區域的按鈕座標。
步過參數 | [選擇性參數] 原先會對每個像素產生檢查值，您可替代使用一個大於 1 的數值來跳過像素檢查 (速度較佳)，例如：一個數值 2，它將每隔一個像素檢查，預設為 1。不建議使用大於 1 的步過參數值。
主控制碼(hwnd) | [選擇性參數] 要使用的視窗控制碼。

返回值

返回該區域的檢查值。

附註

一個檢查和僅能讓您知道 "某些地方" 是否在區域內做過變更，但它不會告訴您到底有哪些東西被改過。

先前的版本速度非常慢，不過目前此函數在速度上已有重大的進步。我們不大建議使用步過參數，因為此函數在歷經徹底的速度飛躍後，使用較大的步過參數獲得的效能增加幅度並不明顯。而且，在微小變更過的區域偵測上，較大的步過參數對檢查和結果也較不可靠。

相關

PixelGetColor, PixelCoordMode (Option), PixelSearch

範例

; 等待直到區域 0,0 到 50,50 有某些地方被修改過

; 取得初始檢查值
$checksum = PixelChecksum(0,0, 50,50)

; 等待區域內的變更，該區域會每隔 100ms 檢查以減輕 cpu 載入負擔
While $checksum = PixelChecksum(0,0, 50, 50)
Sleep(100)
WEnd

MsgBox(0, "", "區域內有某處已修改！")


Function PixelGetColor

函數說明（Function Reference）

PixelGetColor

返回指定座標位置上的像素點的顏色值。

PixelGetColor ( x , y [, 主控制碼(hwnd)] )

參數

x | 像素的 x 座標。
y | 像素的 y 座標。
主控制碼(hwnd) | [選擇性參數] 要使用的視窗控制碼。

返回值

成功： | 返回像素色彩的 十進位 值。
失敗： | 若座標無效則返回 -1。

附註

較早期的 AutoIt 版本 (v3.0.102 之前) 使用 BGR 模式來定義顏色 - 較新的版本則預設使用 RGB 模式，不過還是可以用 ColorMode 選項來切換使用的模式。

相關

ColorMode (Option), PixelSearch, PixelCoordMode (Option), MouseGetPos

範例

$var = PixelGetColor( 10 , 100 )
MsgBox(0,"十進位色彩為：", $var)
MsgBox(0,"十六進位色彩為：", Hex($var, 6))


Function PixelSearch

函數說明（Function Reference）

PixelSearch

在指定矩形區域中搜尋與指定顏色值符合的像素 (並返回第一個符合的像素的座標) 。

PixelSearch ( 左方, 上方, 右方, 按鈕, 色彩 [, 色差 [, 步過參數 [, 主控制碼(hwnd)]]] )

參數

左方 | 區域左方的座標。
上方 | 區域上方的座標。
右方 | 區域右方的座標。
按鈕 | 區域的按鈕座標。
色彩 | 要搜尋的像素色值 (十進位或十六進位)。
色差 | [選擇性參數] 一個介於 0 和 255 之間的數值，用以表示允許的紅、藍、綠的色差範圍值，預設為 0 (完全符合)。
步過參數 | [選擇性參數] 原先會對每個像素產生檢查值，您可替代使用一個大於 1 的數值來跳過像素檢查 (速度較佳)，例如：一個數值 2，它將每隔一個像素檢查，預設為 1。
主控制碼(hwnd) | [選擇性參數] 要使用的視窗控制碼。

返回值

成功： | 返回內含兩組類別的像素座標群組 (Array[0] = x, Array[1] = y)。
失敗： | 如色彩未找到則設定 @error 為 1。

附註

搜尋將從上到下，從左到右執行，並且返回第一個符合的項目。

較早期的 AutoIt 版本 (v3.0.102 之前) 使用 BGR 模式來定義顏色 - 較新的版本則預設使用 RGB 模式，不過還是可以用 ColorMode 選項來切換使用的模式。

請記住，通常顯示範圍為 1024 x 768 有 786432 像素，雖然 PixelSearch 已做過最佳化，但縮小搜尋範圍對速度更有立竿見影的效果。

相關

ColorMode (Option), PixelChecksum, PixelGetColor, PixelCoordMode (Option)

範例

; 在範圍 0,0-20,300 內搜尋純紅色像素
$coord = PixelSearch( 0, 0, 20, 300, 0xFF0000 )
If Not @error Then
MsgBox(0, "X 和 Y 為：", $coord[0] & "," & $coord[1])
EndIf

; 搜尋色差小於 10 的紅色像素或純紅色像素
$coord = PixelSearch( 0, 0, 20, 300, 0xFF0000, 10 )
If Not @error Then
MsgBox(0, "X 和 Y 為：", $coord[0] & "," & $coord[1])
EndIf


Function SoundPlay

函數說明（Function Reference）

SoundPlay

播放指定的音訊檔案。

SoundPlay ( "檔案名稱" [, 等待旗標] )

參數

檔案名稱 | 要播放的檔案名稱 (通常為一個 WAV 或 MP3 檔)。
等待旗標 | [選擇性參數] 此旗標決定腳本是否要等待直到工作完成才繼續： 1 = 等待直到音效結束 0 = 當音效播放時繼續執行腳本 (預設)

返回值

無 (不論完成與否都會返回 1)。

附註

結束腳本也會停止音效播放 (如正好在播放)。
您可以呼叫 SoundPlay("") 結束音效進行，但這有可能影響連同開啟的控制碼也被關閉。
如您有將腳本內播放的音效檔移除的需要，必須在一開始就呼叫 SoundPlay("") 才能順利將控制碼關閉。

相關

SoundSetWaveVolume

範例

SoundPlay(@WindowsDir & "\media\tada.wav",1)


Function SoundSetWaveVolume

函數說明（Function Reference）

SoundSetWaveVolume

調整系統 Wave 音量的百分比大小。

SoundSetWaveVolume ( 百分比 )

參數

百分比 百分比數值範圍 0 到 100 之間。

返回值

成功： | 返回值 1。
失敗： | 如百分比無效返回 0 並設定 @error 為 1。

附註

此函數控制的是 Wave 音量，而不是主音量。同樣的，即使設定百分比為零也不會是靜音狀態。

在 Windows Vista 系統上，是沒有系統 Wave (聲波)音量控制的，此函數只針對腳本修改 Wave 音量大小，而不會變更其它程式的 Wave 音量。

相關

SoundPlay

範例

SoundSetWaveVolume(50)


Function GUICreate

函數說明（Function Reference）

GUICreate

建立一個 GUI 視窗。

GUICreate ( "標題" [, 寬度 [, 高度 [, 左方 [, 上方 [, 類型(Style) [, 進階類型(exStyle) [, 主視窗]]]]]]] )

參數

標題 | 對話框視窗標題。
寬度 | [選擇性參數] 視窗寬度。
高度 | [選擇性參數] 視窗高度。
左方 | [選擇性參數] 對話框左方。預設值 (-1)，視窗在中間，若已設定則上方必須也做設定。
上方 | [選擇性參數] 對話框上方。預設值 (-1) 為中間。
類型(Style) | [選擇性參數] 設定視窗類型，請檢視：附註：GUI 控制項類型。
 | 預設類型數值 -1 已內含數個組合：$WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU 類型。
 | 某些類型始終內含：$WS_CLIPSIBLINGS, 和 $WS_SYSMENU，若 $WS_MAXIMIZEBOX 或 $WS_SIZEBOX 已設定則會建立進去。
進階類型(exStyle) | [選擇性參數] 設定進階的視窗類型，請檢視如下：進階類型清單 -1 為預設值。
主視窗 | [選擇性參數] 先前建立的另一個視窗控制碼 - 此新視窗將成為該視窗的次視窗。

返回值

成功： | 返回視窗控制碼。
失敗： | 若視窗無法建立返回 0 並設定 @error 為 1。

附註

預設的對話框是無法調整大小及最大化的，所以可以用 WS_SIZEBOX 或 WS_MAXIMIZEBOX 在類型參數中。
若僅設定了一個類型，則此類型將設定為只記住它預設的數種組合，也就是說：只設定了 WS_SIZEBOX 的話，它將不會設定 WS_MINIMIZEBOX, WS_CAPTION, WS_POPUP, WS_SYSMENU。所以最好的模式就是指定一個可調整大小的視窗，就是用 WS_OVERLAPPEDWINDOW。
當使用了 $WS_EX_MDICHILD 位置時，則與主視窗用戶區是相對的關係。再搭配 $WS_EX_LAYERED 的話，則在主視窗背景圖片上，則可能擁有一個透明的設定圖片。

要以預設的類型來組合其它類型請使用 BitOr($GUI_SS_DEFAULT_GUI, 新類型,...)：

進階類型清單
進階類型 | 結果
$WS_EX_ACCEPTFILES | 允許在建立的 GUI 視窗內編輯或輸入控制項即時拖放以取得檔案名稱變數。該控制項必須也具備由 GUICtrlSetState 設定的 $GUI_DROPACCEPTED 狀態。至於其它控制項的即時拖放資訊則可以利用 @GUI_DRAGID, @GUI_DRAGFILE, @GUIDROPID 取得。
$WS_EX_APPWINDOW | 當視窗可見時，強制將頂層視窗放至工作列。
$WS_EX_CLIENTEDGE | 設定某個視窗有一個凹陷邊框。
$WS_EX_CONTEXTHELP | 在視窗標題欄上包括一個問題圖示，不能與 WS_MAXIMIZEBOX 或 WS_MINIMIZEBOX 一起使用。
$WS_EX_DLGMODALFRAME | 建立一個有雙層邊框的視窗；您可以選擇在類型參數上，經指定 WS_CAPTION 建立一個標題欄來設定它。
$WS_EX_MDICHILD | 建立一個包括該類型主視窗的次視窗 (僅為模擬不是真的 MDI)。
$WS_EX_OVERLAPPEDWINDOW | WS_EX_CLIENTEDGE 和 WS_EX_WINDOWEDGE 類型的組合。
$WS_EX_STATICEDGE | 建立一個立體 3D 邊框類型的視窗，預備用於不允許使用者輸入的項目上。
$WS_EX_TOPMOST | 指定一個使用此類型建立的視窗，並置頂於所有視窗之上並保持此狀態不變，甚至是該視窗為非活動狀態亦無影響。
$WS_EX_TRANSPARENT | 視窗以透明顯示，因為下方從屬的零散視窗皆已被重繪。
$WS_EX_TOOLWINDOW | 建立一個工具視窗：也就是說，它是一個做為浮動工具列的視窗。工具列視窗的標題欄比普通標題欄要短，而且該視窗標題使用更小的字型。工具視窗在工作列上不會顯示出來，或是使用者按下快速鍵 Alt+Tab 後在彈出的對話框中也不會出現。若某個工具列視窗擁有一個右鍵選單，則它的圖示不會在標題欄上顯示，不過您可以按下快速鍵 ALT+空格 以彈出右鍵選單。
$WS_EX_WINDOWEDGE | 設定一個有凸出邊框的視窗。
$WS_EX_LAYERED | 建立一個分層視窗，請注意該類型不能使用於次視窗。

要使用上面列出的數值必須將其 #include <WindowsConstants.au3> 到您的腳本中。

請注意：從此函數返回的控制碼是一個真的視窗控制碼，這意味它可以像 WinGetHandle 的結果那樣使用返回值。

相關

GUISet..., GUICtrlCreate..., GUIGetMsg, GUIGetStyle, GUIDelete, WinGetHandle

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example1()
Example2()

; 範例 1
Func Example1()
Local $msg

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框
GUISetState(@SW_SHOW) ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
EndFunc ;==>Example1

; 範例 2
Func Example2()
Local $gui, $background, $pic, $basti_stay, $msg
Local $sFile = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Examples\GUI\logo4.gif"

$gui = GUICreate("Background", 400, 100)
; 背景圖片
$background = GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 0, 0, 400, 100)
GUISetState(@SW_SHOW)

; 透明 MDI 次視窗
$pic = GUICreate("", 169, 68, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
; 透明圖片
$basti_stay = GUICtrlCreatePic($sFile, 0, 0, 169, 68)
GUISetState(@SW_SHOW)

Do
$msg = GUIGetMsg()

Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example2


GUI 控制項建立函數清單

GUI 控制項建立函數清單 (GUI Control creation Function Reference)

下面列出的是 AutoIt 的所有 GUI 控制項建立函數，點選函數名稱即可檢視詳細說明：

函數 | 詳細說明
GUICtrlCreateAvi | 在GUI上建立一個 AVI 視訊控制項。
GUICtrlCreateButton | 在GUI上建立一個按鈕 (Button) 控制項。
GUICtrlCreateCheckbox | 在GUI上建立一個複選 (Checkbox) 控制項。
GUICtrlCreateCombo | 在GUI上建立一個選擇 (Combo) 控制項。
GUICtrlCreateContextMenu | 在指定控制項或GUI視窗上建立右鍵選單。
GUICtrlCreateDate | 在GUI上建立一個日期控制項。
GUICtrlCreateDummy | 在GUI上建立一個 Dummy 控制項。
GUICtrlCreateEdit | 在GUI上建立一個編輯 (Edit) 控制項。
GUICtrlCreateGraphic | 在GUI上建立一個圖片 (Graphic) 控制項。
GUICtrlCreateGroup | 在GUI上建立一個群組 (Group) 控制項。
GUICtrlCreateIcon | 在GUI上建立一個圖示 (Icon) 控制項。
GUICtrlCreateInput | 在GUI上建立一個輸入框 (Input) 控制項。
GUICtrlCreateLabel | 在GUI上建立一個 Label 控制項。
GUICtrlCreateList | 在GUI上建立一個清單 (List) 控制項。
GUICtrlCreateListView | 在GUI上建立一個 ListView 控制項。
GUICtrlCreateListViewItem | 在GUI上建立一個 ListView 控制項項目。
GUICtrlCreateMenu | 在GUI上建立一個選單控制項。
GUICtrlCreateMenuItem | 在GUI上建立一個選單項目控制項。
GUICtrlCreateMonthCal | 在GUI上建立一個月曆控制項。
GUICtrlCreateObj | 在GUI上建立一個 ActiveX 控制項。
GUICtrlCreatePic | 在GUI上建立一個圖片控制項。
GUICtrlCreateProgress | 在GUI上建立一個進度列控制項。
GUICtrlCreateRadio | 在GUI上建立一個單選 (Radio) 控制項。
GUICtrlCreateSlider | 在GUI上建立一個滑動軸 (Slider) 控制項。
GUICtrlCreateTab | 在GUI上建立一個標籤頁 (Tab) 控制項。
GUICtrlCreateTabItem | 在GUI上建立一個標籤控制項項目。
GUICtrlCreateTreeView | 在GUI上建立一個 TreeView 控制項。
GUICtrlCreateTreeViewItem | 在GUI上建立一個 TreeView 控制項項目。
GUICtrlCreateUpdown | 在GUI上建立一個 Updown (上下箭頭) 控制項。


Function GUICtrlCreateAvi

函數說明（Function Reference）

GUICtrlCreateAvi

在GUI上建立一個 AVI 視訊控制項。

GUICtrlCreateAvi ( 檔案名稱, 子檔案ID, 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

檔案名稱 | 視訊的檔案名稱，只支援 .AVI 檔案。
子檔案ID | 使用的子檔案 ID，若該檔僅含一個視訊則使用 -1。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$ACS_TRANSPARENT 永遠使用 $ACS_TRANSPARENT，除非指定了 $ACS_NONTRANSPARENT。
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要在建立控制項後立即播放該視訊請使用 $ACS_AUTOPLAY 類型。
您可用 GUICtrlSetState 設定狀態為 1 或 0 開始播放或停止動畫，請見範例。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_AVI, 新類型,...)。

要使用上面列出的數值必須將其 #include <AVIConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKSIZE。

相關

GUICoordMode (option), GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $ani1, $buttonstart, $buttonstop, $msg

GUICreate("我的 GUI 視訊動畫", 350, 200)
$ani1 = GUICtrlCreateAvi(@SystemDir & "\shell32.dll", 165, 50, 10)

$buttonstart = GUICtrlCreateButton("開始", 50, 150, 70, 22)
$buttonstop = GUICtrlCreateButton("停止", 245, 150, 70, 22)

GUISetState()

; 執行 GUI 直到對話框被關閉
While 1
$msg = GUIGetMsg()

Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop

Case $msg = $buttonstart
GUICtrlSetState($ani1, 1)

Case $msg = $buttonstop
GUICtrlSetState($ani1, 0)

EndSelect
WEnd
EndFunc ;==>Example


Function GUICtrlCreateButton

函數說明（Function Reference）

GUICtrlCreateButton

在GUI上建立一個按鈕 (Button) 控制項。

GUICtrlCreateButton ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 按鈕控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：無 強制性類型：$WS_TABSTOP
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

一個按鈕控制項可以用 $BS_ICON 或 $BS_BITMAP 類型以顯示一個圖示或圖片。請使用 GUICtrlSetImage 函數指定使用的圖片。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_BUTTON, 新類型,...)。

要使用上面列出的數值必須將其 #include <ButtonConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKSIZE。

相關

GUICoordMode (Option), GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $Button_1, $Button_2, $msg
GUICreate("我的 GUI 按鈕") ; 將建立一個置中顯示的對話框

Opt("GUICoordMode", 2)
$Button_1 = GUICtrlCreateButton("開啟記事本", 10, 30, 100)
$Button_2 = GUICtrlCreateButton("按鈕測試", 0, -1)

GUISetState() ; 將顯示一個有 2 個按鈕的對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
Run('Notepad.exe') ; 將執行/開啟記事本
Case $msg = $Button_2
MsgBox(0, '測試', '請按下按鈕 2：') ; 將示範按鈕 2 按下的動作
EndSelect
WEnd
EndFunc ;==>Example


Function GUICtrlCreateCheckbox

函數說明（Function Reference）

GUICtrlCreateCheckbox

在GUI上建立一個複選 (Checkbox) 控制項。

GUICtrlCreateCheckbox ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | Checkbox 控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：$BS_AUTOCHECKBOX 強制性類型：若沒有設定複選框類型，則為 $WS_TABSTOP, 和 $BS_AUTOCHECKBOX
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

一個複選框控制項可以用 $BS_ICON 或 $BS_BITMAP 類型以顯示一個圖示或圖片。請使用 GUICtrlSetImage 函數指定使用的圖片。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_CHECKBOX, 新類型,...)。

要使用上面列出的數值必須將其 #include <ButtonConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKHEIGHT。

相關

GUICoordMode (Option), GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $checkCN, $msg
GUICreate("我的 GUI 複選框") ; 將建立一個置中顯示的對話框

$checkCN = GUICtrlCreateCheckbox("第一個複選框", 10, 10, 120, 20)

GUISetState() ; 將顯示有 1 個複選框的對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlCreateCombo

函數說明（Function Reference）

GUICtrlCreateCombo

在GUI上建立一個下拉式選單 (Combo) 控制項。

GUICtrlCreateCombo ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 將出現在下拉式選單控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL 強制性類型：$WS_TABSTOP
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

在 Windows XP/2003 系統下，Windows 會自行調整下拉式選單的大小。於其它的 Windows 版本下，若預設值無「夠大」的空間以容納最後一行，您可以指定 "高度" 參數的大小。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_COMBO, 新類型,...)。

要使用上面列出的數值必須將其 #include <ComboConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKHEIGHT。

相關

GUICoordMode (Option), GUICtrlSetData, GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg
GUICreate("我的 GUI 下拉式選單") ; 將建立一個置中顯示的對話框

GUICtrlCreateCombo("項目 1", 10, 10) ; 建立第一個項目
GUICtrlSetData(-1, "項目 2|項目 3", "項目 3") ; 新增其它項目並設定一個新預設值

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlCreateContextMenu

函數說明（Function Reference）

GUICtrlCreateContextMenu

在指定控制項或GUI視窗上建立右鍵選單。

GUICtrlCreateContextMenu ( [控制項ID] )

參數

控制項ID [選擇性參數] 由 GUICtrlCreate... 返回的控制項識別碼。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

以此函數建立了主要右鍵選單控制項之後，每個選單項目可以用 GUICtrlCreateMenuItem 建立。
子選單可以用 GUICtrlCreateMenu 建立。

若您未使用參數或是用此函數的 -1，則右鍵選單會連結到整個 GUI 視窗進行建立，而不是該單獨控制項。

每個控制項只能有一個右鍵選單，若您要建立一個新選單，則須先移除存在的選單才能進行下一個。

請注意：對於已經擁有 系統 右鍵選單的控制項，您就不能再行建立，也就是：編輯或輸入控制項。

相關

GUICtrlCreateMenuItem, GUICtrlCreateMenu, GUICtrlGetHandle, GUICtrlSetState, GUICtrlDelete

範例

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Opt('MustDeclareVars', 1)

Example1()
Example2()

; ****************
; * 第一個範例 *
; ****************
Func Example1()
Local $contextmenu, $button, $buttoncontext, $buttonitem, $msg
Local $newsubmenu, $textitem, $fileitem, $saveitem, $infoitem

;在視窗上點右鍵叫出選單
;在 "確認" 按鈕上點右鍵叫出內含特定選單的控制項

GUICreate("我的 GUI 右鍵選單", 300, 200)

$contextmenu = GUICtrlCreateContextMenu()

$button = GUICtrlCreateButton("確定", 100, 100, 70, 20)
$buttoncontext = GUICtrlCreateContextMenu($button)
$buttonitem = GUICtrlCreateMenuItem("關於按鈕", $buttoncontext)

$newsubmenu = GUICtrlCreateMenu("新增", $contextmenu)
$textitem = GUICtrlCreateMenuItem("文字", $newsubmenu)

$fileitem = GUICtrlCreateMenuItem("開啟", $contextmenu)
$saveitem = GUICtrlCreateMenuItem("儲存", $contextmenu)
GUICtrlCreateMenuItem("", $contextmenu) ; 分隔

$infoitem = GUICtrlCreateMenuItem("訊息內容", $contextmenu)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
EndFunc ;==>Example1

; *****************
; * 第二個範例 *
; *****************
Func Example2()
Local $hGui, $OptionsBtn, $OptionsDummy, $OptionsContext, $OptionsCommon, $OptionsFile, $msg
Local $OptionsExit, $HelpBtn, $HelpDummy, $HelpContext, $HelpWWW, $HelpAbout
$hGui = GUICreate("我的 GUI 視窗", 170, 40)

$OptionsBtn = GUICtrlCreateButton("選項(&O)", 10, 10, 70, 20, $BS_FLAT)

; 第一次為選項建立一個虛擬控制項和它的右鍵選單
$OptionsDummy = GUICtrlCreateDummy()
$OptionsContext = GUICtrlCreateContextMenu($OptionsDummy)
$OptionsCommon = GUICtrlCreateMenuItem("指令", $OptionsContext)
$OptionsFile = GUICtrlCreateMenuItem("檔案", $OptionsContext)
GUICtrlCreateMenuItem("", $OptionsContext)
$OptionsExit = GUICtrlCreateMenuItem("結束", $OptionsContext)

$HelpBtn = GUICtrlCreateButton("說明(&H)", 90, 10, 70, 20, $BS_FLAT)

; 也為說明建立一個虛擬控制項和它的右鍵選單
$HelpDummy = GUICtrlCreateDummy()
$HelpContext = GUICtrlCreateContextMenu($HelpDummy)
$HelpWWW = GUICtrlCreateMenuItem("網站", $HelpContext)
GUICtrlCreateMenuItem("", $HelpContext)
$HelpAbout = GUICtrlCreateMenuItem("關於...", $HelpContext)

GUISetState()

While 1
$msg = GUIGetMsg()

Switch $msg
Case $OptionsExit, $GUI_EVENT_CLOSE
ExitLoop

Case $OptionsBtn
ShowMenu($hGui, $msg, $OptionsContext)

Case $HelpBtn
ShowMenu($hGui, $msg, $HelpContext)

Case $HelpAbout
MsgBox(64, "關於...", "GUICtrlGetHandle-函數範例")
EndSwitch
WEnd
GUIDelete()
EndFunc ;==>Example2

; 顯示在已設定 GUI 視窗內的選單，該視窗屬於一個特定控制項
Func ShowMenu($hWnd, $CtrlID, $nContextID)
Local $arPos, $x, $y
Local $hMenu = GUICtrlGetHandle($nContextID)

$arPos = ControlGetPos($hWnd, "", $CtrlID)

$x = $arPos[0]
$y = $arPos[1] + $arPos[3]

ClientToScreen($hWnd, $x, $y)
TrackPopupMenu($hWnd, $hMenu, $x, $y)
EndFunc ;==>ShowMenu

; 轉換用戶區 (GUI) 座標位址到螢幕上 (桌面) 的座標軸
Func ClientToScreen($hWnd, ByRef $x, ByRef $y)
Local $stPoint = DllStructCreate("int;int")

DllStructSetData($stPoint, 1, $x)
DllStructSetData($stPoint, 2, $y)

DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($stPoint))

$x = DllStructGetData($stPoint, 1)
$y = DllStructGetData($stPoint, 2)
; 開放式結構沒有真的須要，因為它就是本機端了
$stPoint = 0
EndFunc ;==>ClientToScreen

; 顯示右鍵彈出選單所在的座標位置 (x, y)，該選單屬於一個特定 GUI 視窗 (hWnd)
Func TrackPopupMenu($hWnd, $hMenu, $x, $y)
DllCall("user32.dll", "int", "TrackPopupMenuEx", "hwnd", $hMenu, "int", 0, "int", $x, "int", $y, "hwnd", $hWnd, "ptr", 0)
EndFunc ;==>TrackPopupMenu


Function GUICtrlCreateDate

函數說明（Function Reference）

GUICtrlCreateDate

在GUI上建立一個日期控制項。

GUICtrlCreateDate ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

預設值 (-1)：WS_EX_CLIENTEDGE
文字 | 預先選擇的日期。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$DTS_LONGDATEFORMAT 強制性類型：$WS_TABSTOP
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_DATE, 新類型,...)。

要設定日期/時間的格式請見範例 3，了解如何搭配 $DTM_SETFORMAT 使用 GuiCtrlSendMsg 函數。

要使用上面列出的數值必須將其 #include <DateTimeConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKHEIGHT。

相關

GUICoordMode (Option), GUICtrlSetState, GUIGetMsg, GUICtrlRead

範例

#include <GUIConstantsEx.au3>
#include <DateTimeConstants.au3>

Opt('MustDeclareVars', 1)

Example1()
Example2()
Example3()

; 範例1
Func Example1()
Local $date, $msg

GUICreate("取得我的 GUI 日期", 200, 200, 800, 200)
$date = GUICtrlCreateDate("1953/04/25", 10, 10, 185, 20)
GUISetState()

; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE

MsgBox(0, "日期", GUICtrlRead($date))
GUIDelete()
EndFunc ;==>Example1

; 範例2
Func Example2()
Local $n, $msg

GUICreate("取得我的 GUI 時間")
$n = GUICtrlCreateDate("", 20, 20, 100, 20, $DTS_TIMEFORMAT)
GUISetState()

; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE

MsgBox(0, "時間", GUICtrlRead($n))
GUIDelete()
EndFunc ;==>Example2

; 範例3
Func Example3()
Local $date, $DTM_SETFORMAT_, $style

GUICreate("取得我的 GUI 日期", 200, 200, 800, 200)
$date = GUICtrlCreateDate("1953/04/25", 10, 10, 185, 20)

; 選擇指定一個預設格式
$DTM_SETFORMAT_ = 0x1032
$style = "yyyy/MM/dd HH:mm:s"
GUICtrlSendMsg($date, $DTM_SETFORMAT_, 0, $style)

GUISetState()
While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

MsgBox(0, "時間", GUICtrlRead($date))
EndFunc ;==>Example3


Function GUICtrlCreateDummy

函數說明（Function Reference）

GUICtrlCreateDummy

在GUI上建立一個 Dummy 控制項。

GUICtrlCreateDummy ( )

參數

無。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

此控制項可利用 GUICtrlSendToDummy 呼叫取得訊息。該控制項會如一般 "通知" 並以 GUISendToDummy 傳送數值讓 GUICtrlRead 可以讀取。

相關

GUICtrlSendToDummy, GUICtrlSetOnEvent, GUICtrlRead, GUICtrlSetData

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $user, $button, $cancel, $msg

GUICreate("GUICtrlCreateDummy", 250, 200, 100, 200)
GUISetBkColor(0x00E0FFFF) ; 將變更背景色

$user = GUICtrlCreateDummy()
$button = GUICtrlCreateButton("事件", 75, 170, 70, 20)
$cancel = GUICtrlCreateButton("取消", 150, 170, 70, 20)
GUISetState()

Do
$msg = GUIGetMsg()

Select
Case $msg = $button
GUICtrlSendToDummy($user)
Case $msg = $cancel
GUICtrlSendToDummy($user)
Case $msg = $user
; 關閉前特別動作
; ...
Exit
EndSelect
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Function GUICtrlCreateEdit

函數說明（Function Reference）

GUICtrlCreateEdit

在GUI上建立一個編輯 (Edit) 控制項。

GUICtrlCreateEdit ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：$ES_WANTRETURN, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL 強制性類型：$ES_MULTILINE, $WS_TABSTOP 僅當若不是 $ES_READONLY 則成立。
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_EDIT, 新類型,...)。

如您要即時拖曳檔案名稱到控制項上，只需要在 GUICreate() 上新增：WS_EX_ACCEPTFILES 進階類型，並設定狀態為 $GUI_DROPACCEPTED 即可。
當同時選擇數個檔案進行拖放，則它將分隔數行放於目標位置。

要使用上面列出的數值必須將其 #include <EditConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKAUTO，可修改大小及位置。

也可以建立一個更複雜的 RichEdit 控制項，它將會被視為基本控制項包含進去。
若您有需要 RichEdit 控制項的話，您必須使用 GuiCtrlCreateObj 函數，請見第二個範例。

相關

GUICoordMode (Option), GUICtrlSetData, GUICtrlSetState, GUIGetMsg, GUICtrlRead

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Global $oMyError

Example()
RichEditExample()

Func Example()
Local $myedit, $msg

GUICreate("我的 GUI 編輯") ; 將建立一個置中顯示的對話框

$myedit = GUICtrlCreateEdit("第一行" & @CRLF, 176, 32, 121, 97, $ES_AUTOVSCROLL + $WS_VSCROLL)

GUISetState()

Send("{END}")

; 將額外加入第三方助記的第三方參數
GUICtrlSetData($myedit, "第二行", 1)

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
EndFunc ;==>Example

; 使用 GUICtrlCreateObj 進行 Rich edit 控制的範本

; 作者： Kare Johansson
; AutoIt 版本： 3.1.1.55
; 說明： 一個用來示範 RICHTEXT 物件的小腳本
; 需求： 在 system32 中必需有 MSCOMCT2.OCX，不過您電腦上也可能已有
; 日期： 2005年 7月 3日
Func RichEditExample()
Local $oRP, $TagsPageC, $AboutC, $PrefsC, $StatC, $GUIActiveX, $msg

$oMyError = ObjEvent("AutoIt.錯誤", "MyErrFunc")

$oRP = ObjCreate("RICHTEXT.RichtextCtrl.1")

GUICreate("崁入RICHTEXT 控制項測試", 320, 200, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
$TagsPageC = GUICtrlCreateLabel('跟該籤頁建立連線', 5, 180, 100, 15, $SS_CENTER)
GUICtrlSetFont($TagsPageC, 9, 400, 4)
GUICtrlSetColor($TagsPageC, 0x0000ff)
GUICtrlSetCursor($TagsPageC, 0)
$AboutC = GUICtrlCreateButton('關於', 105, 177, 70, 20)
$PrefsC = GUICtrlCreateButton('字型大小', 175, 177, 70, 20)
$StatC = GUICtrlCreateButton('單純類型', 245, 177, 70, 20)

$GUIActiveX = GUICtrlCreateObj($oRP, 10, 10, 400, 260)
GUICtrlSetPos($GUIActiveX, 10, 10, 300, 160)

GUISetState();顯示視窗

While 1
$msg = GUIGetMsg()

Select
Case $msg = $GUI_EVENT_CLOSE
$oRP.SaveFile(@ScriptDir & "\RichText.rtf", 0)
ExitLoop
Case $msg = $TagsPageC
Run(@ComSpec & ' /c start http://www.myplugins.info/guids/typeinfo/typeinfo.php?clsid={3B7C8860-D78F-101B-B9B5-04021C009402}', '', @SW_HIDE)
Case $msg = $AboutC
$oRP.AboutBox()
Case $msg = $PrefsC
$oRP.SelFontSize = 12
Case $msg = $StatC
$oRP.SelBold = False
$oRP.SelItalic = False
$oRP.SelUnderline = False
$oRP.SelFontSize = 8
EndSelect
WEnd
GUIDelete()
EndFunc ;==>RichEditExample

Func MyErrFunc()

MsgBox(0, "AutoItCOM 測試", "我們中斷了一個 COM 錯誤！" & @CRLF & @CRLF & _
"err.description 為：" & @TAB & $oMyError.description & @CRLF & _
"err.windescription 為：" & @TAB & $oMyError.windescription & @CRLF & _
"err.number 為：" & @TAB & Hex($oMyError.number, 8) & @CRLF & _
"err.lastdllerror 為：" & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline 為：" & @TAB & $oMyError.scriptline & @CRLF & _
"err.source 為：" & @TAB & $oMyError.source & @CRLF & _
"err.helpfile 為：" & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext 為：" & @TAB & $oMyError.helpcontext _
, 5)
; 將於 5 秒鐘後自動繼續

Local $err = $oMyError.number
If $err = 0 Then $err = -1

SetError($err) ; 檢查之後此函數的返回值
EndFunc ;==>MyErrFunc


Function GUICtrlCreateGraphic

函數說明（Function Reference）

GUICtrlCreateGraphic

在GUI上建立一個圖片 (Graphic) 控制項。

GUICtrlCreateGraphic ( 左方, 上方 [, 寬度 [, 高度 [, 類型(style)]]] )

參數

左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：$SS_NOTIFY

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要於控制項內繪圖請檢視：GUICtrlSetGraphic。

邊框和背景色彩可用 GUICtrlSetBkColor 和 GUICtrlSetColor 設定。

圖片控制項是可以點選的，所以它們不應被其它控制項重疊。若因為需要必須這麼做的話，那麼將該圖片控制項關閉就是很重要的動作：GuiCtrlSetState(-1,$GUI_DISABLE)。

此控制項無法調整大小，這是因為圖片的相對位置在建立時就是固定的，不過它可以用 GUICtrlSetResizing() 函數設定常駐 (Dock) 大小。

相關

GUICtrlSetGraphic, GUICtrlSetBkColor, GUICtrlSetColor, GUICtrlDelete, GUICoordMode (Option), GUISetState, GUICtrlSetStyle, GUICtrlSetResizing, GUIGetMsg

範例

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Global $MAXGr = 6, $del
Global $a[$MAXGr + 1] ; 不使用 0 和 $MAXGr 記錄以允許 GUICtrlDelete 函數返回結果

Example()

Func Example()
Local $msg, $inc, $i

CreateChild()

$i = 1
$inc = 1
Do
$msg = GUIGetMsg()

If $msg = $del Then
GUICtrlDelete($a[$i])
$i = $i + $inc
If $i < 0 Or $i > $MAXGr Then Exit
EndIf
If $msg > 0 Then MsgBox(0, "已點選", $msg & @LF & $a[5], 2)
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example

Func CreateChild()
Local $child
$child = GUICreate("我的繪圖物件")
$del = GUICtrlCreateButton("刪除", 50, 165, 50)

$a[1] = GUICtrlCreateGraphic(20, 50, 100, 100)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetColor(-1, 0)

GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 50, 50, 40, 30, 270)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00ff00, 0xffffff)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 58, 50, 40, -60, 90)

GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 100, 100, 50, 80)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00ff00, 0xc0c0ff)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 350, 200, 50, 80)
GUICtrlCreateLabel("標籤", 65, 100, 30, 12)
GUICtrlSetColor(-1, 0xff)

$a[2] = GUICtrlCreateGraphic(220, 50, 100, 100)
GUICtrlSetStyle(-1, $SS_NOTIFY)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0, 0xff)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 50, 50, 40, 30, 270)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00ff00, 0xffffff)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 58, 50, 40, -60, 90)

$a[3] = GUICtrlCreateGraphic(220, 150, 100, 100, 0)
GUICtrlSetBkColor(-1, 0xf08080)
GUICtrlSetColor(-1, 0xff)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff00)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 50, 50, 80, 80)

$a[4] = GUICtrlCreateGraphic(20, 200, 80, 80)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 10, 10)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 30, 40)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff00)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 70, 70)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 10, 50)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xffff00)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 10, 10)

$a[5] = GUICtrlCreateGraphic(150, 10, 50, 50, 0)
GUICtrlSetBkColor(-1, 0xa0ffa0)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 20, 20) ; 起始點
; 最好繪製該行並於其後補點，避免每次重繪都要切換色彩
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x0000ff)
GUICtrlSetGraphic(-1, $GUI_GR_DOT, 30, 30)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 20, 40)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_DOT, 25, 25)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 40, 40)
GUICtrlSetGraphic(-1, $GUI_GR_DOT, 40, 40)

GUISetState()
EndFunc ;==>CreateChild


Function GUICtrlCreateGroup

函數說明（Function Reference）

GUICtrlCreateGroup

在GUI上建立一個群組 (Group) 控制項。

GUICtrlCreateGroup ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1) ：無 強制性類型：$WS_GROUP, $BS_GROUPBOX
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

一個群組控制項就是您所見該線所包括控制項的範圍 (通常為單選按鈕)；
它們為在一起的可見群組，一個群組內只能選擇一個單選按鈕。
如您不用可見的線而希望有數個群組的話，那您須使用 GUIStartGroup() 將您的單選按鈕群組化。

要使用上面列出的數值必須將其 #include <ButtonConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKAUTO，可修改大小及位置。

相關

GUICoordMode (Option), GUIStartGroup

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $radio_1, $radio_2, $msg

GUICreate("我的 GUI 群組") ; 將建立一個置中顯示的對話框

GUICtrlCreateGroup("群組 1", 190, 60, 120, 140)
$radio_1 = GUICtrlCreateRadio("單選項目 1", 210, 90, 80, 20)
$radio_2 = GUICtrlCreateRadio("單選項目 2", 210, 110, 90, 50)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;關閉群組

GUISetState() ; 將顯示空白對話框

; R執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlCreateIcon

函數說明（Function Reference）

GUICtrlCreateIcon

在GUI上建立一個圖示 (Icon) 控制項。

GUICtrlCreateIcon ( 檔案名稱, 圖示ID, 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

檔案名稱 | 要載入的圖示檔名稱。
圖示ID | 內含多個圖示的檔案名稱。如該圖示編號為負值則為照名稱排序，其它為 -1。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設是 32)。
高度 | [選擇性參數] 控制項高度 (預設是 32)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：$SS_NOTIFY 強制性類型：$WS_TABSTOP, $SS_ICON
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

於對話框顯示過後要更新圖示請使用：GUICtrlSetImage。

圖示ID 可以是相關圖示群組的編號，使用 [Resource Hacker] 軟體即可得知該值。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_ICON, 新類型,...)。

要使用上面列出的數值必須將其 #include <StaticConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKSIZE。

依 + 編號順序排列可參照到與圖示名稱相同的字串。
依 - 編號順序排列就會出現以 1 為基準值的 "索引" 動作，某些 DLL 檔含有可擷取的圖示，這類就正好就是負值編號。

相關

GUICoordMode (Option), GUICtrlSetImage, GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example1()
Example2()

;範例1 ---------------------------
Func Example1()
Local $icon, $n1, $n2, $msg

GUICreate(" 我的 GUI 圖示", 250, 250)

$icon = GUICtrlCreateIcon("shell32.dll", 10, 20, 20)
$n1 = GUICtrlCreateIcon(@WindowsDir & "\cursors\horse.ani", -1, 20, 40, 32, 32)
$n2 = GUICtrlCreateIcon("shell32.dll", 7, 20, 75, 32, 32)
GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
EndFunc ;==>Example1

;範例2 ---------------------------
Func Example2()
Local $iOldOpt, $n1, $n2, $a, $b
$iOldOpt = Opt("GUICoordMode", 1)

GUICreate("我的 GUI 圖示 - 龍馬賽跑", 350, 74, -1, -1)
GUICtrlCreateLabel("", 331, 0, 1, 74, 5)
$n1 = GUICtrlCreateIcon(@WindowsDir & "\cursors\dinosaur.ani", -1, 0, 0, 32, 32)
$n2 = GUICtrlCreateIcon(@WindowsDir & "\cursors\horse.ani", -1, 0, 40, 32, 32)

GUISetState(@SW_SHOW)

Dim $a = 0, $b = 0
While ($a < 300) And ($b < 300)
$a = $a + Int(Random(0, 1) + 0.5)
$b = $b + Int(Random(0, 1) + 0.5)
GUICtrlSetPos($n1, $a, 0)
GUICtrlSetPos($n2, $b, 40)
Sleep(20)
WEnd
Sleep(1000)
Opt("GUICoordMode", $iOldOpt)
EndFunc ;==>Example2


Function GUICtrlCreateInput

函數說明（Function Reference）

GUICtrlCreateInput

在GUI上建立一個輸入框 (Input) 控制項。

GUICtrlCreateInput ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：$ES_LEFT, $ES_AUTOHSCROLL 強制性類型：$WS_TABSTOP 只在無設定 $ES_READONLY 參數使用，$ES_MULTILINE 會一直被重設
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

若要定義一個可輸入密碼 (文字將被星號隱藏) 的輸入控制項，則用 $ES_PASSWORD 類型。

如您要即時拖曳檔案名稱到控制項上，只需要在 GUICreate() 上新增：WS_EX_ACCEPTFILES 進階類型，並設定狀態為 $GUI_DROPACCEPTED 即可。
在拖曳數個檔案到控制項後，您可用 GuiCtrlRead 以 "|" 分隔便可取得檔案名稱。

要使用上面列出的數值必須將其 #include <EditConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKHEIGHT。

相關

GUICoordMode (Option), GUICtrlSet..., GUIGetMsg, GUICtrlRead

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $file, $btn, $msg

GUICreate(" 我的 GUI 輸出確認檔案", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, 0x00000018); WS_EX_ACCEPTFILES
$file = GUICtrlCreateInput("", 10, 5, 300, 20)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlCreateInput("", 10, 35, 300, 20) ; 不允許直接拖曳檔案
$btn = GUICtrlCreateButton("確定", 40, 75, 60, 20)

GUISetState()

$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $btn
ExitLoop
EndSelect
WEnd

MsgBox(4096, "即時拖放檔案", GUICtrlRead($file))
EndFunc ;==>Example


Function GUICtrlCreateLabel

函數說明（Function Reference）

GUICtrlCreateLabel

在GUI上建立一個 Label 控制項。

GUICtrlCreateLabel ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。
 | 預設值 ( -1)：無。 強制性類型：$SS_NOTIFY, $SS_LEFT
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_LABEL, 新類型,...)。

要使用上面列出的數值必須將其 #include <StaticConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKAUTO，可修改大小及位置。

進階類型 $GUI_WS_EX_PARENTDRAG 可使用來允許無標題視窗 (GUICreate 無設定 $WS_CAPTION 類型) 拖放到主視窗的動作。

要為透明物件設定背景色，請使用 GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)。

相關

GUICoordMode (Option), GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $widthCell, $msg, $iOldOpt

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

GUISetHelp("notepad") ; 若按下 F1 將執行記事本
$iOldOpt = Opt("GUICoordMode", 2)

$widthCell = 90
GUICtrlCreateLabel("第 1 行 第 1 格", 10, 30, $widthCell) ; 第一格寬度 70
GUICtrlCreateLabel("第 2 行 第 1 格", -1, 0) ; 下一行
GUICtrlCreateLabel("第 3 行 第 2 格", 0, 0) ; 下一行及下一格
GUICtrlCreateLabel("第 3 行 第 3 格", 0, -1) ; 同一行下一格
GUICtrlCreateLabel("第 4 行 第 1 格", -3 * $widthCell, 0) ; 下一行的第一格

GUISetState() ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE

$iOldOpt = Opt("GUICoordMode", $iOldOpt)
EndFunc ;==>Example


Function GUICtrlCreateList

函數說明（Function Reference）

GUICtrlCreateList

在GUI上建立一個清單 (List) 控制項。

GUICtrlCreateList ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：$LBS_SORT, $WS_BORDER, $WS_VSCROLL 強制性類型：$WS_TABSTOP, $LBS_NOTIFY
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

清單項目可用 GUICtrlSetData 設定來選擇您要的。

要給水平捲軸設下限制請使用：GUICtrlSetLimit。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_LIST, 新類型,...)。

要使用上面列出的數值必須將其 #include <ListBoxConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKAUTO，可修改大小及位置。

相關

GUICoordMode (Option), GUICtrlSetData, GUICtrlSetLimit, GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $MESSAGE = "下列的按鈕已點選"
Local $add, $clear, $mylist, $close, $msg

GUICreate("我的 GUI 清單") ; 將建立一個置中顯示的對話框

$add = GUICtrlCreateButton("新增", 64, 32, 75, 25)
$clear = GUICtrlCreateButton("清除", 64, 72, 75, 25)
$mylist = GUICtrlCreateList("按鈕已點選", 176, 32, 121, 97)
GUICtrlSetLimit(-1, 200) ; 對水平捲軸設限制
GUICtrlSetData(-1, $MESSAGE)
$close = GUICtrlCreateButton("我的關閉按鈕", 64, 160, 175, 25)

GUISetState()

$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()

Select
Case $msg = $add
GUICtrlSetData($mylist, "您已點選第一個按鈕")
Case $msg = $clear
GUICtrlSetData($mylist, "")
Case $msg = $close
MsgBox(0, "", "關閉按鈕已點選。", 2)
Exit
EndSelect
WEnd
EndFunc ;==>Example


Function GUICtrlCreateListView

函數說明（Function Reference）

GUICtrlCreateListView

在GUI上建立一個 ListView 控制項。

GUICtrlCreateListView ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 欄位的設定標題，他們每一個都可以用 Opt("GUIDataSeparatorChar") 隔開。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$LVS_SHOWSELALWAYS, $LVS_SINGLESEL 強制性類型：$LVS_REPORT
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單 或 進階檢視清單類型。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要新增項目到 ListView 控制項請使用：GUICtrlCreateListViewItem。

ListView 預設會出現在 Explorer 檢視的 "詳細資料" 上面 (LVS_REPORT 是強制性類型)。
您可在攔位標題定義中填補空白以控制欄位的大小。
欄位也可以在根據項目大小建立 GUICtrlCreateListViewItem 時讓它自行擴充寬度。
欄位大小可達約 25 字元，而在用 GUICtrlSetData 更新資料時是不會自動調整大小的。

要建立一個帶 Icon-、SmallIcon- 或 List-style 的 ListView 控制項，只需在建立完成後使用：
GUICtrlSetStyle 的類型 $LVS_ICON, $LVS_LIST 或 $LVS_SMALLICON

直接點選清單照名稱排序 (Explorer 也是) 功能目前尚未實現。

要擁有可整行選擇的可見線條請使用：通用進階類型 的 LVS_EX_FULLROWSELECT。

要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_LISTVIEW, 新類型,...)。

要使用上面列出的數值必須將其 #include <ListViewConstants.au3> 到您的腳本中。

特殊旗標 $GUI_BKCOLOR_LV_ALTERNATE 可以與 Listview 控制項搭配將 ListviewItems 格線的背景調換。
不對稱線條可由 Listview 控制項的 GUICtrlSetBkColor 函數取得色彩設定。
平行線則可由 ListviewItem 控制項的 GUICtrlSetBkColor 函數取得色彩設定。

相關

GUICtrlCreateListViewItem, GUICtrlRegisterListViewSort, GUICoordMode (Option), GUICtrlSetData, GUIGetMsg, GUIDataSeparatorChar (Option)

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $listview, $button, $item1, $item2, $item3, $input1, $msg

GUICreate("檢視清單項目", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(0x00E0FFFF) ; 將變更背景色彩

$listview = GUICtrlCreateListView("欄位1 |欄位2|欄位3 ", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
$button = GUICtrlCreateButton("數值？", 75, 170, 70, 20)
$item1 = GUICtrlCreateListViewItem("項目2|欄位22|欄位23", $listview)
$item2 = GUICtrlCreateListViewItem("項目1|欄位12|欄位13", $listview)
$item3 = GUICtrlCreateListViewItem("項目3|欄位32|欄位33", $listview)
$input1 = GUICtrlCreateInput("", 20, 200, 150)
GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; 允許即時拖曳動作
GUISetState()
GUICtrlSetData($item2, "項目1")
GUICtrlSetData($item3, "||欄位33")
GUICtrlDelete($item1)

Do
$msg = GUIGetMsg()

Select
Case $msg = $button
MsgBox(0, "檢視清單項目", GUICtrlRead(GUICtrlRead($listview)), 2)
Case $msg = $listview
MsgBox(0, "檢視清單", "已點選=" & GUICtrlGetState($listview), 2)
EndSelect
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Function GUICtrlCreateListViewItem

函數說明（Function Reference）

GUICtrlCreateListViewItem

在GUI上建立一個 ListView 控制項項目。

GUICtrlCreateListViewItem ( "文字", ListViewID )

參數

文字 | 用 Opt("GUIDataSeparatorChar") 分隔的子項目文字。
listviewID | ListView 控制項的控制項ID (ControlID)

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

本函數用於建立可選擇的 ListView 單獨項目。該項目如同一般控制項可以用 GUICtrlSetData 設定。
此項目跟其它控制項一樣可以使用 GUICtrlDelete 刪除。
ListView 項目可被拖曳至設定 $GUI_DROPACCEPTED 狀態的編輯區或輸入控制項中。
請見：GUICtrlCreateListView 關於調整欄位大小部份。

特殊旗標 $GUI_BKCOLOR_LV_ALTERNATE 可以與 Listview 控制項搭配將 ListviewItems 格線的背景調換。
不對稱線條可由 Listview 控制項的 GUICtrlSetBkColor 函數取得色彩設定。
平行線則可由 ListviewItem 控制項的 GUICtrlSetBkColor 函數取得色彩設定。

相關

GUICtrlCreateListView, GUICtrlSetData, GUICtrlSetState, GUICtrlDelete, GUIGetMsg, GUICtrlRead, GUIDataSeparatorChar (Option)

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $listview, $button, $item1, $item2, $item3, $input1, $msg

GUICreate("檢視清單項目", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(0x00E0FFFF) ; 將變更背景色彩

$listview = GUICtrlCreateListView("欄位1 |欄位2|欄位3 ", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
$button = GUICtrlCreateButton("數值？", 75, 170, 70, 20)
$item1 = GUICtrlCreateListViewItem("項目2|欄位22|欄位23", $listview)
$item2 = GUICtrlCreateListViewItem("............項目1|欄位12|欄位13", $listview)
$item3 = GUICtrlCreateListViewItem("項目3|欄位32|欄位33", $listview)
$input1 = GUICtrlCreateInput("", 20, 200, 150)
GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; 允許即時拖曳動作
GUISetState()
GUICtrlSetData($item2, "|「項目1」")
GUICtrlSetData($item3, "||「欄位33」")
GUICtrlDelete($item1)

Do
$msg = GUIGetMsg()

Select
Case $msg = $button
MsgBox(0, "檢視清單項目", GUICtrlRead(GUICtrlRead($listview)), 2)
Case $msg = $listview
MsgBox(0, "檢視清單", "已點選=" & GUICtrlGetState($listview), 2)
EndSelect
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Function GUICtrlCreateMenu

函數說明（Function Reference）

GUICtrlCreateMenu

在GUI上建立一個選單控制項。

GUICtrlCreateMenu ( "子選單文字" [, 選單ID [, 選單物件(menuentry)]] )

參數

子選單文字 | 子選單的文字。
選單ID | [選擇性參數] 若設定則讓您可以在相關選單內建立一個子選單，如值等於 -1 則使用第一層選單。
選單物件(menuentry) | [選擇性參數] 讓您設定要建立的物件編號，編號從 0 開始。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

相關

GUICtrlSetState, GUIGetMsg, GUICtrlCreateMenuItem, GUICtrlGetHandle

範例

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $defaultstatus = "已就緒", $status, $filemenu, $fileitem
Local $helpmenu, $saveitem, $infoitem, $exititem, $recentfilesmenu
Local $separator1, $viewmenu, $viewstatusitem, $okbutton, $cancelbutton
Local $statuslabel, $msg, $file

GUICreate("我的 GUI 選單", 300, 200)

$filemenu = GUICtrlCreateMenu("檔案(&F)")
$fileitem = GUICtrlCreateMenuItem("開啟", $filemenu)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
$helpmenu = GUICtrlCreateMenu("?")
$saveitem = GUICtrlCreateMenuItem("儲存", $filemenu)
GUICtrlSetState(-1, $GUI_DISABLE)
$infoitem = GUICtrlCreateMenuItem("資訊", $helpmenu)
$exititem = GUICtrlCreateMenuItem("結束", $filemenu)
$recentfilesmenu = GUICtrlCreateMenu("最近存取過的檔案", $filemenu, 1)

$separator1 = GUICtrlCreateMenuItem("", $filemenu, 2) ; 建立分隔線

$viewmenu = GUICtrlCreateMenu("檢視", -1, 1) ; 建立於 "?" 選單前
$viewstatusitem = GUICtrlCreateMenuItem("狀態列", $viewmenu)
GUICtrlSetState(-1, $GUI_CHECKED)
$okbutton = GUICtrlCreateButton("確定", 50, 130, 70, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$cancelbutton = GUICtrlCreateButton("取消", 180, 130, 70, 20)

$statuslabel = GUICtrlCreateLabel($defaultstatus, 0, 165, 300, 16, BitOR($SS_SIMPLE, $SS_SUNKEN))

GUISetState()
While 1
$msg = GUIGetMsg()

If $msg = $fileitem Then
$file = FileOpenDialog("選擇檔案...", @TempDir, "全部檔案 (*.*)")
If @error <> 1 Then GUICtrlCreateMenuItem($file, $recentfilesmenu)
EndIf
If $msg = $viewstatusitem Then
If BitAND(GUICtrlRead($viewstatusitem), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState($viewstatusitem, $GUI_UNCHECKED)
GUICtrlSetState($statuslabel, $GUI_HIDE)
Else
GUICtrlSetState($viewstatusitem, $GUI_CHECKED)
GUICtrlSetState($statuslabel, $GUI_SHOW)
EndIf
EndIf
If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Or $msg = $exititem Then ExitLoop
If $msg = $infoitem Then MsgBox(0, "資訊", "只是一個測試...")
WEnd
GUIDelete()
EndFunc ;==>Example


Function GUICtrlCreateMenuItem

函數說明（Function Reference）

GUICtrlCreateMenuItem

在GUI上建立一個選單項目控制項。

GUICtrlCreateMenuItem ( "文字", 選單ID [, 選單物件(menuentry) [, 單選項目選單(menuradioitem)]] )

參數

文字 | 控制項文字。
選單ID | [選擇性參數] 若設定則讓您可以在相關選單內建立一個子選單，如值等於 -1 則使用第一層選單。
選單物件(menuentry) | [選擇性參數] 讓您設定要建立的物件編號，編號從 0 開始。
單選項目選單(menuradioitem) | [選擇性參數] 0 (預設) = 建立一般選單；1 = 建立一個單選項目的選單(menuradioitem)。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

若文字參數是 "" 則建立一個分隔線。GUICtrlSetState 可用於其它控制項，請見範例。

相關

GUICtrlSet..., GUIGetMsg, GUICtrlCreateMenu, GUICtrlCreateContextMenu

範例

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $defaultstatus = "已就緒", $status, $filemenu, $fileitem
Local $helpmenu, $saveitem, $infoitem, $exititem, $recentfilesmenu
Local $separator1, $viewmenu, $viewstatusitem, $okbutton, $cancelbutton
Local $statuslabel, $msg, $file

GUICreate("我的 GUI 選單", 300, 200)

$filemenu = GUICtrlCreateMenu("檔案(&F)")
$fileitem = GUICtrlCreateMenuItem("開啟", $filemenu)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
$helpmenu = GUICtrlCreateMenu("?")
$saveitem = GUICtrlCreateMenuItem("儲存", $filemenu)
GUICtrlSetState(-1, $GUI_DISABLE)
$infoitem = GUICtrlCreateMenuItem("資訊", $helpmenu)
$exititem = GUICtrlCreateMenuItem("結束", $filemenu)
$recentfilesmenu = GUICtrlCreateMenu("最近存取過的檔案", $filemenu, 1)

$separator1 = GUICtrlCreateMenuItem("", $filemenu, 2) ; 建立分隔線

$viewmenu = GUICtrlCreateMenu("檢視", -1, 1) ; 建立於 "?" 選單前
$viewstatusitem = GUICtrlCreateMenuItem("狀態列", $viewmenu)
GUICtrlSetState(-1, $GUI_CHECKED)
$okbutton = GUICtrlCreateButton("確定", 50, 130, 70, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$cancelbutton = GUICtrlCreateButton("取消", 180, 130, 70, 20)

$statuslabel = GUICtrlCreateLabel($defaultstatus, 0, 165, 300, 16, BitOR($SS_SIMPLE, $SS_SUNKEN))

GUISetState()
While 1
$msg = GUIGetMsg()

If $msg = $fileitem Then
$file = FileOpenDialog("選擇檔案...", @TempDir, "全部檔案 (*.*)")
If @error <> 1 Then GUICtrlCreateMenuItem($file, $recentfilesmenu)
EndIf
If $msg = $viewstatusitem Then
If BitAND(GUICtrlRead($viewstatusitem), $GUI_CHECKED) = $GUI_CHECKED Then
GUICtrlSetState($viewstatusitem, $GUI_UNCHECKED)
GUICtrlSetState($statuslabel, $GUI_HIDE)
Else
GUICtrlSetState($viewstatusitem, $GUI_CHECKED)
GUICtrlSetState($statuslabel, $GUI_SHOW)
EndIf
EndIf
If $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton Or $msg = $exititem Then ExitLoop
If $msg = $infoitem Then MsgBox(0, "資訊", "只是一個測試...")
WEnd
GUIDelete()
EndFunc ;==>Example


Function GUICtrlCreateMonthCal

函數說明（Function Reference）

GUICtrlCreateMonthCal

在GUI上建立一個月曆控制項。

GUICtrlCreateMonthCal ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 事先選擇的日期。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：無 強制性類型：$WS_TABSTOP
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。 default (-1) : WS_EX_CLIENTEDGE

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。

預設可重新調整大小的類型是 $GUI_DOCKSIZE。

相關

GUICoordMode (Option), GUIGetMsg, GUICtrlRead

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $Date, $msg
GUICreate("取得日期", 210, 190)

$Date = GUICtrlCreateMonthCal("1953/03/25", 10, 10)
GUISetState()

; 執行視窗直到被關閉或逾時

Do
$msg = GUIGetMsg()
If $msg = $Date Then MsgBox(0, "除錯", "已點選月曆")
Until $msg = $GUI_EVENT_CLOSE

MsgBox(0, $msg, GUICtrlRead($Date), 2)
EndFunc ;==>Example


Function GUICtrlCreateObj

函數說明（Function Reference）

GUICtrlCreateObj

在GUI上建立一個 ActiveX 控制項。

GUICtrlCreateObj ( $ObjectVar, 左方, 上方 [, 寬度 [, 高度 ]] )

參數

$ObjectVar | 指向前一次開啟物件的變數。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

此函數會嘗試在 GUI 視窗內崁入一個 'ActiveX 控制件' 或一個 '文件項目'。
不是每一種控制項都可以崁入，他們必須至少能支援 'IDispatch' 介面。

'文件項目' 在 GUICreate() 用了 $WS_CLIPCHILDREN 視窗類型下，將只能是可見物件。

GUI 函數的 GUICtrlRead 和 GUICtrlSet 對控制項是沒有作用的，該物件只能用 $ObjectVar 變數的 'methods' 或 'properties' 控制。

相關

ObjCreate, ObjGet, ObjEvent, IsObj

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

; 簡單範例：崁入一個 Internet Explorer 物件到 AutoIt GUI 視窗
;
; 也可以查閱：http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/internetexplorer.asp
Func Example()
Local $oIE, $GUIActiveX, $GUI_Button_Back, $GUI_Button_Forward
Local $GUI_Button_Home, $GUI_Button_Stop, $msg

$oIE = ObjCreate("Shell.Explorer.2")

; 建立一個為我們進行輸出的簡單視窗
GUICreate("崁入網站控制件測試", 640, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN))
$GUIActiveX = GUICtrlCreateObj ($oIE, 10, 40, 600, 360)
$GUI_Button_Back = GUICtrlCreateButton("向後", 10, 420, 100, 30)
$GUI_Button_Forward = GUICtrlCreateButton("向前", 120, 420, 100, 30)
$GUI_Button_Home = GUICtrlCreateButton("回到首頁", 230, 420, 100, 30)
$GUI_Button_Stop = GUICtrlCreateButton("停止", 330, 420, 100, 30)

GUISetState() ;顯示視窗

$oIE.navigate("http://www.autoitscript.com")

; 等待使用者關閉視窗
While 1
$msg = GUIGetMsg()

Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $GUI_Button_Home
$oIE.navigate("http://www.autoitscript.com")
Case $msg = $GUI_Button_Back
$oIE.GoBack
Case $msg = $GUI_Button_Forward
$oIE.GoForward
Case $msg = $GUI_Button_Stop
$oIE.Stop
EndSelect

WEnd

GUIDelete()
EndFunc ;==>Example


Function GUICtrlCreatePic

函數說明（Function Reference）

GUICtrlCreatePic

在GUI上建立一個圖片控制項。

GUICtrlCreatePic ( 檔案名稱, 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

檔案名稱 | 進行載入的圖片檔名稱：支援 BMP, JPG, GIF 類型 (不包括動畫)。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$SS_NOTIFY 強制性類型：$SS_BITMAP
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 若圖片不能建立返回 0。

附註

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要在對話框顯示後更新圖片，只要使用 GUICtrlSetImage 即可。

如您要讓該圖片以原始大小顯示只要設定 寬度=高度=0 即可。

如要建立一個透明圖片，則必須建立帶WS_EX_LAYERED 進階類型的 GUI 視窗。自左上角起像素會以透明色顯示，若建立數個圖片，則以最近期建立的圖片為透明色，請見範例 2。
.
要以預設類型組合數個類型請使用：BitOr($GUI_SS_DEFAULT_PIC, 新類型,...)。

要使用上面列出的數值必須將其 #include <StaticConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKSIZE。

如有一張圖片被設為背景圖，則其它控制項將被覆蓋，若因為需要必須這麼做的話，那麼很重要的一點就是要先將該圖片控制項關閉，然後在其它控制項設定：GuiCtrlSetState(-1,$GUI_DISABLE) 後再重新建立。對於作用不同而空間不足的 Tab 或 Listview 控制項，對此您需建立一個帶 $WS_CLIPSIBLINGS 類型的圖片，對 Tab 或 Listview 而言，GuiCtrlSetState(-1,$GUI_ONTOP) 更是不可或缺。

進階類型 $GUI_WS_EX_PARENTDRAG 可使用來允許無標題欄視窗 (GUICreate 無設定 $WS_CAPTION 類型) 拖放到主視窗的動作。

背景永遠會被設為透明色彩，GUICtrlSetBkColor() 在圖片控制項上是無作用的。

PNG 可以搭配 GDI+ 使用，請見範例 3。

相關

GUICoordMode (Option), GUICtrlSetImage, GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $gui, $guiPos, $pic, $picPos

Example1()
Example2()

;----- 範例 1 ----
Func Example1()
Local $n, $msg

GUICreate("我的 GUI 圖片", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; 將建立一個置中顯示的對話框

GUISetBkColor(0xE0FFFF)
$n = GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 50, 50, 200, 50)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

;~ GUISetState ()
; 重設控制項大小
$n = GUICtrlSetPos($n, 50, 50, 200, 100)
; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

GUIDelete()
EndFunc ;==>Example1

;----- 範例 2
Func Example2()
Local $msg

$gui = GUICreate("測試透明圖片", 200, 100)
$pic = GUICreate("", 68, 71, 10, 10, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)
GUICtrlCreatePic(@SystemDir & "\oobe\images\merlin.gif", 0, 0, 0, 0)

GUISetState(@SW_SHOW, $pic)
GUISetState(@SW_SHOW, $gui)

HotKeySet("{ESC}", "main")
HotKeySet("{LEFT}", "left")
HotKeySet("{RIGHT}", "right")
HotKeySet("{DOWN}", "down")
HotKeySet("{UP}", "up")
$picPos = WinGetPos($pic)
$guiPos = WinGetPos($gui)

Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>範例2

Func main()
$guiPos = WinGetPos($gui)
WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)
EndFunc ;==>主要

Func left()
$picPos = WinGetPos($pic)
WinMove($pic, "", $picPos[0] - 10, $picPos[1])
EndFunc ;==>左

Func right()
$picPos = WinGetPos($pic)
WinMove($pic, "", $picPos[0] + 10, $picPos[1])
EndFunc ;==>右

Func down()
$picPos = WinGetPos($pic)
WinMove($pic, "", $picPos[0], $picPos[1] + 10)
EndFunc ;==>下

Func up()
$picPos = WinGetPos($pic)
WinMove($pic, "", $picPos[0], $picPos[1] - 10)
EndFunc ;==>上

;----- 範例 3 PNG 圖由 Zedna 暫時替代
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#Include <WinAPI.au3>

Global $hGUI, $hImage, $hGraphic, $hImage1

; 建立 GUI 視窗
$hGUI = GUICreate("顯示 PNG 圖片", 350, 301)

; 載入 PNG 圖片
_GDIPlus_StartUp()
$hImage = _GDIPlus_ImageLoadFromFile("MAIN.png")
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
GUISetState()

; 循環直到使用者關閉
do
until GUIGetMsg() = $GUI_EVENT_CLOSE

; 清空資源內容
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ShutDown()

; 繪製 PNG 圖
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)
Return $GUI_RUNDEFMSG
EndFunc


Function GUICtrlCreateProgress

函數說明（Function Reference）

GUICtrlCreateProgress

在GUI上建立一個進度列控制項。

GUICtrlCreateProgress ( 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要更新進度列位置只要使用GUICtrlSetData 即可。

要設定帶預設類型的組合樣式請使用：BitOr($GUI_SS_DEFAULT_PROGRESS, 新類型,...)。

要使用上面列出的數值必須將其 #include <ProgressConstants.au3>到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKAUTO，可修改大小及位置。

相關

GUICoordMode (Option), GUICtrlSetData, GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $progressbar1, $progressbar2, $button, $wait, $s, $msg, $m

GUICreate("我的 GUI 進度列", 220, 100, 100, 200)
$progressbar1 = GUICtrlCreateProgress(10, 10, 200, 20)
GUICtrlSetColor(-1, 32250); 不能以 Windows XP 樣式類型作用
$progressbar2 = GUICtrlCreateProgress(10, 40, 200, 20, $PBS_SMOOTH)
$button = GUICtrlCreateButton("開始", 75, 70, 70, 20)
GUISetState()

$wait = 20; 靜候 20ms 豪秒等待下個進度
$s = 0; 進度列-儲存位置
Do
$msg = GUIGetMsg()
If $msg = $button Then
GUICtrlSetData($button, "停止")
For $i = $s To 100
If GUICtrlRead($progressbar1) = 50 Then MsgBox(0, "資訊", "一半進度已完成...", 1)
$m = GUIGetMsg()

If $m = -3 Then ExitLoop

If $m = $button Then
GUICtrlSetData($button, "下一步")
$s = $i;儲存目前該列進度到 $s
ExitLoop
Else
$s = 0
GUICtrlSetData($progressbar1, $i)
GUICtrlSetData($progressbar2, (100 - $i))
Sleep($wait)
EndIf
Next
If $i > 100 Then
; $s=0
GUICtrlSetData($button, "開始")
EndIf
EndIf
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Function GUICtrlCreateRadio

函數說明（Function Reference）

GUICtrlCreateRadio

在GUI上建立一個單選 (Radio) 控制項。

GUICtrlCreateRadio ( "文字", 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

文字 | 控制項的文字。
左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：無 強制性類型：若第一個單選物件在群組內，則設定 $BS_AUTORADIOBUTTON 和 $WS_TABSTOP
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要設定帶預設類型的組合樣式請使用：BitOr($GUI_SS_DEFAULT_RADIO, 新類型,...)。

要使用上面列出的數值必須將其 #include <ButtonConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKHEIGHT。

相關

GUICoordMode (Option), GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $radio1, $radio2, $msg
GUICreate("我的 GUI 單選物件") ; 將建立一個置中顯示的對話框

$radio1 = GUICtrlCreateRadio("單選物件 1", 10, 10, 120, 20)
$radio2 = GUICtrlCreateRadio("單選物件 2", 10, 40, 120, 20)
GUICtrlSetState($radio2, $GUI_CHECKED)

GUISetState() ; 將顯示帶 1 個複選框的對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $radio1 And BitAND(GUICtrlRead($radio1), $GUI_CHECKED) = $GUI_CHECKED
MsgBox(64, '資訊：', '您選擇了第 1 個單選物件且已點選。')
Case $msg = $radio2 And BitAND(GUICtrlRead($radio2), $GUI_CHECKED) = $GUI_CHECKED
MsgBox(64, '資訊：', '您選擇了第 2 個單選物件且已點選。')
EndSelect
WEnd
EndFunc ;==>Example


Function GUICtrlCreateSlider

函數說明（Function Reference）

GUICtrlCreateSlider

在GUI上建立一個滑動軸 (Slider) 控制項。

GUICtrlCreateSlider ( 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$TBS_AUTOTICKS
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要取得控制項數值請檢視：GUICtrlRead。
要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要更新進度列位置請使用：GUICtrlSetData。
要設定最小或最大值請使用：GUICtrlSetLimit。

要設定帶預設類型的組合樣式請使用：BitOr($GUI_SS_DEFAULT_SLIDER, 新類型,...)。

要使用上面列出的數值必須將其 #include <SliderConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKAUTO，可修改大小及位置。

相關

GUICoordMode (Option), GUICtrlSetData, GUICtrlSetLimit, GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $slider1, $button, $msg

GUICreate("滑動軸", 220, 100, 100, 200)
GUISetBkColor(0x00E0FFFF) ; 將變更背景色

$slider1 = GUICtrlCreateSlider(10, 10, 200, 20)
GUICtrlSetLimit(-1, 200, 0) ; 修改最小/最大值
$button = GUICtrlCreateButton("數值？", 75, 70, 70, 20)
GUISetState()
GUICtrlSetData($slider1, 45) ; 設定游標

Do
$msg = GUIGetMsg()

If $msg = $button Then
MsgBox(0, "滑動軸 1", GUICtrlRead($slider1), 2)
EndIf
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Function GUICtrlCreateTab

函數說明（Function Reference）

GUICtrlCreateTab

在GUI上建立一個標籤頁 (Tab) 控制項。

GUICtrlCreateTab ( 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 ( -1)：無 強制性類型：$WS_TABSTOP, $WS_CLIPSIBLINGS
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

此函數只是一個建立籤頁項目(tabitem) 的控制項 (容器)。
之後您還要指定以 GUICtrlCreate... 函數建立的特定籤頁項目(tabitem) 相關控制項。

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要設定帶預設類型的組合樣式請使用：BitOr($GUI_SS_DEFAULT_TAB, 新類型,...)。

要使用上面列出的數值必須將其 #include <TabConstants.au3> 到您的腳本中。

預設可重新調整大小的類型是 $GUI_DOCKSIZE。

「只能有一個」Tab 控制項可由視窗建立，不過一個腳本可以建立數個內含一個籤頁控制項的視窗。

相關

GUICtrlCreateTabItem, GUICoordMode (Option), GUICtrlCreate..., GUICtrlSet..., GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $tab, $tab0, $tab0OK, $tab0input
Local $tab1, $tab1combo, $tab1OK
Local $tab2, $tab2OK, $msg

GUICreate("我的 GUI 籤頁") ; 將建立一個置中顯示的對話框

GUISetBkColor(0x00E0FFFF)
GUISetFont(9, 300)

$tab = GUICtrlCreateTab(10, 10, 200, 100)

$tab0 = GUICtrlCreateTabItem("籤頁 0")
GUICtrlCreateLabel("標籤0", 30, 80, 50, 20)
$tab0OK = GUICtrlCreateButton("確定0", 20, 50, 50, 20)
$tab0input = GUICtrlCreateInput("預設值", 80, 50, 70, 20)

$tab1 = GUICtrlCreateTabItem("籤頁----1")
GUICtrlCreateLabel("標籤1", 30, 80, 50, 20)
$tab1combo = GUICtrlCreateCombo("", 20, 50, 60, 120)
GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo", "Jon") ; 預設為 Jon
$tab1OK = GUICtrlCreateButton("確定1", 80, 50, 50, 20)

$tab2 = GUICtrlCreateTabItem("籤頁2")
GUICtrlSetState(-1, $GUI_SHOW) ; 將顯示第一個
GUICtrlCreateLabel("標籤2", 30, 80, 50, 20)
$tab2OK = GUICtrlCreateButton("確定2", 140, 50, 50)

GUICtrlCreateTabItem("") ; 結束 tabitem 定義

GUICtrlCreateLabel("標籤3", 20, 130, 50, 20)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlCreateTabItem

函數說明（Function Reference）

GUICtrlCreateTabItem

在GUI上建立一個標籤控制項項目。

GUICtrlCreateTabItem ( "文字" )

參數

文字 控制項的文字。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

關於設定的更多資訊請檢視：GUICtrlSet...。

若要讓選擇的籤頁在對話框開啟的時候被顯示，只要聲明一個 GUICtrlSetState(-1,$GUI_SHOW) 即可，請見範例說明。

若要結束標籤控制項，只要在最後建立一個帶 null 文字 "" 的 "tabitem" 控制項。"tabitem" 無法被繪製出來（代碼太多了...)。

當使用進階的模式時，GUICtrlRead($tab,1) 將返回控制項ID，而不是選擇的籤頁項目索引。

要在已存在的 tabitem 建立一個新控制項，使用 GUISwitch($hWin,$tabitem) 選擇並僅用於建立您的新物件。別忘記了要關閉以 GUICtrlCreateTabItem("") 建立的籤頁項。

相關

GUICtrlSetState, GUISwitch, GUIGetMsg, GUICtrlRead, GUIEventOptions (Option)

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $tab, $tab0, $tab0OK, $tab0input
Local $tab1, $tab1combo, $tab1OK
Local $tab2, $tab2OK, $msg

GUICreate("我的 GUI 籤頁", 250, 150); 將建立一個置中顯示的對話框

GUISetBkColor(0x00E0FFFF)
GUISetFont(9, 300)

$tab = GUICtrlCreateTab(10, 10, 200, 100)

$tab0 = GUICtrlCreateTabItem("籤頁0")
GUICtrlCreateLabel("標籤0", 30, 80, 50, 20)
$tab0OK = GUICtrlCreateButton("確定0", 20, 50, 50, 20)
$tab0input = GUICtrlCreateInput("預設值", 80, 50, 70, 20)

$tab1 = GUICtrlCreateTabItem("籤頁----1")
GUICtrlCreateLabel("標籤1", 30, 80, 50, 20)
$tab1combo = GUICtrlCreateCombo("", 20, 50, 60, 120)
GUICtrlSetData(-1, "Trids|CyberSlug|Larry|Jon|Tylo", "Jon"); 預設為 Jon
$tab1OK = GUICtrlCreateButton("確定1", 80, 50, 50, 20)

$tab2 = GUICtrlCreateTabItem("籤頁2")
GUICtrlSetState(-1, $GUI_SHOW); 將顯示第一個
GUICtrlCreateLabel("標籤2", 30, 80, 50, 20)
$tab2OK = GUICtrlCreateButton("確定2", 140, 50, 50)

GUICtrlCreateTabItem(""); 結束 tabitem 定義

GUICtrlCreateLabel("選擇籤頁並請注意標題欄", 20, 130, 250, 20)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
If $msg = $tab Then
; 顯示選擇的籤頁
WinSetTitle("我的 GUI 籤頁", "", "我的 GUI 籤頁" & GUICtrlRead($tab))
EndIf
WEnd
EndFunc ;==>Example


Function GUICtrlCreateTreeView

函數說明（Function Reference）

GUICtrlCreateTreeView

在GUI上建立一個 TreeView 控制項。

GUICtrlCreateTreeView ( 左方, 上方 [, 寬度 [, 高度 [, 類型(style) [, 進階類型(exStyle)]]]] )

參數

左方 | 控制項左方，若使用預設的 -1 則以：GUICoordMode 的結果計算左邊位置。
上方 | 控制項上方，若使用預設的 -1 則以：GUICoordMode 的結果計算上方位置。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS 強制性類型：$WS_TABSTOP
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要設定或修改控制項內的訊息請檢視：GUICtrlSet...。

要設定帶預設類型的組合樣式請使用：BitOr($GUI_SS_DEFAULT_TREEVIEW, 新類型,...)。

要使用上面列出的數值必須將其 #include <TreeViewConstants.au3> 到您的腳本中。

相關

GUICtrlCreateTreeViewItem, GUICoordMode (Option), GUICtrlSet..., GUIGetMsg, GUICtrlRead

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $treeview, $generalitem, $displayitem, $aboutitem, $compitem
Local $useritem, $resitem, $otheritem, $startlabel, $aboutlabel, $compinfo
Local $togglebutton, $infobutton, $statebutton, $cancelbutton
Local $msg, $item, $hItem, $text

GUICreate("我的 GUI 樹狀檢視", 350, 215)

$treeview = GUICtrlCreateTreeView(6, 6, 100, 150, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$generalitem = GUICtrlCreateTreeViewItem("一般", $treeview)
GUICtrlSetColor(-1, 0x0000C0)
$displayitem = GUICtrlCreateTreeViewItem("顯示", $treeview)
GUICtrlSetColor(-1, 0x0000C0)
$aboutitem = GUICtrlCreateTreeViewItem("關於", $generalitem)
$compitem = GUICtrlCreateTreeViewItem("電腦", $generalitem)
$useritem = GUICtrlCreateTreeViewItem("使用者", $generalitem)
$resitem = GUICtrlCreateTreeViewItem("解析度", $displayitem)
$otheritem = GUICtrlCreateTreeViewItem("其它", $displayitem)

$startlabel = GUICtrlCreateLabel("樹狀檢視展示", 190, 90, 100, 20)
$startlabel = GUICtrlCreateLabel("樹狀檢視展示", 190, 90, 100, 20)
$aboutlabel = GUICtrlCreateLabel("這是一個展示如何使用樹狀檢視(treeview)控制項的小型腳本。", 190, 70, 100, 60)
GUICtrlSetState(-1, $GUI_HIDE) ; 在初始化期間隱藏 "關於標籤1"-文字
$compinfo = GUICtrlCreateLabel("名稱：" & @TAB & @ComputerName & @LF & "系統：" & @TAB & @OSVersion & @LF & "版本：" & @TAB & @OSServicePack, 120, 30, 200, 80)
GUICtrlSetState(-1, $GUI_HIDE) ; 在初始化期間隱藏 "電腦資訊"-文字

GUICtrlCreateLabel("", 0, 170, 350, 2, $SS_SUNKEN)
$togglebutton = GUICtrlCreateButton("開關粗體(&T)", 35, 185, 70, 20)
$infobutton = GUICtrlCreateButton("資訊(&I)", 105, 185, 70, 20)
$statebutton = GUICtrlCreateButton("展開/關閉", 175, 185, 70, 20)
$cancelbutton = GUICtrlCreateButton("取消(&C)", 245, 185, 70, 20)

GUICtrlSetState($generalitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; 展開 "一般"-項目並以粗體顯示
GUICtrlSetState($displayitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; 展開 "顯示"-項目並以粗體顯示

GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $cancelbutton Or $msg = $GUI_EVENT_CLOSE
ExitLoop

Case $msg = $togglebutton ; 開啟/關閉粗體
If BitAND(GUICtrlRead($generalitem), $GUI_DEFBUTTON) Then
GUICtrlSetState($generalitem, 0)
GUICtrlSetState($displayitem, 0)
Else
GUICtrlSetState($generalitem, $GUI_DEFBUTTON)
GUICtrlSetState($displayitem, $GUI_DEFBUTTON)
EndIf

Case $msg = $infobutton
$item = GUICtrlRead($treeview) ; 取得目前選擇的 treeview 控制項ID
If $item = 0 Then
MsgBox(64, "TreeView 樹狀檢視展示", "沒有選擇項目。")
Else
$text = GUICtrlRead($item, 1) ; 取得樹狀檢視項目文字
If $text == "" Then
MsgBox(16, "錯誤", "當取得項目的相關內容時發生錯誤。")
Else
MsgBox(64, "TreeView 樹狀檢視展示", "當前選取的項目：" & $text) ; $advmsg[0] 包括文字及 treeview 控制項的 $advmsg[1] 狀態數值
EndIf
EndIf

Case $msg = $statebutton
$item = GUICtrlRead($treeview)
If $item > 0 Then
$hItem = GUICtrlGetHandle($item)
GUICtrlSendMsg($treeview, $TVM_EXPAND, $TVE_TOGGLE, $hItem)
EndIf

; 下面的項目將隱藏其它標籤(第一和第二個參數) 然後顯示 '我的' 標籤 (第三和第四個參數)
Case $msg = $generalitem
GUIChangeItems($aboutlabel, $compinfo, $startlabel, $startlabel)

Case $msg = $aboutitem
GUICtrlSetState($compinfo, $GUI_HIDE)
GUIChangeItems($startlabel, $startlabel, $aboutlabel, $aboutlabel)

Case $msg = $compitem
GUIChangeItems($startlabel, $aboutlabel, $compinfo, $compinfo)
EndSelect
WEnd

GUIDelete()
EndFunc ;==>Example

Func GUIChangeItems($hidestart, $hideend, $showstart, $showend)
Local $idx

For $idx = $hidestart To $hideend
GUICtrlSetState($idx, $GUI_HIDE)
Next
For $idx = $showstart To $showend
GUICtrlSetState($idx, $GUI_SHOW)
Next
EndFunc ;==>GUIChangeItems


Function GUICtrlCreateTreeViewItem

函數說明（Function Reference）

GUICtrlCreateTreeViewItem

在GUI上建立一個 TreeView 控制項項目。

GUICtrlCreateTreeViewItem ( "文字", treeviewID )

參數

文字 | 控制項的文字。
treeviewID | 樹狀檢視(treeview) 的識別碼，若次樹狀內容已建立則由 treeview 或 treeviewitem 返回取得。

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

其它相關的設定訊息請檢視：GUICtrlSet...。

要以粗體 (顯示為預設值) 繪製樹狀檢視項目請使用：GuiCtrlSetState($treeviewItem, $GUI_DEFBUTTON)。
要關閉此項目的作用則用 GUICtrlSetState() 搭配其它值，不過除了 $GUI_DEFBUTTON 則外，例如：GuiCtrlSetState($treeviewItem, 0)。

要展開樹狀檢視項目請使用 GuiCtrlSetState($treeviewItem, $GUI_EXPAND)。

要選擇一個特別的樹狀檢視項目請使用 GuiCtrlSetState($treeviewItem, $GUI_FOCUS)。

相關

GUICtrlCreateTreeView, GUICtrlSet..., GUIGetMsg, GUICtrlRead, GUICtrlGetHandle

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $treeview, $generalitem, $displayitem, $aboutitem, $compitem
Local $useritem, $resitem, $otheritem, $startlabel, $aboutlabel, $compinfo
Local $togglebutton, $infobutton, $statebutton, $cancelbutton
Local $msg, $item, $hItem, $text

GUICreate("我的 GUI 樹狀檢視", 350, 215)

$treeview = GUICtrlCreateTreeView(6, 6, 100, 150, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$generalitem = GUICtrlCreateTreeViewItem("一般", $treeview)
GUICtrlSetColor(-1, 0x0000C0)
$displayitem = GUICtrlCreateTreeViewItem("顯示", $treeview)
GUICtrlSetColor(-1, 0x0000C0)
$aboutitem = GUICtrlCreateTreeViewItem("關於", $generalitem)
$compitem = GUICtrlCreateTreeViewItem("電腦", $generalitem)
$useritem = GUICtrlCreateTreeViewItem("使用者", $generalitem)
$resitem = GUICtrlCreateTreeViewItem("解析度", $displayitem)
$otheritem = GUICtrlCreateTreeViewItem("其它", $displayitem)

$startlabel = GUICtrlCreateLabel("樹狀檢視展示", 190, 90, 100, 20)
$startlabel = GUICtrlCreateLabel("樹狀檢視展示", 190, 90, 100, 20)
$aboutlabel = GUICtrlCreateLabel("這是一個展示如何使用樹狀檢視(treeview)控制項的小型腳本。", 190, 70, 100, 60)
GUICtrlSetState(-1, $GUI_HIDE) ; 在初始化期間隱藏 "關於標籤1"-文字
$compinfo = GUICtrlCreateLabel("名稱：" & @TAB & @ComputerName & @LF & "系統：" & @TAB & @OSVersion & @LF & "版本：" & @TAB & @OSServicePack, 120, 30, 200, 80)
GUICtrlSetState(-1, $GUI_HIDE) ; 在初始化期間隱藏 "電腦資訊"-文字

GUICtrlCreateLabel("", 0, 170, 350, 2, $SS_SUNKEN)
$togglebutton = GUICtrlCreateButton("開關粗體(&T)", 35, 185, 70, 20)
$infobutton = GUICtrlCreateButton("資訊(&I)", 105, 185, 70, 20)
$statebutton = GUICtrlCreateButton("展開/關閉", 175, 185, 70, 20)
$cancelbutton = GUICtrlCreateButton("取消(&C)", 245, 185, 70, 20)

GUICtrlSetState($generalitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; 展開 "一般"-項目並以粗體顯示
GUICtrlSetState($displayitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; 展開 "顯示"-項目並以粗體顯示

GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $cancelbutton Or $msg = $GUI_EVENT_CLOSE
ExitLoop

Case $msg = $togglebutton ; 開啟/關閉粗體
If BitAND(GUICtrlRead($generalitem), $GUI_DEFBUTTON) Then
GUICtrlSetState($generalitem, 0)
GUICtrlSetState($displayitem, 0)
Else
GUICtrlSetState($generalitem, $GUI_DEFBUTTON)
GUICtrlSetState($displayitem, $GUI_DEFBUTTON)
EndIf

Case $msg = $infobutton
$item = GUICtrlRead($treeview) ; 取得目前選擇的 treeview 控制項ID
If $item = 0 Then
MsgBox(64, "TreeView 樹狀檢視展示", "沒有選擇項目。")
Else
$text = GUICtrlRead($item, 1) ; 取得樹狀檢視項目文字
If $text == "" Then
MsgBox(16, "錯誤", "當取得項目的相關內容時發生錯誤。")
Else
MsgBox(64, "TreeView 樹狀檢視展示", "當前選取的項目：" & $text) ; $advmsg[0] 包括文字及 treeview 控制項的 $advmsg[1] 狀態數值
EndIf
EndIf

Case $msg = $statebutton
$item = GUICtrlRead($treeview)
If $item > 0 Then
$hItem = GUICtrlGetHandle($item)
GUICtrlSendMsg($treeview, $TVM_EXPAND, $TVE_TOGGLE, $hItem)
EndIf

; 下面的項目將隱藏其它標籤(第一和第二個參數) 然後顯示 '我的' 標籤 (第三和第四個參數)
Case $msg = $generalitem
GUIChangeItems($aboutlabel, $compinfo, $startlabel, $startlabel)

Case $msg = $aboutitem
GUICtrlSetState($compinfo, $GUI_HIDE)
GUIChangeItems($startlabel, $startlabel, $aboutlabel, $aboutlabel)

Case $msg = $compitem
GUIChangeItems($startlabel, $aboutlabel, $compinfo, $compinfo)
EndSelect
WEnd

GUIDelete()
EndFunc ;==>Example

Func GUIChangeItems($hidestart, $hideend, $showstart, $showend)
Local $idx

For $idx = $hidestart To $hideend
GUICtrlSetState($idx, $GUI_HIDE)
Next
For $idx = $showstart To $showend
GUICtrlSetState($idx, $GUI_SHOW)
Next
EndFunc ;==>GUIChangeItems


Function GUICtrlCreateUpdown

函數說明（Function Reference）

GUICtrlCreateUpdown

在GUI上建立一個 Updown (上下箭頭) 控制項。

GUICtrlCreateUpdown ( 輸入控制項ID [,類型(style)] )

參數

輸入控制項ID | 輸入控制項的控制項ID，建立 Updown (上下箭頭) 控制項。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。 預設值 (-1)：$UDS_ALIGNRIGHT 強制性類型：若對齊未定義，則設定 $UDS_SETBUDDYINT 和 $UDS_ALIGNRIGHT

返回值

成功： | 返回新控制項的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

要使用上面列出的數值必須將其 #include <UpDownConstants.au3> 到您的腳本中。

最大與最小值可以由 GUICtrlSetLimit 設定。
若選擇向上箭頭按鈕，Windows 預設會增加數值。

預設會跟據某個輸入控制項，自動重設高度。

相關

GUICtrlCreateInput, GUICtrlSetData, GUICtrlSetLimit

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $title, $input, $updown, $msg

$title = "我的 GUI Up-Down 控制項"
GUICreate($title, -1, -1, -1, -1, $WS_SIZEBOX)

$input = GUICtrlCreateInput("2", 10, 10, 50, 20)
$updown = GUICtrlCreateUpdown($input)

; 嘗試重設控制項大小
GUICtrlSetPos($input, 10, 10, 100, 40)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

MsgBox(0, "調整控制", GUICtrlRead($input))
EndFunc ;==>Example


Function GUICtrlDelete

函數說明（Function Reference）

GUICtrlDelete

移除指定控制項。

GUICtrlDelete ( 控制項ID )

參數

控制項ID 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

關於內容選單控制項請檢視：GUICtrlCreateContextMenu 附註說明。

相關

GUICreate, GUICtrlCreate..., GUICtrlCreateContextMenu

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $date, $del, $msg

GUICreate("我的 GUI 移除控制項", 200, 200, 800, 200)
$date = GUICtrlCreateDate("1953/04/25", 10, 10, 185, 20)
$del = GUICtrlCreateButton("移除控制項", 50, 50, 70, 20)
GUISetState()

; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
If $msg = $del Then
GUICtrlDelete($date)
GUICtrlDelete($del)
EndIf
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


GUI 控制項管理函數清單

GUI 控制項管理函數清單 (GUI Control Management Function Reference)

下面列出的是 AutoIt 的所有 GUI 控制項管理函數，點選函數名稱即可檢視詳細說明：

函數 | 詳細說明
GUICtrlSetBkColor | 設定指定控制項的背景顏色。
GUICtrlSetColor | 設定指定控制項的文字顏色。
GUICtrlSetCursor | 設定某個以特定模式控制的滑鼠游標圖示。
GUICtrlSetData | 修改指定控制項的相關資料。
GUICtrlSetDefBkColor | 設定 GUI 視窗所有控制項的預設背景色彩。
GUICtrlSetDefColor | 設定 GUI 視窗所有控制項的預設文字色彩。
GUICtrlSetFont | 設定指定控制項的字型。
GUICtrlSetGraphic | 修改指定控制項的相關資料。
GUICtrlSetImage | 設定指定控制項的點陣圖或圖示。
GUICtrlSetLimit | 設定某些控制項的字元數或像素限制。
GUICtrlSetOnEvent | 為指定控制項的點選行為定義一個功能函數。
GUICtrlSetPos | 調整某個控制項在視窗中的座標位置。
GUICtrlSetResizing | 設定某個控制項的大小調整模式。
GUICtrlSetState | 調整指定控制項的狀態。
GUICtrlSetStyle | 變更指定控制項的類型。
GUICtrlSetTip | 定義指定控制項的相關提示文字。

函數 | 詳細說明
GUICtrlRecvMsg | 傳送控制項訊息並接收在 lParam 內的資訊。
GUICtrlSendMsg | 向指定控制項傳送訊息。
GUICtrlSendToDummy | 向指定的 Dummy 控制項傳送訊息。


Function GUICtrlRegisterListViewSort

函數說明（Function Reference）

GUICtrlRegisterListViewSort

註冊某個已定義使用者，其對內部 listview 排序返回呼叫的函數值。

GUICtrlRegisterListViewSort ( 控制項ID, "函數" )

參數

控制項ID | 將由使用者函數進行的檢視清單控制項ID。
函數 | 當要取消排序動作時，欲呼叫的使用者函數名稱。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

『注意!!!』：要建立可作用的使用者函數您須以 最多 4 組函數參數 來定義，否則該函數將不能被呼叫！！！

例如說：
Func MySortFunction($nListViewID, $LParam1, $LParam2, $nColumn)
...
EndFunc

或者

Func MySortFunction($nListViewID, $LParam1, $LParam2)
...
EndFunc

當呼叫使用者函數時，這 4 組參數還包括下列數值：
位置 | 參數 | 含義說明
1 | 控制項ID | 檢視清單的控制項ID是用於取消函數呼叫的。
2 | lParam1 | 第一個項目的 lParam 參數值 (依預設的物件控制項ID )。
3 | lParam2 | 第二個項目的 lParam 參數值 (依預設的物件控制項ID )。
4 | 欄位 | 選擇排序的欄位 (第一攔編號是 0)。

下列所示的值必須為 已返回 到取消排序的變更動作：
返回值 | 含義說明
-1 | 第一個應該排在第二位之前。
0 | 不變更。
1 | 第一個應該排在第二個之後。

也可以參見自行建立 GUI listview 項目的排序範例。

相關

GUICtrlCreateListView

範例

#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>

Opt('MustDeclareVars', 1)

Global $nCurCol = -1
Global $nSortDir = 1
Global $bSet = 0
Global $nCol = -1

Example1()
Example2()

; *******************************************************
; 範例 1 - 3 組排序襴位的差異
; *******************************************************
Func Example1()
Local $hGUI, $lv, $lvi1, $lvi2, $lvi3, $msg

$hGUI = GUICreate("測試", 300, 200)

$lv = GUICtrlCreateListView("「欄位1」|欄位2|欄位3", 10, 10, 280, 180)
GUICtrlRegisterListViewSort(-1, "LVSort") ; 將函數 "SortLV" 進行註冊，以取消排序呼叫

$lvi1 = GUICtrlCreateListViewItem("ABC|666|10.05.2004", $lv)
GUICtrlSetImage(-1, "shell32.dll", 7)
$lvi2 = GUICtrlCreateListViewItem("DEF|444|11.05.2005", $lv)
GUICtrlSetImage(-1, "shell32.dll", 12)
$lvi3 = GUICtrlCreateListViewItem("CDE|444|12.05.2004", $lv)
GUICtrlSetImage(-1, "shell32.dll", 3)

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop

Case $lv
$bSet = 0
$nCurCol = $nCol
GUICtrlSendMsg($lv, $LVM_SETSELECTEDCOLUMN, GUICtrlGetState($lv), 0)
DllCall("user32.dll", "int", "InvalidateRect", "hwnd", GUICtrlGetHandle($lv), "int", 0, "int", 1)
EndSwitch
WEnd

GUIDelete()
EndFunc ;==>Example1

; 我的取消排序函數
Func LVSort($hWnd, $nItem1, $nItem2, $nColumn)
Local $nSort, $val1, $val2, $nResult

; 切換排序方向
If $nColumn = $nCurCol Then
If Not $bSet Then
$nSortDir = $nSortDir * - 1
$bSet = 1
EndIf
Else
$nSortDir = 1
EndIf
$nCol = $nColumn

$val1 = GetSubItemText($hWnd, $nItem1, $nColumn)
$val2 = GetSubItemText($hWnd, $nItem2, $nColumn)

; 若為第三欄 (欄位從 0 開始)，則比對日期
If $nColumn = 2 Then
$val1 = StringRight($val1, 4) & StringMid($val1, 4, 2) & StringLeft($val1, 2)
$val2 = StringRight($val2, 4) & StringMid($val2, 4, 2) & StringLeft($val2, 2)
EndIf

$nResult = 0 ; 不變更第 1 個和第 2 個項目的位置

If $val1 < $val2 Then
$nResult = -1 ; 將項目2 置於 項目1 之前
ElseIf $val1 > $val2 Then
$nResult = 1 ; 將項目2 置於 項目1 之後
EndIf

$nResult = $nResult * $nSortDir

Return $nResult
EndFunc ;==>LVSort

; 取得特殊欄位的檢視清單項文字
Func GetSubItemText($nCtrlID, $nItemID, $nColumn)
Local $stLvfi = DllStructCreate("uint;ptr;int;int[2];int")
Local $nIndex, $stBuffer, $stLvi, $sItemText

DllStructSetData($stLvfi, 1, $LVFI_PARAM)
DllStructSetData($stLvfi, 3, $nItemID)

$stBuffer = DllStructCreate("char[260]")

$nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi));

$stLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int")

DllStructSetData($stLvi, 1, $LVIF_TEXT)
DllStructSetData($stLvi, 2, $nIndex)
DllStructSetData($stLvi, 3, $nColumn)
DllStructSetData($stLvi, 6, DllStructGetPtr($stBuffer))
DllStructSetData($stLvi, 7, 260)

GUICtrlSendMsg($nCtrlID, $LVM_GETITEMA, 0, DllStructGetPtr($stLvi));

$sItemText = DllStructGetData($stBuffer, 1)

$stLvi = 0
$stLvfi = 0
$stBuffer = 0

Return $sItemText
EndFunc ;==>GetSubItemText

; *******************************************************
; 範例 2 - 以 DllCall 函數的自行建立項目進行排序
; *******************************************************
Func Example2()
Local $hGUI, $lv, $msg

$nCurCol = -1
$nSortDir = 1
$bSet = 0
$nCol = -1

$hGUI = GUICreate("測試", 300, 200)

$lv = GUICtrlCreateListView("「欄位1」|欄位2|欄位3", 10, 10, 280, 180)
GUICtrlRegisterListViewSort(-1, "LVSort2") ; 將函數 "SortLV" 註冊，以取消排序呼叫

MyGUICtrlCreateListViewItem("ABC|666|10.05.2004", $lv, -1)
MyGUICtrlCreateListViewItem("DEF|444|11.05.2005", $lv, -1)
MyGUICtrlCreateListViewItem("CDE|444|12.05.2004", $lv, -1)

GUISetState()

While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop

Case $lv
$bSet = 0
$nCurCol = $nCol
GUICtrlSendMsg($lv, $LVM_SETSELECTEDCOLUMN, GUICtrlGetState($lv), 0)
DllCall("user32.dll", "int", "InvalidateRect", "hwnd", ControlGetHandle($hGUI, "", $lv), "int", 0, "int", 1)
EndSwitch
WEnd
EndFunc ;==>Example2

; 我的取消排序函數
Func LVSort2($hWnd, $nItem1, $nItem2, $nColumn)
Local $nSort, $val1, $val2, $nResult

; 切換排序方向
If $nColumn = $nCurCol Then
If Not $bSet Then
$nSortDir = $nSortDir * - 1
$bSet = 1
EndIf
Else
$nSortDir = 1
EndIf
$nCol = $nColumn

$val1 = GetSubItemText($hWnd, $nItem1, $nColumn)
$val2 = GetSubItemText($hWnd, $nItem2, $nColumn)

; 若為第三欄 (欄位從 0 開始)，則比對日期
If $nColumn = 2 Then
$val1 = StringRight($val1, 4) & StringMid($val1, 4, 2) & StringLeft($val1, 2)
$val2 = StringRight($val2, 4) & StringMid($val2, 4, 2) & StringLeft($val2, 2)
EndIf

$nResult = 0 ; 不變更第 1 個和第 2 個項目的位置

If $val1 < $val2 Then
$nResult = -1 ; 將項目2 置於 項目1 之前
ElseIf $val1 > $val2 Then
$nResult = 1 ; 將項目2 置於 項目1 之後
EndIf

$nResult = $nResult * $nSortDir

Return $nResult
EndFunc ;==>LVSort2

; 取得特殊欄位的檢視清單項文字
Func GetSubItemText2($nCtrlID, $nItemID, $nColumn)
Local $stLvfi = DllStructCreate("uint;ptr;int;int[2];int")
Local $stBuffer, $nIndex, $stLvi, $sItemText

DllStructSetData($stLvfi, 1, $LVFI_PARAM) ; 以我自行儲存的索引搜尋項目
DllStructSetData($stLvfi, 3, $nItemID)

$stBuffer = DllStructCreate("char[260]")

$nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi));

$stLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int")

DllStructSetData($stLvi, 1, $LVIF_TEXT)
DllStructSetData($stLvi, 2, $nIndex)
DllStructSetData($stLvi, 3, $nColumn)
DllStructSetData($stLvi, 6, DllStructGetPtr($stBuffer))
DllStructSetData($stLvi, 7, 260)

GUICtrlSendMsg($nCtrlID, $LVM_GETITEMA, 0, DllStructGetPtr($stLvi));

$sItemText = DllStructGetData($stBuffer, 1)

$stLvi = 0
$stLvfi = 0
$stBuffer = 0

Return $sItemText
EndFunc ;==>GetSubItemText2

; 建立並將項目直接插入到檢視清單內
Func MyGUICtrlCreateListViewItem($sText, $nCtrlID, $nIndex)
Local $stLvItem = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int;")
Local $stText = DllStructCreate("char[260]")
Local $arText = StringSplit($sText, "|")

If $nIndex = -1 Then $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_GETITEMCOUNT, 0, 0)

DllStructSetData($stText, 1, $arText[1]) ; 儲存結構內的物件文字

DllStructSetData($stLvItem, 1, BitOR($LVIF_TEXT, $LVIF_PARAM))
DllStructSetData($stLvItem, 2, $nIndex)
DllStructSetData($stLvItem, 6, DllStructGetPtr($stText))
; 設定結構內的 lParam 參數到行列索引 - 也就是不在 listview 的範圍內
DllStructSetData($stLvItem, 9, $nIndex)

$nIndex = GUICtrlSendMsg($nCtrlID, $LVM_INSERTITEMA, 0, DllStructGetPtr($stLvItem))

If $nIndex > -1 Then
; 現在要插入一行欄位文字
For $i = 2 To $arText[0]
DllStructSetData($stText, 1, $arText[$i])
DllStructSetData($stLvItem, 3, $i - 1) ; 儲存次項目索引

GUICtrlSendMsg($nCtrlID, $LVM_SETITEMTEXTA, $nIndex, DllStructGetPtr($stLvItem))
Next
EndIf

$stText = 0
$stLvItem = 0

; 修改欄位寬度使剛好符合文字大小
For $i = 0 To 2
GUICtrlSendMsg($nCtrlID, $LVM_SETCOLUMNWIDTH, $i, -1)
GUICtrlSendMsg($nCtrlID, $LVM_SETCOLUMNWIDTH, $i, -2)
Next
EndFunc ;==>MyGUICtrlCreateListViewItem


Function GUICtrlSetBkColor

函數說明（Function Reference）

GUICtrlSetBkColor

設定指定控制項的背景顏色。

GUICtrlSetBkColor ( 控制項ID, 背景色 )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
背景色 | 使用的 RGB 色彩。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

目前只有 Button, Label, Checkbox, Group, Radio, Edit, Input, List, Listview, ListviewItem, Treeview, TreeviewItem, Graphic, Progress 和 Slider 控制項等可設定顏色。
(譯者註：依序為：按鈕、選取框、群組、單選物件、編輯框、輸入框、清單、檢視清單、檢視清單項目、樹狀檢視、樹狀檢視項目、圖片、進度列、滑動軸)

若系統使用的主題是 "Windows XP 風格"，則無法使用此函數。

按鈕控制項始終以 "Windows 傳統風格" 呈現，它們無法擁有 $BS_ICON 類型。

較早期的 AutoIt 版本 (v3.0.102 之前) 使用 BGR 模式來定義顏色 - 較新的版本則預設使用 RGB 模式，不過還是可以用 ColorMode 選項來切換使用的模式。

特殊旗標 $GUI_BKCOLOR_TRANSPARENT 可以與標籤控制項搭配，將他們的背景變成透明。圖片控制項始終都會有一個透明的顏色。

特殊旗標 $GUI_BKCOLOR_LV_ALTERNATE 可以與 Listview 控制項搭配將 ListviewItems 格線的背景調換。
不對稱線條可由 Listview 控制項的 GUICtrlSetBkColor 函數取得色彩設定。
平行線則可由 ListviewItem 控制項的 GUICtrlSetBkColor 函數取得色彩設定。

相關

ColorMode (Option), GUICtrlCreate..., GUICtrlSetColor, GUICtrlSetDefBkColor

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 背景色") ; 將建立一個置中顯示的對話框

GUICtrlCreateLabel("我的標籤", 10, 20)
GUICtrlSetBkColor(-1, 0x00ff00) ; 綠色

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetColor

函數說明（Function Reference）

GUICtrlSetColor

設定指定控制項的文字顏色。

GUICtrlSetColor ( 控制項ID, 文字顏色)

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
文字顏色 | 使用的 RGB 色彩。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

目前只有 Button, Label, Checkbox, Group, Radio, Edit, Input, List, Listview, ListviewItem, Treeview, TreeviewItem, Graphic, Progress 控制項等可設定顏色。
(譯者註：依序為：按鈕、選取框、群組、單選物件、編輯框、輸入框、清單、檢視清單、檢視清單項目、樹狀檢視、樹狀檢視項目、圖片、進度列)

若系統使用的主題是 "Windows XP 風格"，則無法使用 Checkbox, Radio 或 Progress 控制項。

按鈕控制項始終以 "Windows 傳統風格" 呈現。

較早期的 AutoIt 版本 (v3.0.102 之前) 使用 BGR 模式來定義顏色 - 較新的版本則預設使用 RGB 模式，不過還是可以用 ColorMode 選項來切換使用的模式。

相關

ColorMode (Option), GUICtrlCreate..., GUICtrlSetBkColor, GUICtrlSetDefColor

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 文字顏色") ; 將建立一個置中顯示的對話框

GUICtrlCreateLabel("我的標籤是紅色的", 10, 20)
GUICtrlSetColor(-1, 0xff0000) ; 紅色

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetCursor

函數說明（Function Reference）

GUICtrlSetCursor

設定某個以特定模式控制的滑鼠游標圖示。

GUICtrlSetCursor ( 控制項ID, 游標ID )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
游標ID | 給 Windows SetCursor API 函式使用的游標 ID (使用 -1 為控制項的預設滑鼠游標)

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

與用來為整個 window 修改滑鼠游標的 GUISetCursor 函數不同在於，此函數是用來設定駐留在特定控制項的滑鼠遊標。

若設定的游標ID無效，則將使用預設的箭頭游標代替。

關於有效的滑鼠游標 ID 清單請檢視：MouseGetCursor。
游標ID = 16：則將隱藏滑鼠游標。

相關

GUISetCursor

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()

GUICreate("將游標置於標籤上空", 300, 100)
GUICtrlCreateLabel("標籤", 125, 40)
GUICtrlSetCursor(-1, 4)
GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd
EndFunc ;==>Example


Function GUICtrlSetData

函數說明（Function Reference）

GUICtrlSetData

修改指定控制項的相關資料。

GUICtrlSetData ( 控制項ID, 資料 [, 預設] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由GUICtrlCreate... 函數返回取得。
資料 | 對於 Combo, List, ListView, ListViewItem：物件文字請以 Opt("GUIDataSeparatorChar",...) 分隔： 對 Progress：百分比值 對 Slider：數值 對 Group, Label, Button, Checkbox, Radio, Combo, List, Input, Edit, TabItem：更新文字 對 Date：依控制項類型決定時間或日期 對 TreeViewItem：更新文字 對 Dummy：數值
預設 | [選擇性參數] 對 Combo, List：將為預設值。 對 Edit, Input：若有定義且非 ""，則 "資料" 字串將插入游標上的前一個數值，而不予覆寫。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。
 | 返回 -1 假如資料無效。

附註

對於 Combo 或 List 控制項：
如果 "資料" 和已存在的項目符合，則設為預設值。
如果 "資料" 以 GUIDataSeparatorChar 開始或為一個空白字串 ""，則銷毀前一筆清單。

對於 ListView, ListViewItem 控制項：
要更新一個指定的欄位，只要忽略其它相關項目即可，例如："||update" 表示更新第三欄。
如 "更新" 的是空白的欄位/子項目，則會將其刪除。例如："|" 將刪除第二個欄位/子項目，"" 則將刪除第一個。

相關

GUICtrlCreate..., GUICtrlSet..., GUICtrlRead, GUIDataSeparatorChar (Option)

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

GUICtrlCreateCombo("", 10, 10)

GUICtrlSetData(-1, "項目1|項目2|項目3", "項目3")

GUISetState() ; 將顯示一個有選擇項目清單和追蹤焦點的空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetDefBkColor

函數說明（Function Reference）

GUICtrlSetDefBkColor

設定 GUI 視窗所有控制項的預設背景色彩。

GUICtrlSetDefBkColor ( 背景色彩 [, 視窗控制碼] )

參數

背景色彩 | 所有控制項的預設背景色彩。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

較早期的 AutoIt 版本 (v3.0.102 之前) 使用 BGR 模式來定義顏色 - 較新的版本則預設使用 RGB 模式，不過還是可以用 ColorMode 選項來切換使用的模式。

相關

ColorMode (Option), GUICreate, GUICtrlSetDefColor

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("測試 GUISetTextColor", 100,100) ; 將建立一個置中顯示的對話框

GUICtrlSetDefBkColor(0xFF0000) ; 將變更所有控制項的文字色彩

GUICtrlCreateLabel("標籤", 10,5)

GUICtrlCreateRadio("單選項目", 10,25,80)
GUICtrlSetBkColor(-1, 0x0000FF) ; 將變更定義控制項的文字色彩

GUICtrlCreateButton("按鈕", 10,55)

GUISetState() ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetDefColor

函數說明（Function Reference）

GUICtrlSetDefColor

設定 GUI 視窗所有控制項的預設文字色彩。

GUICtrlSetDefColor ( 預設文字色彩 [, 視窗控制碼] )

參數

預設文字色彩 | 所有控制項的預設文字色彩。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

較早期的 AutoIt 版本 (v3.0.102 之前) 使用 BGR 模式來定義顏色 - 較新的版本則預設使用 RGB 模式，不過還是可以用 ColorMode 選項來切換使用的模式。

相關

ColorMode (Option), GUICreate, GUICtrlSetDefBkColor

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("測試 GUISetTextColor", 100,100) ; 將建立一個置中顯示的對話框

GUICtrlSetDefColor(0xFF0000) ; 將變更所有控制項的文字色彩

GUICtrlCreateLabel("標籤", 10,5)

GUICtrlCreateRadio("單選項目", 10,25,80)
GUICtrlSetColor(-1, 0x0000FF) ; 將變更定義控制項的文字色彩

GUICtrlCreateButton("按鈕", 10,55)

GUISetState() ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetFont

函數說明（Function Reference）

GUICtrlSetFont

設定指定控制項的字型。

GUICtrlSetFont (控制項ID, 大小 [, 寬度 [, 屬性 [, 字型名稱]]] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
大小 | 字型大小 (預設為 8.5)。
寬度 | [選擇性參數] 字型寬度 (預設 400 = 標準)。
屬性 | [選擇性參數] 設定字型格式 斜體：2 底線：4 刪除線：8 (可依需要把字型數值相加，如： 2+4 = 斜體、底線)。
字型名稱 | [選擇性參數] 使用的字型名稱。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

控制項預設使用 GUISetFont 設定的字型。

大小可含小數如：8.5。

某些控制項如標籤，預設大小為 8.5 而不是 9，依 Windows 佈景主題設定決定。

請檢視附錄的完整 Windows 字型清單和各種視窗系統所能支援的字型。

相關

GUICtrlCreate..., GUISetFont

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $font, $msg

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

$font = "Comic Sans MS"
GUICtrlCreateLabel("底線標籤", 10, 20)
GUICtrlSetFont(-1, 9, 400, 4, $font) ; 將顯示底線

GUICtrlCreateLabel("斜體字標籤", 10, 40)
GUICtrlSetFont(-1, 9, 400, 2, $font) ; 將顯示斜體字

GUISetFont(9, 400, 8, $font) ; 將顯示刪除線
GUICtrlCreateLabel("刪除的標籤", 10, 60)

GUISetState() ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetGraphic

函數說明（Function Reference）

GUICtrlSetGraphic

修改指定控制項的相關資料。

GUICtrlSetGraphic ( 控制項ID, 類型 [, 參數1 [, ... 參數6]] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreateGraphic函數返回取得。
類型 | 繪製類型：點、線、貝茲曲線、矩形、橢圓、圓形。
參數1...參數6 | 請檢視：圖片類型表(Graphic Type table) 已在下面列出表格。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。
 | 若遇到無效資料返回 -1。

附註

位置座標 (x,y) 係相對於 GUICtrlCreateGraphic 座標軸，它可以在圖片控制項外部但是須於 GUI 視窗內：

圖片類型表(Graphic Type table)
類型 | 參數 | 結果
$GUI_GR_COLOR | Color [,背景色] | 定義下一個繪製的色彩，當 BkColor 與 $GUI_GR_NOBKCOLOR 繪圖物件相同時無法填色，此為預設值，線條預設為黑色。
$GUI_GR_MOVE | x,y | 不繪製物件移動目前位置。
$GUI_GR_DOT | x,y | 繪製一個點 (圍繞點形成的最小方塊)，下個繪圖物件將於前一個位置開始。
$GUI_GR_PIXEL | x,y | 繪製一個像素，下個繪圖物件將於前一個位置開始。.
$GUI_GR_LINE | x,y | 繪製一條線。
$GUI_GR_BEZIER | x,y,x1,y1,x2,y2 | 繪製一個貝茲曲線，該物件有兩個控制點。
$GUI_GR_RECT | x,y,w,h | 繪製一個矩形方塊，若 w=h (寬高相等)則為正方形。
$GUI_GR_ELLIPSE | x,y,w,h | 繪製一個橢圓，若 w=h (寬高相等)則為圓形。
$GUI_GR_PIE | x,y,r,sa,wa | 繪製一個圓形，半徑=r、起始角(startAngle)=sa、終止角(sweepangle)=wa，角度以度數表示。
$GUI_GR_CLOSE |  | 關閉目前繪製物件，它必須新增到 $GUI_GR_LINE 或 $GUI_GR_BEZIER 其中一個來關閉繪製物件，單獨使用將被忽略。
$GUI_GR_REFRESH |  | 動態更新圖片後強制重新整理。
$GUI_GR_HINT |  | 顯示控制點和貝茲曲線/曲線的結束點。
$GUI_GR_PENSIZE | n | 為下一個繪圖物件設定細線寬度，它必須在 $GUI_GR_COLOR 於帳號內取出前事先定義。
$GUI_GR_NOBKCOLOR |  | 為一個強制關閉繪圖而不能被填滿的 BkColor 虛擬物件，僅能繪製線條。

由於設計上的先天限制，「方塊」、「橢圓」、「圓形」圖片必需為第一個繪製。例如，畫了一個「直線」，它始終都會被「方塊」物件覆蓋掉。若該繪圖指令需要讓圖片突顯出它的重要性，則建議使用數種圖片控制項繪製，別用單一控制項來完成所有圖片繪製工作。

相關

GUICtrlCreateGraphic

範例

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Global $MAXGr = 6, $del, $child
Global $a[$MAXGr + 1] ; 0 和 $MAXGr 項目不允許用 GUICtrlDeleteentries 取得結果

Example()

Func Example()
Local $msg, $inc, $i, $del1

GUICreate("我的主要物件", -1, -1, 100, 100)
$del1 = GUICtrlCreateButton("刪除", 50, 200, 50)
GUISetState()
CreateChild()

$i = 1
$inc = 1
;$i=5 ; 取消註解，從最後一個定義繪圖物件刪除開始部份
;$inc=-1

Do
$msg = GUIGetMsg()
If $msg = $del1 Then $i = Del($inc)

If $msg = $del Then
GUICtrlDelete($a[$i])
$i = $i + $inc
If $i < 0 Or $i > $MAXGr Then Exit
EndIf
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example

Func Del($iInc)
GUIDelete($child)
CreateChild()
If $iInc = -1 Then Return 5
Return 1
EndFunc ;==>Del

Func CreateChild()
$child = GUICreate("我的繪圖物件")
$del = GUICtrlCreateButton("刪除", 50, 165, 50)

$a[1] = GUICtrlCreateGraphic(20, 50, 100, 100)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetColor(-1, 0)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 50, 50, 40, 30, 270)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00ff00, 0xffffff)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 58, 50, 40, -60, 90)

GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, 100, 100, 50, 80)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00ff00, 0xc0c0ff)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 350, 200, 50, 80)
GUICtrlCreateLabel("標籤", 65, 100, 30)
GUICtrlSetColor(-1, 0xff)

$a[2] = GUICtrlCreateGraphic(220, 10, 100, 100)

GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0, 0xff)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 50, 50, 40, 30, 270)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00ff00, 0xffffff)
GUICtrlSetGraphic(-1, $GUI_GR_PIE, 58, 50, 40, -60, 90)

$a[3] = GUICtrlCreateGraphic(220, 110, 100, 100)
GUICtrlSetBkColor(-1, 0xf08080)
GUICtrlSetColor(-1, 0xff)
GUICtrlSetGraphic(-1, $GUI_GR_HINT, 1)

GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff00)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 50, 50, 80, 80)

$a[4] = GUICtrlCreateGraphic(20, 200, 80, 80)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetGraphic(-1, $GUI_GR_HINT, 1)

GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 10, 10)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 30, 40)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff00)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 70, 70)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 10, 50)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xffff00)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 10, 10)

$a[5] = GUICtrlCreateGraphic(150, 10, 50, 50)
GUICtrlSetBkColor(-1, 0xa0ffa0)
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 20, 20) ; 啟始點
; 最好先繪好線條再繪製點
; 避免在每個圖片物件中切換顏色
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x0000ff)
GUICtrlSetGraphic(-1, $GUI_GR_DOT, 30, 30)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 20, 40)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000)
GUICtrlSetGraphic(-1, $GUI_GR_DOT, 25, 25)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 40, 40)
GUICtrlSetGraphic(-1, $GUI_GR_DOT, 30, 40)

$a[6] = GUICtrlCreateGraphic(110, 260, 230, 130)
GUICtrlSetColor(-1, 0) ; 顯示黑色粗體線條
GUICtrlSetBkColor(-1, 0xc0c0ff)
GUICtrlSetGraphic(-1, $GUI_GR_HINT, 3) ; 顯示控制線和結束點

GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0, 0xff); 以藍色填滿
GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 120, 20) ; 開始點
GUICtrlSetGraphic(-1, $GUI_GR_BEZIER, 120, 100, 200, 20, 200, 100)
GUICtrlSetGraphic(-1, $GUI_GR_BEZIER + $GUI_GR_CLOSE, 100, 40, 40, 100, 40, 20)
GUICtrlSetGraphic(-1, $GUI_GR_LINE, 60, 30) ; 開始點

GUISetState()
EndFunc ;==>CreateChild


Function GUICtrlSetImage

函數說明（Function Reference）

GUICtrlSetImage

設定指定控制項的點陣圖或圖示。

GUICtrlSetImage ( 控制項ID, 檔案名稱 [, 圖示名稱 [, 圖示類型]] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
檔案名稱 | 要在控制項上顯示的圖片檔案名稱。
圖示名稱 | [選擇性參數] 內含多個圖示檔案的圖示名稱，若該編號為負值可依照順序設定，其它為 -1。
圖示類型 | [選擇性參數] 選擇指定的圖示大小： 0 = 小、1 = 標準(預設)； 對於 TreeViewItem 項目的圖示大小：2 = 選擇、4 = 無選擇項目。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

使用 [Resource Hacker] 軟體便可以取得檔案內有效的圖示名稱數值。

若用於按鈕控制項則圖片將顯示在按鈕上面，圖片也可以設定用於複選框控制項，只要該物件帶有 $BS_PUSHLIKE 類型就可以。$BS_ICON 或 $BS_BITMAP 類型這兩種情況則須選擇使用的圖片類型，第一種圖示解析度是用於內含多種圖示解析度的檔案，換句話說，若 128x128 是第一種解析度，則控制項是 64x64，該圖片大小將被縮小。

『注意!!!』若是第一次在 TreeViewItem 上使用本指令，則所有其它項目將自動以預設值使用該圖示/圖片！！！
如您是在 TreeView 或 ListViewIf 上使用 GUICtrlSetImage，則它所有項目將會修改該圖示/圖片的設定。

傳遞正值將以該圖示的名稱為字串做關聯。
傳遞負值將導致以基準值-1 做 "索引" 的動作，某些 DLL 檔只要用負值便可以順利將圖示擷取出來。

相關

GUICtrlCreatePic, GUICtrlCreateIcon, GUICtrlCreateButton, GUICtrlCreateCheckbox

範例

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

GUICtrlCreateButton("我的圖片按鈕", 10, 20, 40, 40, $BS_ICON)
GUICtrlSetImage(-1, "shell32.dll", 22)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetLimit

函數說明（Function Reference）

GUICtrlSetLimit

設定某些控制項的字元數或像素限制。

GUICtrlSetLimit ( 控制項ID, 最大值 [, 最小值] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate...函數返回取得。
最大值 | 對於 List 控制項，係表示能水平捲動延伸的最大像素長度。 對於 Input/Edit 控制項，係表示能輸入的最大字元數量。
最小值 | [選擇性參數] 對於 Slider 和 UpDown 控制項，您可以指定最小值，預設值 = 0。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

GUICtrlCreateList, GUICtrlCreateInput, GUICtrlCreateEdit

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的視窗限制只能輸入 3 個字元") ; 將建立一個置中顯示的對話框

GUICtrlCreateInput("", 10, 20)
GUICtrlSetLimit(-1, 3) ; 限制只能輸入 3 個字元

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetOnEvent

函數說明（Function Reference）

GUICtrlSetOnEvent

為指定控制項的點選行為定義一個功能函數。

GUICtrlSetOnEvent ( 控制項ID, "函數" )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
函數 | 呼叫的使用者函數名稱。

返回值

成功： | 返回由 SendMessage Windows API 傳送的返回值。
失敗： | 返回值 0。

附註

OnEvent 函數僅當選項 GUIOnEventMode 設定為 1 時才能被呼叫 - 在此模式下 GUIGetMsg 將完全無效。

在被呼叫的使用者函數範圍內，可由巨集@GUI_CTRLID 取得控制識別碼。
如有需要則 windows 控制碼和物件控制碼可分別由 @GUI_WINHANDLE 或 @GUI_CTRLHANDLE 取得。

如該函數為一個空白字串 ""，則關閉前一個使用者定義的項目。

相關

GUICreate, GUICtrlCreate..., GUIGetMsg, GUIOnEventMode (Option), GUISetOnEvent

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $parent1, $ok1, $cancel1

Opt("GUICoordMode", 2)
Opt("GUIResizeMode", 1)
Opt("GUIOnEventMode", 1)

$parent1 = GUICreate("主視窗 1")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")

$ok1 = GUICtrlCreateButton("確定", 10, 30, 50)
GUICtrlSetOnEvent(-1, "OKPressed")

$cancel1 = GUICtrlCreateButton("取消", 0, -1)
GUICtrlSetOnEvent(-1, "CancelPressed")

GUISetState(@SW_SHOW)

; 閒置大約一段時間
While 1
Sleep(10)
WEnd

EndFunc ;==>範例

Func OKPressed()
MsgBox(0, "已按下確定", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
EndFunc ;==>OKPressed

Func CancelPressed()
MsgBox(0, "已按下取消", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
EndFunc ;==>CancelPressed

Func SpecialEvents()
Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
MsgBox(0, "已按下關閉", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle)
Exit

Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
MsgBox(0, "最小化視窗", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle)

Case @GUI_CtrlId = $GUI_EVENT_RESTORE
MsgBox(0, "已還原視窗", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle)

EndSelect
EndFunc ;==>SpecialEvents


Function GUICtrlSetPos

函數說明（Function Reference）

GUICtrlSetPos

調整某個控制項在視窗中的座標位置。

GUICtrlSetPos ( 控制項ID, 左方, 上方 [, 寬度 [, 高度]] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
左方 | 控制項左方。
上方 | 控制項上方。
寬度 | [選擇性參數] 控制項寬度。
高度 | [選擇性參數] 控制項高度。

返回值

成功： | 返回由 SendMessage Windows API 傳送的返回值。
失敗： | 返回值 0。

附註

無。

相關

GUICtrlCreate...

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $right, $label, $button, $msg

GUICreate("我的視窗位置") ; 將建立一個置中顯示的對話框

$right = 0
$label = GUICtrlCreateLabel("我的移動標籤", 10, 20)

$button = GUICtrlCreateButton("選此關閉", 50, 50)
GUICtrlSetState(-1, $GUI_FOCUS) ; 將焦點置於按鈕上

GUISetState()

While 1
$msg = GUIGetMsg()

If $msg = $button Or $msg = $GUI_EVENT_CLOSE Then Exit
If $right = 0 Then
$right = 1
GUICtrlSetPos($label, 20, 20)
Else
$right = 0
GUICtrlSetPos($label, 10, 20)
EndIf
Sleep(100)
WEnd
EndFunc ;==>Example


Function GUICtrlSetResizing

函數說明（Function Reference）

GUICtrlSetResizing

設定某個控制項的大小調整模式。

GUICtrlSetResizing ( 控制項ID, 重設大小 )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
重設大小 | 請檢視：停駐數值表(Docking Values table) 下表已列出可用數值 (如需要不同數值可相加)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

當 GUI 視窗被調整大小時，其所屬控制項也會有對應變化 - 至於如何變化則是由此函數決定的。要使某個 GUI 視窗可調整大小，必須建立帶 $WS_SIZEBOX 和 $WS_SYSMENU 的類型，請檢視：GUICreate：

停駐數值表(Docking Values table)
調整大小 | 數值 | 停駐位置
$GUI_DOCKAUTO | 1 | 重設大小並依照新視窗大小重新調整位置。
$GUI_DOCKLEFT | 2 | 左邊。
$GUI_DOCKRIGHT | 4 | 右邊。
$GUI_DOCKHCENTER | 8 | 該位置將保持水平置中。
$GUI_DOCKTOP | 32 | >上面。
$GUI_DOCKBOTTOM | 64 | >下面。
$GUI_DOCKVCENTER | 128 | 該位置將保持垂直置中。
$GUI_DOCKWIDTH | 256 | 不變更寬度。
$GUI_DOCKHEIGHT | 512 | 不變更高度。
 |  | 混合調整大小。
$GUI_DOCKSIZE | 768 | (256+512) 不變更大小。
$GUI_DOCKMENUBAR | 544 | (512+32) 該控制項將開啟在視窗上方並保持高度不變。
$GUI_DOCKSTATEBAR | 576 | (512+64) 該控制項將開啟在視窗下方並保持高度不變。
$GUI_DOCKALL | 802 | (2+32+256+512) 該控制項在調整大小時不能移動。
$GUI_DOCKBORDERS | 102 | (2+4+32+64) 該控制項會隨視窗自行調整大小。

提供控制項的預設控制大小數值，依該物件而定。
任何控制項的預設值，都可以用 GUIResizeMode (選項) 設定。

如 GUIEventOptions (選項) 設為 1，則可關閉自動調整大小的功能。

相關

GUIEventOptions (Option),GUIResizeMode (Option)

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $nEdit, $nOk, $nCancel, $msg

Opt("GUICoordMode", 2)
GUICreate("我的輸入框", 190, 114, -1, -1, $WS_SIZEBOX + $WS_SYSMENU) ; 開始定義
GUISetIcon("Eiffel Tower.ico")

GUISetFont(10, -1, "新細明體")

GUICtrlCreateLabel("提示", 8, 7) ; 新增提示資訊
GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP)

$nEdit = GUICtrlCreateInput("預設值", -1, 3, 175, 20, $ES_PASSWORD) ; 新增輸入區
GUICtrlSetState($nEdit, $GUI_FOCUS)
GUICtrlSetResizing($nEdit, $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)

$nOk = GUICtrlCreateButton("確定", -1, 3, 75, 24) ; 新增可以關閉視窗的按鈕
GUICtrlSetResizing($nOk, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)

$nCancel = GUICtrlCreateButton("關閉取消", 25, -1) ; 新增可以關閉視窗的按鈕
GUICtrlSetResizing($nCancel, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)

GUISetState() ; 顯示視窗

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetState

函數說明（Function Reference）

GUICtrlSetState

調整指定控制項的狀態。

GUICtrlSetState ( 控制項ID, 狀態 )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate...函數返回取得。
狀態 | 請檢視：狀態表( State table) 下方所示。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

狀態表( State table)
狀態 | 註解
不變更 | 0
$GUI_UNCHECKED | 取消點選：單選框(Radio)、複選框(Checkbox)、檢視清單項目(ListViewItem)。
$GUI_CHECKED | 點選：單選框(Radio)、複選框(Checkbox)、檢視清單項目(ListViewItem)。
$GUI_INDETERMINATE | 具有三種狀態屬性的複選框(Checkbox)將變灰色不可使用。
$GUI_AVISTART | Avi 控制項開始播放。
$GUI_AVISTOP | Avi 控制項停止播放。
$GUI_AVICLOSE | Avi 控制項將停止播放並釋放資源。
$GUI_DROPACCEPTED | 控制項允許拖曳動作：從檔案或自其它控制項拖曳，請見附註。
$GUI_NODROPACCEPTED | 控制項不允許拖曳動作。
$GUI_SHOW | 控制項將為可見，籤頁項(Tabitem) 將選擇第一個籤頁讓它顯示出來。
$GUI_HIDE | 控制項將不可見。
$GUI_ENABLE | 控制項將被開啟。
$GUI_DISABLE | 控制項將變灰色禁用狀態。
$GUI_FOCUS | 控制項將被提供輸入/選擇焦點。
$GUI_NOFOCUS | 檢視清單(Listview)控制項將失去焦點。
$GUI_DEFBUTTON | 控制項將被設定為 window 的預設按鈕，請見附註關於 TreeviewItems 部份。
$GUI_EXPAND | 樹狀檢視項目(TreeViewItem) 將展開它的子項目。
$GUI_ONTOP | 控制項將擁有一個 window 置頂屬性 (zOrdering)。

狀態值可以加起來使用，像範例中的 $GUI_DISABLE + $GUI_HIDE 設定控制項變為禁用並為隱藏狀態。

若該 AVI 控制項被 $GUI_HIDE 隱藏，可以用 $GUI_AVICLOSE 關閉。

"內容選單" 控制項的狀態 是無法修改的 。
若 "檢視清單(Listview)" 相關控制項已用進階類型 $LVS_EX_CHECKBOXES 建立，則 "檢視清單項目(ListviewItem)" 控制項的狀態可以修改。$GUI_FOCUS 和 $GUI_NOFOCUS 它可以用來指定檢視清單項目(ListviewItem) 所提供的檢視清單(Listview)控制項類型，並允許顯示項目：$LVS_SHOWSELALWAYS。
"選單(menu)" 或一個 "選單項目(menuitem)" 控制項的狀態 是無法隱藏的。

關於 $GUI_EXPAND 的重要訊息！==>> 此狀態只能用在樹狀檢視項目(TreeViewItem)，若您要使用此「動作」則要至少 1 個 - 子樹狀檢視項目(TreeViewItem)，且它是已存在/建立在此物件上！
若您要選擇樹狀檢視(TreeView)的其它項目，您可用 $GUI_FOCUS - 主樹狀檢視(TreeView) 取得該視窗焦點並指定已選取的標記項目。
如您要設定一個樹狀檢視(TreeView)，則定義為預設物件表示將它繪製出來讓您可以使用 $GUI_DEFBUTTON - 要關閉它，只要使用其它數值除了 $GUI_DEFBUTTON 外，例如：0。此狀態將不會由 GUICtrlGetState 返回。

若在 $GUI_DROPACCEPTED 設定了一個變數控制，使之在帳戶內取得其拖曳功能。該編輯/輸入控制項將會以檔案名稱設定之。
關於其它控制項接收 $GUI_EVENT_DROPPED, @GUI_DRAGID 的情況，它將返回開啟拖曳功能所在的控制項ID (若來自檔案為 -1，@GUI_DRAGFILE 則內含被拖曳的檔案名稱) 和 @GUI_DROPID，後者為返回被拖曳控制項的控制項ID。
只有拖曳檢視清單項目(ListviewItem) 可以開啟拖曳程序，@GUI_DRAGID 則為 ListView 的控制項ID。

相關

ColorMode (Option), GUICtrlCreate..., GUICtrlSetData

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的視窗狀態") ; 將建立一個置中顯示的對話框

GUICtrlCreateLabel("我的禁用標籤", 10, 20)
GUICtrlSetState(-1, $GUI_DISABLE) ; 該標籤為禁用狀態

GUICtrlCreateButton("我的按鈕", 50, 50)
GUICtrlSetState(-1, $GUI_FOCUS) ; 焦點置於按鈕上

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetStyle

函數說明（Function Reference）

GUICtrlSetStyle

變更指定控制項的類型。

GUICtrlSetStyle ( 控制項ID, 類型(style) [, 進階類型(exStyle)] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型。
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視：進階類型清單。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

某些類型不能隨時動態更新，請檢視 MSDN 文件說明。$CBS_UPPERCASE 下拉式選單類型 (combo) 就是一個範例。

相關

GUICtrlCreate...

範例

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的視窗類型") ; 將建立一個置中顯示的對話框

GUICtrlCreateLabel("我的標籤將被分隔成數行", 10, 20, 100, 100)
GUICtrlSetStyle(-1, $SS_RIGHT)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUICtrlSetTip

函數說明（Function Reference）

GUICtrlSetTip

定義指定控制項的相關提示文字。

GUICtrlSetTip ( 控制項ID, 提示文字 [, "標題" [, 圖示 [, 選項]]]]] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
提示文字 | 當滑鼠游標在控制項上空駐留時將自動提示文字。
標題 | [選擇性參數] 工具提示的標題 (需要 IE5+ 的支援)。
圖示 | [選擇性參數] 事先定義要顯示在下個標題的圖示：(需要 IE5+ 的支援) 必須有標題欄： 0 = 無圖示, 1 = 訊息圖示, 2 = 警告圖示, 3 = 錯誤圖示
選項 | [選擇性參數] 設定不同選項以決定要如何顯示工具提示 (可以相加)： 1 = 顯示水球通知提示 (需要 IE5+ 的支援) 2 = 獨立於控制項的置中水平提示

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

提示文字會在工具提示的矩形區域中顯示。
要略過選擇性參數，請保留它的原始預設內容，用預設關鍵字即可。
您可能須使用 @CR 或 @LF 建立多行工具提示。
標題、圖示、水球通知提示選項全都須要 Internet Explorer 5.0 或更新版本的支援方有作用。
要顯示圖示，您須指定一個非空白的標題，該圖示將顯示在標題欄位上，所以必須有一個主視窗做為標題。

相關

GUICtrlSet..., Default

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的視窗控制項提示") ; 將建立一個置中顯示的對話框

GUICtrlCreateLabel("我的標籤", 10, 20)
GUICtrlSetTip(-1, "標籤提示")

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


GUI 更新函數清單

GUI 更新函數清單 (GUI update Function Reference)

下面列出的是 AutoIt 的所有 GUI 更新函數，點選函數名稱即可檢視詳細說明：

函數 | 詳細說明
GUISetBkColor | 設定視窗的背景顏色。
GUISetCoord | 設定下一個控制項的絕對座標值。
GUISetCursor | 設定 (滑鼠經由視窗時的) 滑鼠游標。
GUISetFont | 設定視窗的預設字型。
GUISetHelp | 設定在使用者按下F1時就開啟的 (可執行) 檔案。
GUISetIcon | 設定用在視窗 (標題欄上顯示) 的圖示。
GUISetState | 調整視窗的狀態。
GUISetStyle | 調整視窗的類型。


Function GUISetAccelerators

函數說明（Function Reference）

GUISetAccelerators

設定一個用於 GUI 視窗的加速參數表。

GUISetAccelerators ( 加速參數 [, 視窗控制碼] )

參數

加速參數 | 一個擁有加速參數表的 2D 群組 (請見附註)。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

傳遞到此函數的群組內含快速鍵和加速器的控制項 ID，該群組必須定義為 Dim $array[n][2] - 表示設定的快速鍵編號：

$array[0][0] = 第一個加速器的快速鍵 (為 HotKeySet() 格式)
$array[0][1] = 第一個加速器的控制項 ID，由 GUICtrlCreate...() 返回取得
$array[1][0] = 第二個加速器的快速鍵
$array[1][1] = 第二個加速器的控制項 ID
...
$array[n][0] = 第 N 個加速器的快速鍵
$array[n][1] = 第 N 個加速器的控制項 ID

若傳遞到此函數的不是一個群組，則將重設所有加速器的視窗控制碼(winhandle)。

相關

GUICreate, HotKeySet

範例

; 一個使用 MessageLoop 模式的簡單自訂訊息框範本

#include <GUIConstantsEx.au3>

GUICreate("自訂訊息框", 210, 80)

GUICtrlCreateLabel("請按下按鈕！", 10, 10)
$YesID = GUICtrlCreateButton("是的", 10, 50, 50, 20)
$NoID = GUICtrlCreateButton("不", 80, 50, 50, 20)
$ExitID = GUICtrlCreateButton("結束", 150, 50, 50, 20)

; 設定加速器對應 Ctrl+y 及 Ctrl+n
Dim $AccelKeys[2][2]=[["^y", $YesID], ["^n", $NoID]]
GUISetAccelerators($AccelKeys)

GUISetState() ; 顯示視窗

Do
$msg = GUIGetMsg()

Select
Case $msg = $YesID
MsgBox(0, "您已按下", "是的")
Case $msg = $NoID
MsgBox(0, "您已按下", "不")
Case $msg = $ExitID
MsgBox(0, "您已按下", "結束")
Case $msg = $GUI_EVENT_CLOSE
MsgBox(0, "您已按下", "關閉")
EndSelect
Until $msg = $GUI_EVENT_CLOSE Or $msg = $ExitID


Function GUISetBkColor

函數說明（Function Reference）

GUISetBkColor

設定視窗的背景顏色。

GUISetBkColor ( 背景色彩 [, 視窗控制碼] )

參數

背景色彩 | 對話框的背景色彩。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

較早期的 AutoIt 版本 (v3.0.102 之前) 使用 BGR 模式來定義顏色 - 較新的版本則預設使用 RGB 模式，不過還是可以用 ColorMode 選項來切換使用的模式。

相關

ColorMode (Option), GUICreate

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

GUISetBkColor(0xE0FFFF) ; 將變更背景色彩

GUISetState() ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUISetCoord

函數說明（Function Reference）

GUISetCoord

設定下一個控制項的絕對座標值。

GUISetCoord ( 左方, 上方 [, 寬度 [, 高度 [, 視窗控制碼]]] )

參數

左方 | 控制項左方。
上方 | 控制項上方。
寬度 | [選擇性參數] 控制項寬度 (預設為前一次使用的寬度)。
高度 | [選擇性參數] 控制項高度 (預設為前一次使用的高度)。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

此函數可以特別用在 Opt ("GUICoordMode", 2)，它允許您以較高的精確度設定目前位置，並且自該位置建立一個以行為基準 (x_offset,-1) 或以列為基準 (-1, y_offset) 的控制項。

相關

GUICtrlCreate...

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

Opt("GUICoordMode", 2) ; 相對於格線模式

GUICreate("我的視窗座標", 200, 100)
GUICtrlCreateCheckbox("選擇 #1", 20, 10, 75)
GUICtrlCreateCheckbox("通知 #2", 10, -1) ; 該行下一格

GUISetCoord(20, 60)

GUICtrlCreateButton("確定 #3", -1, -1)
GUICtrlCreateButton("取消 #4", 10, -1)
GUICtrlSetState(-1, $GUI_FOCUS)

GUISetState() ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUISetCursor

函數說明（Function Reference）

GUISetCursor

設定 (滑鼠經由視窗時的) 滑鼠游標。

GUISetCursor ( [游標ID [, 覆寫值 [, 視窗控制碼]]] )

參數

游標ID | [選擇性參數] 游標 ID (請見附註)。
覆寫值 | [選擇性參數] 強制設定滑鼠游標圖示，即使經過控制項亦然(請見下方)： 0 = 不覆蓋控制項預設的滑鼠游標 (預設) 1= 覆蓋控制項預設的滑鼠游標
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

若設定的指標ID無效，則使用預設的標準箭頭滑鼠游標。

通常上當我們把滑鼠游標移到一個編輯框或其它控制項上面時，游標形狀就會出現變化。"覆寫值" 選項允許讓我們將滑鼠游標強制設為希望出現的樣式。注意：若您曾使用 GUICtrlSetCursor 修改過某個控制項的游標，則在滑鼠經過該控制項時將永遠以預設游標為主。

關於有效的游標 ID 清單請檢視：MouseGetCursor。
游標ID = 16：則將隱藏滑鼠游標。

相關

GUICtrlSetCursor

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Global $IDC = -1, $newIDC = 0

Example()

Func Example()

HotKeySet("{Esc}", "Increment")

GUICreate("按 Esc 鍵增加數值切換游標", 400, 400, 0, 0, 0x04CF0000, 0x00000110)

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
If $newIDC <> $IDC Then
$IDC = $newIDC
GUISetCursor($IDC)
EndIf
ToolTip("視窗游標 #：" & $IDC)
WEnd
EndFunc ;==>Example

Func Increment()
$newIDC = $IDC + 1
If $newIDC > 15 Then $newIDC = 0
EndFunc ;==>Increment


Function GUISetFont

函數說明（Function Reference）

GUISetFont

設定視窗的預設字型。

GUISetFont (大小 [, 高度 [, 屬性 [, 字型名稱 [, 視窗控制碼]]]] )

參數

大小 | 字型大小 (預設為 8.5)。
高度 | [選擇性參數] 字型高度 (預設 400 = 標準)。
屬性 | [選擇性參數] 設定字型格式 斜體：2 底線：4 刪除線：8 (可依需要把字型數值相加，如： 2+4 = 斜體、底線)。
字型名稱 | [選擇性參數] 使用的字型 (若字形為 "" 或未找到則使用預設的系統字型)。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

請檢視附錄的完整 Windows 字型清單和各種視窗系統所能支援的字型。

大小可含小數如：8.5。

某些控制項如標籤，預設大小為 8.5 而不是 9，依 Windows 佈景主題設定決定。

相關

GUICtrlSetFont

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $font, $msg

GUICreate("我的視窗預設字型") ; 將建立一個置中顯示的對話框

$font = "Comic Sans MS"
GUISetFont(9, 400, 4, $font) ; 將顯示底線
GUICtrlCreateLabel("底線標籤", 10, 20)

GUISetFont(9, 400, 2, $font) ; 將顯示斜體字
GUICtrlCreateLabel("斜體字標籤", 10, 40)

GUISetFont(9, 400, 8, $font) ; 將顯示刪除線
GUICtrlCreateLabel("刪除的標籤", 10, 60)

GUISetState()

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUISetHelp

函數說明（Function Reference）

GUISetHelp

設定在使用者按下F1時就開啟的 (可執行) 檔案。

GUISetHelp ( 說明檔 [, 視窗控制碼] )

參數

說明檔 | 當視窗為活動狀態時按下 F1 時就可開啟的檔案。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

GUICreate

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

GUISetHelp("notepad") ; 按下 F1 將執行記事本

GUISetState() ; 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUISetIcon

函數說明（Function Reference）

GUISetIcon

設定用在視窗 (標題欄上顯示) 的圖示。

GUISetIcon ( 圖示檔 [, 圖示ID [, 視窗控制碼]] )

參數

圖示檔 | 使用來顯示在標題欄的圖示。
圖示ID | [選擇性參數] 圖示檔案內的圖示 ID (預設為 -1)。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

依 + 編號順序排列可參照到與圖示名稱相同的字串。
依 - 編號順序排列就會出現以 1 為基準值的 "索引" 動作，某些 DLL 檔含有可擷取的圖示，這類就正好就是負值編號。

相關

GUICreate

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $sFile = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\icons\filetype1.ico"
Local $msg

GUICreate("我的視窗新圖示") ; 將建立一個置中顯示的對話框

GUISetIcon($sFile) ; 將變更圖示

GUISetState(); 將顯示一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUISetOnEvent

函數說明（Function Reference）

GUISetOnEvent

定義一個當系統按鈕被點選時，欲呼叫的使用者函數。

GUISetOnEvent ( 特別事件ID, "函數" [, 視窗控制碼] )

參數

特別事件ID | 請見下方的：特別事件ID表(Special ID table)。
函數 | 要呼叫的使用者函數名稱。
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

OnEvent 函數僅當選項 GUIOnEventMode 的值設定為 1 時才能被呼叫 - 在此模式下 GUIGetMsg 將「完全無效」。

若選項 GUIEventOptions 設為 1 最小化、還原、和最大化按鈕，它們將不會在視窗上產生作用，只具備簡單的通知功能。.

若函數為一個空白字串 "" 則前一個使用者定義的視窗將被禁止使用。

特別事件ID表(Special ID table)
特別事件ID | 註解
$GUI_EVENT_CLOSE | 正在關閉對話框 (從預設按鈕或系統選單選取)。
$GUI_EVENT_MINIMIZE | 經由視窗標題欄按鈕最小化對話框。
$GUI_EVENT_RESTORE | 經由點選工作列圖示還原對話框。
$GUI_EVENT_MAXIMIZE | 經由視窗標題欄按鈕最大化對話框。
$GUI_EVENT_MOUSEMOVE | 移動滑鼠游標。
$GUI_EVENT_PRIMARYDOWN | 按下主要滑鼠按鈕。
$GUI_EVENT_PRIMARYUP | 放開主要滑鼠按鈕。
$GUI_EVENT_SECONDARYDOWN | 按下次要滑鼠按鈕。
$GUI_EVENT_SECONDARYUP | 放開次要滑鼠按鈕。
$GUI_EVENT_RESIZED | 調整對話框大小。
$GUI_EVENT_DROPPED | 即時拖曳動作結尾的 @GUI_DRAGID, @GUI_DRAGFILE 和 @GUI_DROPID 將被用於取得跟 ID/檔案 完全符合的相關控制項。

相關

GUIOnEventMode (Option), GUIEventOptions (Option), GUICtrlSetOnEvent

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $parent1, $ok1, $cancel1

Opt("GUICoordMode", 2)
Opt("GUIResizeMode", 1)
Opt("GUIOnEventMode", 1)

$parent1 = GUICreate("主視窗1")
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")

$ok1 = GUICtrlCreateButton("確定", 10, 30, 50)
GUICtrlSetOnEvent(-1, "OKPressed")

$cancel1 = GUICtrlCreateButton("取消", 0, -1)
GUICtrlSetOnEvent(-1, "CancelPressed")

GUISetState(@SW_SHOW)

; 只閒置一段時間
While 1
Sleep(10)
WEnd
EndFunc ;==>Example

Func OKPressed()
MsgBox(0, "已按下確定", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
EndFunc ;==>OKPressed

Func CancelPressed()
MsgBox(0, "已按下取消", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
EndFunc ;==>CancelPressed

Func SpecialEvents()

Select
Case @GUI_CtrlId = $GUI_EVENT_CLOSE
MsgBox(0, "已按下取消", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle)
Exit

Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
MsgBox(0, "最小化視窗", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle)

Case @GUI_CtrlId = $GUI_EVENT_RESTORE
MsgBox(0, "已還原視窗", "ID=" & @GUI_CtrlId & " 視窗控制碼=" & @GUI_WinHandle)

EndSelect

EndFunc ;==>SpecialEvents


Function GUISetState

函數說明（Function Reference）

GUISetState

調整視窗的狀態。

GUISetState ( [旗標 [, 視窗控制碼]] )

參數

旗標 | [選擇性參數] @SW_SHOW = 將先前隱藏的視窗顯示出來 (預設) @SW_HIDE = 隱藏視窗 @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗 @SW_RESTORE = 還原最小化視窗 @SW_DISABLE = 關閉視窗禁止使用 @SW_ENABLE = 開啟視窗 @SW_LOCK = 鎖定視窗避免重繪 @SW_UNLOCK = 解鎖視窗允許重繪
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

視窗建立後是處於隱藏狀態的，所以您必須使用此函數讓它們顯示出來 (@SW_SHOW)。

@SW_LOCK 只能鎖定一個視窗，其它視窗將照須要鎖定其中一個。
@SW_UNLOCK 會跳過 "視窗控制碼" 解除鎖定視窗。

相關

GUICreate

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 視窗") ; 初始化開始

GUISetState() ; 將顯示空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example


Function GUISetStyle

函數說明（Function Reference）

GUISetStyle

調整視窗的類型。

GUISetStyle ( 類型(style) [, 進階類型(exStyle) [, 視窗控制碼]] )

參數

類型(style) | [選擇性參數] 設定控制項類型，請檢視：附註：GUI 控制項類型： 使用 -1 保留不變更
進階類型(exStyle) | [選擇性參數] 設定控制項的進階類型，請檢視下方的：進階類型清單，-1 是預設值： 使用 -1 保留不變更
視窗控制碼 | [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

類型數值不會進行檢查動作，即使是已定義控制項亦然。這是設計者為了顧及相容性而這麼做的。

相關

GUICreate, GUIGetStyle

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $NewStyle = False, $hWnd, $Style, $Msg

$hWnd = GUICreate("視窗類型", 260, 100)
$Style = GUICtrlCreateButton("設定類型", 45, 50, 150, 20)
GUISetState()

While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $Style
If Not $NewStyle Then
GUISetStyle(BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), BitOR($WS_EX_CLIENTEDGE, $WS_EX_TOOLWINDOW))
GUICtrlSetData($Style, '還原類型')
$NewStyle = True
Else
GUISetStyle(BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU), 0)
GUICtrlSetData($Style, '設定類型')
$NewStyle = False
EndIf
Case Else
EndSwitch
WEnd
EndFunc ;==>Example


Function GUIDelete

函數說明（Function Reference）

GUIDelete

銷毀指定視窗及其所有控制項 (在記憶體佔用的空間)。

GUIDelete ( [視窗控制碼] )

參數

視窗控制碼 [選擇性參數] 由 GUICreate 返回的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

GUICreate

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $msg

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

GUISetState() ; 將顯示空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

GUIDelete(); ; 將返回 1
EndFunc ;==>Example


Function GUICtrlGetHandle

函數說明（Function Reference）

GUICtrlGetHandle

返回指定控制項的控制碼及某些特殊控制碼 (Menu, ContextMenu, TreeViewItem)。

GUICtrlGetHandle ( 控制項ID )

參數

控制項ID 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。

返回值

成功： | 返回提供控制項 ID 的控制碼。
失敗： | 返回值 0。

附註

『注意! 』不支援：Dummy, Graphic, Object, ListViewItem 和 TabItem！

ListViewItems 和 TabItems 都是利用索引項目管理。
要取得這些項目的索引請使用：DllCall() 和 DllStructCreate()。

相關

GUICtrlRead, GUICtrlGetState, IsHWnd

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $hGui, $FileMenu, $OpenItem, $SaveItem, $OptionsMenu
Local $ViewItem, $ToolsItem, $ExitItem, $HelpMenu, $AboutItem
Local $EndBtn, $Msg

$hGui = GUICreate("我的 GUI 視窗", 300, 200)

$FileMenu = GUICtrlCreateMenu("檔案(&F)")
$OpenItem = GUICtrlCreateMenuItem("開啟(&O)", $FileMenu)
$SaveItem = GUICtrlCreateMenuItem("儲存(&S)", $FileMenu)
GUICtrlCreateMenuItem("", $FileMenu)

$OptionsMenu = GUICtrlCreateMenu("選項(&P)", $FileMenu)
$ViewItem = GUICtrlCreateMenuItem("檢視", $OptionsMenu)
GUICtrlCreateMenuItem("", $OptionsMenu)
$ToolsItem = GUICtrlCreateMenuItem("工具", $OptionsMenu)

GUICtrlCreateMenuItem("", $FileMenu)
$ExitItem = GUICtrlCreateMenuItem("結束(&E)", $FileMenu)

$HelpMenu = GUICtrlCreateMenu("&?")
$AboutItem = GUICtrlCreateMenuItem("關於(&A)", $HelpMenu)

$EndBtn = GUICtrlCreateButton("結束", 110, 140, 70, 20)

SetMenuColor($FileMenu, 0xEEBB99) ; BGR 色域值
SetMenuColor($OptionsMenu, 0x66BB99); BGR 色域值
SetMenuColor($HelpMenu, 0x99BBEE) ; BGR 色域值

GUISetState()

While 1
$Msg = GUIGetMsg()

Switch $Msg
Case $ExitItem, $EndBtn, $GUI_EVENT_CLOSE
ExitLoop

Case $AboutItem
MsgBox(64, "關於...", "彩色選單範例")
EndSwitch
WEnd
EndFunc ;==>Example

; 將色彩套用到選單
Func SetMenuColor($nMenuID, $nColor)
Local $hMenu, $hBrush, $stMenuInfo
Local Const $MIM_APPLYTOSUBMENUS = 0x80000000
Local Const $MIM_BACKGROUND = 0x00000002

$hMenu = GUICtrlGetHandle($nMenuID)

$hBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $nColor)
$hBrush = $hBrush[0]

$stMenuInfo = DllStructCreate("dword;dword;dword;uint;dword;dword;ptr")
DllStructSetData($stMenuInfo, 1, DllStructGetSize($stMenuInfo))
DllStructSetData($stMenuInfo, 2, BitOR($MIM_APPLYTOSUBMENUS, $MIM_BACKGROUND))
DllStructSetData($stMenuInfo, 5, $hBrush)

DllCall("user32.dll", "int", "SetMenuInfo", "hwnd", $hMenu, "ptr", DllStructGetPtr($stMenuInfo))

; 因為是本地端，故沒有解除結構的需要
$stMenuInfo = 0
EndFunc ;==>SetMenuColor


Function GUICtrlGetState

函數說明（Function Reference）

GUICtrlGetState

取得指定控制項的當前狀態。

GUICtrlGetState ( [控制項ID] )

參數

控制項ID [選擇性參數] 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。

返回值

成功： | 返回狀態，請檢視：GUICtrlSetState 關於數值的說明。
失敗： | 若控制項未定義返回 -1。

附註

若是相對函數 GUICtrlRead 的話此函數將 「只返回」開啟/關閉/隱藏/顯示/允許即時拖曳 控制視窗的狀態。

例外：
關於 ListView 控制項，則返回選擇欄位的編號。

相關

GUICtrlRead, GUICtrlSetState

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $n, $msg

GUICreate("我的 GUI 視窗 (取得控制項狀態)")
$n = GUICtrlCreateCheckbox("選擇框", 10, 10)
GUICtrlSetState(-1, 1) ; 已選取

GUISetState() ; 將建立一個空白對話框

; 執行 GUI 視窗直到對話框關閉
While 1
$msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

MsgBox(0, "狀態", StringFormat("GUICtrlRead=%d\nGUICtrlGetState=%d", GUICtrlRead($n), GUICtrlGetState($n)))
EndFunc ;==>Example


Function GUICtrlRead

函數說明（Function Reference）

GUICtrlRead

讀取指定控制項的狀態或資料。

GUICtrlRead ( 控制項ID [, 進階參數] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
進階參數 | [選擇性參數] 返回控制項的進階資訊： 0 = 返回一個控制項的日期或狀態數值 (預設) 1 = 返回控制項的進階資訊 (請見附註)

返回值

成功： | 依控制項類型返回 (請見下表)：
失敗： | 返回值 0。
類型 | 數值
Checkbox, Radio (複選框,單選框) | 按鈕的狀態，請見狀態表。
Combo, List (下拉式選單控制項,清單框) | 選取的數值。
Input, Edit (輸入框,編輯框) | 輸入的文字。
Button (按鈕) | 顯示的文字。
Date (日期) | 選擇的日期。
Progress (進度列) | 目前百分比。
Slider (滑動軸) | 目前數值。
Tab (籤頁) | 籤頁編號或選擇籤頁的控制項ID，依進階參數值而定。
Menu, MenuItem (選單,選單項目) | 選單/項目的狀態，請見狀態表。
TreeView (樹狀檢視) | 選擇的樹狀檢視項(TreeViewItem)控制識別碼 (控制項ID)。
TreeViewItem (樹狀檢視項目) | TreeViewItem 的狀態。
ListView (檢視清單) | 選擇的樹狀檢視項(TreeViewItem)控制識別碼 (控制項ID)，0 表示無選擇項目。
Dummy (虛擬控制項) | 數值設定由 GUICtrlSendToDummy 或 GUICtrlSetData 決定。

附註

在 '進階模式' 中返回的值內含控制項的額外資料 (請見下表)：

請注意：不是所有已知控制項都會在此清單上！

類型 | 額外數值
Checkbox, Radio (複選框,單選框) | 控制項文字。
Menu, MenuItem (選單,選單項目) | 控制項文字。
TreeView (樹狀檢視) | 目前選擇的 TreeViewItem 文字。
TreeViewItem (樹狀檢視項目) | TreeViewItem 的文字。
ListViewItem (檢視清單項目) | 若 $LVS_EX_CHECKBOXES 進階類型已被使用於進階模式中，則為 ListViewItem 的狀態，請見狀態表。
Tab (籤頁) | 選擇的籤頁項目控制項ID。

對於 Checkbox, Radio 控制項的數種狀態可以由 $GUI_FOCUS 和 $GUI_CHECKED 返回取得。若該項目已選擇，則使用如右方式進行測試：BitAnd(GUICtrlRead($Item),$GUI_CHECKED)。

對於 Listview 控制項的數種狀態可以由 $GUI_CHECKED 和 $GUI_UNCHECKED 返回取得 (僅對帶 LVS_EX_CHECKBOXES-exstyle 類型的 listview 控制項並以 '進階模式' 返回)。若該項目已選擇，則使用如右方式進行測試：BitAnd(GUICtrlRead($Item),$GUI_CHECKED)。

對於 Treeview 控制項的數種狀態可以由 $GUI_FOCUS, $GUI_EXPAND 和 $GUI_CHECKED, $GUI_UNCHECKED 返回取得 (僅對帶 TVS_CHECKBOXES 類型的 listview 控制項)。若該項目已選擇，則使用如右方式進行測試：BitAnd(GUICtrlRead($Item),$GUI_CHECKED)。

相關

GUICtrlSet..., GUIGetMsg, GUIEventOptions (Option)

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $menu1, $n1, $n2, $msg, $menustate, $menutext

GUICreate("我的 GUICtrlRead 物件") ; 將建立一個置中顯示的對話框

$menu1 = GUICtrlCreateMenu("檔案")

$n1 = GUICtrlCreateList("", 10, 10, -1, 100)
GUICtrlSetData(-1, "項目1|項目2|項目3", "項目2")

$n2 = GUICtrlCreateButton("讀取！", 10, 110, 50)
GUICtrlSetState(-1, $GUI_FOCUS) ; 焦點將在此按鈕上

GUISetState() ; 將顯示一個空白對話框
; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
If $msg = $n2 Then
MsgBox(0, "已選擇清單框項目", GUICtrlRead($n1)) ; 顯示選擇的清單框項目
$menustate = GUICtrlRead($menu1) ; 返回選單項目狀態
$menutext = GUICtrlRead($menu1, 1) ; 返回選單項目文字
MsgBox(0, "選單項目的狀態和文字", "狀態：" & $menustate & @LF & "文字：" & $menutext)
EndIf
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Function GUICtrlRecvMsg

函數說明（Function Reference）

GUICtrlRecvMsg

傳送控制項訊息並接收在 lParam 內的資訊。

GUICtrlRecvMsg ( 控制項ID , 訊息 [, wParam [, lParam 類型]] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
訊息 | 要傳送到由 Windows 控制項文件定義訊息的類型。
wParam | [選擇性參數] 要傳送到控制項的第一個參數整數。
lParam 類型 | [選擇性參數] 定義 lParam 的類型，將返回到： 0 表示 wParam 和 lParam (預設)、1 表示 lParam 字串、2 表示 lParam RECT 結構。

返回值

成功： | 返回由 SendMessage Windows API 傳送的返回值。
失敗： | 返回值 0。

附註

此函數允許使用 SendMessage API 函式將特殊的 Windows 訊號直接傳送到控制項。它通常被用來啟動某些特殊的控制項功能，而這些功能往往是簡單的 GUICtrlRead() 和 GUICtrlSet...() 函數無法實現的。

若未指定 wParam 和 lParam類型，則將返回內含這兩個參數的群組 (LPwParam, LPlParam)。

RECT 返回值會以含有四個類別的群組形式返回 (左, 上, 右, 下)。

相關

GUICtrlSendMsg, GUICtrlSet..., GUIGetMsg, GUICtrlRead

範例

#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

$nEdit = GUICtrlCreateEdit ("第 0 行", 10,10)
GUICtrlCreateButton ("確定", 20,200,50)

GUISetState ()

For $n=1 To 5
GUICtrlSetData ($nEdit, @CRLF & "行數："& $n)
Next

; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
If $msg >0 Then
$a=GUICtrlRecvMsg($nEdit, $EM_GETSEL)
GUICtrlSetState($nEdit,$GUI_FOCUS) ; 設定焦點在編輯區上

; 將顯示由控制項返回的 wParam 和 lParam 參數值
MsgBox(0,"目前選擇範圍",StringFormat("開始自=%d 結束=%d", $a[0], $a[1]))
EndIf
Until $msg = $GUI_EVENT_CLOSE


Function GUICtrlSendMsg

函數說明（Function Reference）

GUICtrlSendMsg

向指定控制項傳送訊息。

GUICtrlSendMsg ( 控制項ID, 訊息 , wParam, lParam )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreate... 函數返回取得。
訊息 | 要傳送到由 Windows 控制項文件定義訊息的類型。
wParam | 要傳送到控制項的第一個參數。
lParam | 要傳送到控制項的第二個參數。

返回值

成功： | 返回由 SendMessage Windows API 傳送的返回值。
失敗： | 返回值 0。

附註

此函數允許使用 SendMessage API 函式將特殊的 Windows 訊號直接傳送到控制項。它通常被用來啟動某些特殊的控制項功能，而這些功能往往是簡單的 GUICtrlRead() 和 GUICtrlSet...() 函數無法實現的。

參數 (wParam 和 lParam) 可以是整數也可以是字串。

GUICtrlSendMsg 可用於傳送那些沒有特殊返回類型的訊息，對於其它您可以取得的額外資料進階訊息，則必須使用 GUICtrlRecvMsg() 函數。

相關

GUICtrlRecvMsg, GUICtrlCreate..., GUICtrlSet..., GUIGetMsg, GUICtrlRead

範例

#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

GUICreate("我的 GUI 視窗") ; 將建立一個置中顯示的對話框

$nEdit = GUICtrlCreateEdit ("第 0 行", 10,10)
GUICtrlCreateButton ("確定", 20,200,50)
GUISetState ()

For $n=1 To 5
GUICtrlSetData ($nEdit,@CRLF & "行數："& $n)
Next

; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
If $msg >0 Then
$n=GUICtrlSendMsg ($nEdit, $EM_LINEINDEX,-1,0)
$nline=GUICtrlSendMsg( $nEdit, $EM_LINEFROMCHAR,$n,0)
GUICtrlSetState ($nEdit,$GUI_FOCUS) ; 設定焦點

MsgBox (0,"目前行數",$nLine)
EndIf
Until $msg = $GUI_EVENT_CLOSE


Function GUICtrlSendToDummy

函數說明（Function Reference）

GUICtrlSendToDummy

向指定的 Dummy 控制項傳送訊息。

GUICtrlSendToDummy ( 控制項ID [, 狀態] )

參數

控制項ID | 控制項的識別碼 (控制項ID)，由 GUICtrlCreateDummy 函數返回取得。
狀態 | [選擇性參數] 可稍候被 GUICtrlRead 讀取的返回值。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

此函數被呼叫時，可藉由訊息迴圈或由產生的 OnEvent 函數處理通知訊號 (就好像該虛擬控制項真的 "被點選" 一樣)。

相關

GUICtrlCreateDummy, GUICtrlSetOnEvent, GUICtrlRead

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Global $user

Example()

Func Example()
Local $iOldOpt, $button
$iOldOpt = Opt("GUIOnEventMode", 1)

GUICreate("GUICtrlSendToDummy 函數範例", 220, 200, 100, 200)
GUISetBkColor(0x00E0FFFF) ; 將變更背景色
GUICtrlSetOnEvent($GUI_EVENT_CLOSE, "OnClick") ; 處理點選按鈕動作

$user = GUICtrlCreateDummy()
GUICtrlSetOnEvent(-1, "Onexit") ; 處理點選按鈕動作
$button = GUICtrlCreateButton("事件", 75, 170, 70, 20)
GUICtrlSetOnEvent(-1, "OnClick") ; 處理點選按鈕動作
GUISetState()

While 1
Sleep(100)
WEnd

Opt("GUIOnEventMode", $iOldOpt)

EndFunc ;==>Example

Func OnClick()
GUICtrlSendToDummy($user) ; 建構虛擬控制項
EndFunc ;==>OnClick

Func OnExit()
; 結束前的特別動作
Exit
EndFunc ;==>OnExit


Function GUIGetCursorInfo

函數說明（Function Reference）

GUIGetCursorInfo

取得 (相對於視窗的) 滑鼠位置。

GUIGetCursorInfo ( [視窗控制碼] )

參數

視窗控制碼 [選擇性參數] 要使用的視窗控制碼，若省略則使用 "目前視窗"。

返回值

成功： | 返回由五組類別組成的群組(Array)，該項目內含滑鼠游標資訊：
 | $array[0] = X 座標 (橫座標)
 | $array[1] = Y 座標 (縱座標)
 | $array[2] = 主要按鈕向下 (1 按下, 0 未按下)
 | $array[3] = 次要按鈕向下 (1 按下, 0 未按下)
 | $array[4] = 滑鼠游標駐留的控制項 ID (若無為 0)
失敗： | 返回 0 並設定 @error 為 1。

附註

提供的座標值都是相對於 GUI 視窗的 (也即所知的用戶座標)。

若使用了參數 "視窗控制碼" 則指定的視窗將成為新的 "目前視窗"。

滑鼠游標位置只能在由 GUICreate 建立的視窗上順利作用，且在無視窗控制碼且視窗為 活動狀態 時方為有效。

檢視清單項目(ListViewItem) 或 TreeViewItem 控制項ID 將永遠不能返回，只有主要檢視清單(ListView) 或 TreeView 的控制項 ID 可以。

相關

GUICreate, GUIGetMsg

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Global $x, $y

Example()

Func Example()
Local $msg

HotKeySet("{Esc}", "GetPos")

GUICreate("按 Esc 鍵取得座標位置", 400, 400)
$x = GUICtrlCreateLabel("0", 10, 10, 50)
$y = GUICtrlCreateLabel("0", 10, 30, 50)
GUISetState()

; 執行 GUI 視窗直到對話框關閉
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example

Func GetPos()
Local $a

$a = GUIGetCursorInfo()
GUICtrlSetData($x, $a[0])
GUICtrlSetData($y, $a[1])
EndFunc ;==>GetPos


Function GUIGetMsg

函數說明（Function Reference）

GUIGetMsg

列出檢視所有可能已發生事件的 GUI 視窗。

GUIGetMsg ( [進階參數] )

參數

進階參數 [選擇性參數] 返回群組內的進階資訊：
0 = 返回單一事件 (預設)
1 = 返回一個內含事件及進階資訊的群組

返回值

返回一個事件或依 "進階參數" 設定的一個群組。
"事件" 返回的是傳送訊息、或一個特殊事件(像是該視窗正在關閉、最小化等)的物件控制項 ID，若無訊息出現，則事件為 0：

事件 ID | 傳送訊息的控制項 ID
0 | 無事件。
$GUI_EVENT_CLOSE | 正在關閉對話框 (從預設按鈕或系統選單選取)。
$GUI_EVENT_MINIMIZE | 經由視窗標題欄按鈕最小化對話框。
$GUI_EVENT_RESTORE | 經由點選工作列圖示還原對話框。
$GUI_EVENT_MAXIMIZE | 經由視窗標題欄按鈕最大化對話框。
$GUI_EVENT_MOUSEMOVE | 移動滑鼠游標。
$GUI_EVENT_PRIMARYDOWN | 按下主要滑鼠按鈕。
$GUI_EVENT_PRIMARYUP | 放開主要滑鼠按鈕。
$GUI_EVENT_SECONDARYDOWN | 按下次要滑鼠按鈕。
$GUI_EVENT_SECONDARYUP | 放開次要滑鼠按鈕。
$GUI_EVENT_RESIZED | 調整對話框大小。
$GUI_EVENT_DROPPED | 即時拖曳動作結尾的 @GUI_DRAGID, @GUI_DRAGFILE 和 @GUI_DROPID 將被用於取得跟 ID/檔案 完全符合的相關控制項。

當使用 "進階參數" 時，訊息會返回帶進階資訊的一個群組(Array)：
$array[0] = 0 或事件ID 或是 控制項ID
$array[1] = 視窗控制碼事件的來源
$array[2] = 物件控制碼事件的來源 (若適用)
$array[3] = 目前滑鼠游標的 X 座標位置 (相對於 GUI 視窗)
$array[4] = 目前滑鼠游標的 Y 座標位置 (相對於 GUI 視窗)

若 GUIOnEventMode 選項設為1，則從 GUIGetMsg 返回的值都是 0，同時 @error 設為1。
若選項 GUIEventOptions 設為 1 最小化、還原、和最大化按鈕，它們將不會在視窗上產生作用，只具備簡單的通知功能。

附註

此函數在執行時會依需要自動閒置 CPU，因此您可以放心在複雜的迴圈中使用它，而不會導致整台電腦當機。

關於滑鼠位置資訊及駐留控制項，可以由 GUIGetCursorInfo 函數取得，且滑鼠經過一個控制項時是不會有任何事件發生的，所以您必須呼叫 GUIGetCursorInfo 以取得控制項ID。

相關

GUICreate, GUICtrlCreate..., GUICtrlRead, GUIOnEventMode (Option), GUIEventOptions (Option), GUIGetCursorInfo

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

;-------------------------------------------------------------------------------------
; 範例 - 按下按鈕檢視單選框數值
; 腳本也會偵測狀態變更(關閉/最小化/逾時, 等等)
Func Example()
Local $button_1, $group_1, $radio_1, $radio_2, $radio_3
Local $radioval1, $radioval2, $msg

Opt("GUICoordMode", 1)
GUICreate("單選框展示", 400, 280)

; 建立控制項
$button_1 = GUICtrlCreateButton("按鈕 1(&U)", 30, 20, 120, 40)
$group_1 = GUICtrlCreateGroup("群組 1", 30, 90, 165, 160)
GUIStartGroup()
$radio_1 = GUICtrlCreateRadio("單選物件 &0", 50, 120, 85, 20)
$radio_2 = GUICtrlCreateRadio("單選物件 &1", 50, 150, 85, 20)
$radio_3 = GUICtrlCreateRadio("單選物件 &2", 50, 180, 85, 20)

; 初始化變數，我們將用來追蹤視窗事件
$radioval1 = 0 ; 我們將假設 0 = 第一個選取的單選按鈕, 2 = 最後選取的按鈕
$radioval2 = 2

; 顯示視窗
GUISetState()

; 此訊息迴圈我們將使用變數持續追蹤單選物件的變更
; 並以其它方法利用 GUICtrlRead() 函數在結束時讀取個控制項的狀態
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
MsgBox(0, "", "關閉對話框")
Exit
Case $msg = $GUI_EVENT_MINIMIZE
MsgBox(0, "", "最小化對話框", 2)
Case $msg = $GUI_EVENT_MAXIMIZE
MsgBox(0, "", "還原對話框", 2)

Case $msg = $button_1
MsgBox(0, "點選的預設按鈕", "單選物件：" & $radioval1)

Case $msg >= $radio_1 And $msg <= $radio_3
$radioval1 = $msg - $radio_1

EndSelect
WEnd
EndFunc ;==>Example


Function GUIGetStyle

函數說明（Function Reference）

GUIGetStyle

接收一個 GUI 視窗的樣式類型。

GUIGetStyle ( [ 視窗控制碼] )

參數

視窗控制碼 [選擇性參數] 由 GUICreate 返回的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回以兩組類型組成的資訊群組(Array)：
 | $array[0] = 類型(Style)
 | $array[1] = 進階類型(ExStyle)
失敗： | 返回值 0。

附註

請注意類型(Style)必須在 GUISetState() 後變更。

相關

GUICreate, GUISetStyle

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $NewStyle = False, $hWnd, $Style, $GuiStyles, $Msg

$hWnd = GUICreate("視窗類型", 260, 100)
$Style = GUICtrlCreateButton("設定類型(Style)", 45, 50, 150, 20)

$GuiStyles = GUIGetStyle($hWnd) ; 請注意該類型必須在開啟後才變更

GUISetState()

While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
Exit
Case $Style
If Not $NewStyle Then
GUISetStyle(BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), BitOR($WS_EX_CLIENTEDGE, $WS_EX_TOOLWINDOW))
GUICtrlSetData($Style, '還原類型(Style)')
$NewStyle = True
Else
GUISetStyle($GuiStyles[0], $GuiStyles[1])
GUICtrlSetData($Style, '設定類型(Style)')
$NewStyle = False
EndIf
Case Else
EndSwitch
WEnd
EndFunc ;==>Example


Function GUIRegisterMsg

函數說明（Function Reference）

GUIRegisterMsg

註冊一個定義使用者到已知視窗訊息 ID (WM_MSG)。

GUIRegisterMsg ( 訊息ID, "函數" )

參數

訊息ID | 一個視窗訊息 ID (請檢視附錄：視窗訊息碼)。
函數 | 當出現訊息或一個空白字串 "" 時，呼叫來解除註冊訊息的使用者函數名稱。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

『注意!!!』：要建立可作用的使用者函數您須以 最多 4 組函數參數 來定義，否則該函數將不能被呼叫！！！

例如：
Func MyUserFunction($hWndGUI, $MsgID, $WParam, $LParam)
...
EndFunc

或者

Func MyUserFunction($hWndGUI, $MsgID)
...
EndFunc

當呼叫使用者函數時，這 4 組參數還包括下列數值：
位置 | 參數 | 含義說明
1 | hWnd | GUI 的視窗控制碼，用來讓訊息出現。
2 | Msg | 視窗訊息 ID。
3 | wParam | 以十六進位值表示的第一個訊息參數值。
4 | lParam | 以十六進位值表示的第二個訊息參數值。

最多可達 256 使用者函數可供訊息 ID 群註冊。

預設在完成使用者函數後 AutoIt 內部的訊號控制器將進行處理程序。
不論是您 返回 得到的值也好(請見 WM_COMMAND 的範例) 還是使用關鍵字 '返回' 的也罷，此函數都是不會有任何數值的。
當利用 '返回' 而沒有任何返回值，則 AutoIt 內部訊息控制器將「不會」有任何處理動作！ (如有一個用於此訊息的話)

『注意!!!』：如您要讓 AutoIt 執行它的內部控制器以處理訊息，請從函數 (也可以參見範例) 返回變數 $GUI_RUNDEFMSG (在 GUIConstantsEx.au3) ！！！
換句話說：若您要在使用者函數結束前早一步返回，也要利用 AutoIt 內部的訊號控制器。

請注意： 在使用如 "Msgbox()" 這類的指令執行視窗訊息，而讓使用者函數運作有所阻礙的時候，將導致不可預料的錯誤，所以返回系統的速度盡可能越快越好！！！

某些控制項會耗盡可用的指定 Windows 訊息 ID，所以將它們重新註冊是沒關係的，例如：WM_CHAR, WM_KEYDOWN, WM_KEYUP 就有可能被編輯控制件耗盡資源。

相關

GUICtrlGetHandle

範例

; *******************************************************
; 範例 - 建立一個使用者繪製的圖片/彩色按鈕
; *******************************************************

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Example()

Func Example()
Local Const $BS_OWNERDRAW = 0x0000000B
Local $hGUI, $nButton, $nButton2, $GUIMsg

$hGUI = GUICreate("我繪製的按鈕", 300, 200)

$nButton = GUICtrlCreateButton("我繪製的按鈕", 90, 50, 120, 30)
GUICtrlSetStyle($nButton, BitOR($WS_TABSTOP, $BS_NOTIFY)) ; 設定個人繪圖旗標

$nButton2 = GUICtrlCreateButton("普通按鈕", 90, 110, 120, 30)

GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
; WM_DRAWITEM 必須在視窗出現前重新註冊，否則初始化繪圖物件將不能完成
GUIRegisterMsg($WM_DRAWITEM, "MY_WM_DRAWITEM")

GUISetState()

While 1
$GUIMsg = GUIGetMsg()

Switch $GUIMsg
Case $GUI_EVENT_CLOSE
ExitLoop

Case $nButton
; 一般上應當還不用我們的 MY_WM_COMMAND 函數去執行
MsgBox(0, "資訊", "按鈕1已按下")

Case $nButton2
; 一般上應當還不用我們的 MY_WM_COMMAND 函數去執行
MsgBox(0, "資訊", "按鈕2已按下")
EndSwitch
WEnd
EndFunc ;==>Example

; 回應按鈕動作
Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
$nNotifyCode = BitShift($wParam, 16)
$nID = BitAND($wParam, 0x0000FFFF)
$hCtrl = $lParam

If $nID <> 2 And $nNotifyCode = 0 Then ; 檢查 IDCANCEL - 2
; 我們繪製的按鈕在按下 ENTER 後不會傳送某些事件
; 所以 IDOK - 1 成立，現在要來檢查控制項目前是否有焦點存在
If $nID = 1 Then
$hFocus = DllCall("user32.dll", "hwnd", "GetFocus")
$nCtrlID = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hFocus[0])
PostButtonClick($hWnd, $nCtrlID[0])
Else
MsgBox(0, "MY_WM_COMMAND", "GUIHWnd " & @TAB & "；" & $hWnd & @LF & _
"訊息 - ID " & @TAB & "：" & $Msg & @LF & _
"wParam 參數" & @TAB & "：" & $wParam & @LF & _
"lParam 參數" & @TAB & "：" & $lParam & @LF & @LF & _
"WM_COMMAND-資訊：" & @LF & _
"-----------------------------" & @LF & _
"訊息編碼" & @TAB & "：" & $nNotifyCode & @LF & _
"控制項ID" & @TAB & "：" & $nID & @LF & _
"CtrlHWnd" & @TAB & "：" & $hCtrl)
EndIf
Return 0 ;只是點選按鈕測試
EndIf
; 處理預設的 Autoit3 內部訊息指令
; 您也可以將該行跳過
; !!! 將只有 '返回' (無任何值) 但不會處理任何預設的 Autoit3 訊息
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_COMMAND

; 重新列出 WM_COMMAND 訊息到視窗控制項
Func PostButtonClick($hWnd, $nCtrlID)
DllCall("user32.dll", "int", "PostMessage", _
"hwnd", $hWnd, _
"int", $WM_COMMAND, _
"int", BitAND($nCtrlID, 0x0000FFFF), _
"hwnd", GUICtrlGetHandle($nCtrlID))
EndFunc ;==>PostButtonClick

; 繪製按鈕
Func MY_WM_DRAWITEM($hWnd, $Msg, $wParam, $lParam)
Local $stDrawItem = DllStructCreate("uint;uint;uint;uint;uint;uint;uint;int[4];dword", $lParam)
Local Const $ODT_BUTTON = 4

$nCtlType = DllStructGetData($stDrawItem, 1)
If $nCtlType = $ODT_BUTTON Then
$nCtrlID = DllStructGetData($stDrawItem, 2)
$nItemState = DllStructGetData($stDrawItem, 5)
$hCtrl = DllStructGetData($stDrawItem, 6)
$hDC = DllStructGetData($stDrawItem, 7)
$nLeft = DllStructGetData($stDrawItem, 8, 1)
$nTop = DllStructGetData($stDrawItem, 8, 2)
$nRight = DllStructGetData($stDrawItem, 8, 3)
$nBottom = DllStructGetData($stDrawItem, 8, 4)
$sText = "我繪製的按鈕"
$nTextColor = 0x5555DD
$nBackColor = 0xFFEEDD
DrawButton($hWnd, $hCtrl, $hDC, $nLeft, $nTop, $nRight, $nBottom, $nItemState, $sText, $nTextColor, $nBackColor)
$stDrawItem = 0
Return 1
EndIf

$stDrawItem = 0
Return $GUI_RUNDEFMSG ; 已處理 Autoit3 內部預設的訊息指令
EndFunc ;==>MY_WM_DRAWITEM

; 繪圖物件主程序
Func DrawButton($hWnd, $hCtrl, $hDC, $nLeft, $nTop, $nRight, $nBottom, $nItemState, $sText, $nTextColor, $nBackColor)
;Local $bDefault = FALSE(不為真)
Local Const $GWL_STYLE = -16
Local Const $ODS_SELECTED = 0x0001
Local Const $ODS_GRAYED = 0x0002
Local Const $ODS_DISABLED = 0x0004
Local Const $ODS_CHECKED = 0x0008
Local Const $ODS_FOCUS = 0x0010
Local Const $ODS_HOTLIGHT = 0x0040
Local Const $ODS_INACTIVE = 0x0080
Local Const $ODS_NOACCEL = 0x0100
Local Const $ODS_NOFOCUSRECT = 0x0200
Local Const $DFC_BUTTON = 4
Local Const $DFCS_BUTTONPUSH = 0x0010
Local $bChecked = BitAND($nItemState, $ODS_CHECKED)
Local $bFocused = BitAND($nItemState, $ODS_FOCUS)
Local $bGrayed = BitAND($nItemState, BitOR($ODS_GRAYED, $ODS_DISABLED))
Local $bSelected = BitAND($nItemState, $ODS_SELECTED)

$stRect = DllStructCreate("int;int;int;int")
DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

If $bGrayed Then
$nClrTxt = SetTextColor($hDC, GetSysColor($COLOR_HIGHLIGHTTEXT))
ElseIf $nTextColor = -1 Then
$nClrTxt = SetTextColor($hDC, GetSysColor($COLOR_BTNTEXT))
Else
$nClrTxt = SetTextColor($hDC, $nTextColor)
EndIf

If $nBackColor = -1 Then
$hBrush = GetSysColorBrush($COLOR_BTNFACE)
$nClrSel = GetSysColor($COLOR_BTNFACE)
Else
$hBrush = CreateSolidBrush($nBackColor)
$nClrSel = $nBackColor;
EndIf

$nClrBk = SetBkColor($hDC, $nClrSel)
$hOldBrush = SelectObject($hDC, $hBrush)

$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

If $bSelected Then
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -1, -1)
$hBrushSel = CreateSolidBrush(GetSysColor($COLOR_BTNSHADOW))
FrameRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, $hBrushSel)
DeleteObject($hBrushSel)
Else
If $bFocused And Not $bSelected Then InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -1, -1)
DrawFrameControl($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, $DFC_BUTTON, $DFCS_BUTTONPUSH)
EndIf

$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

If $bSelected Then
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -2, -2)
Else
If $bFocused And Not $bSelected Then
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -3, -3)
$nTmpLeft -= 1
$nTmpTop -= 1
Else
InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -2, -2)
$nTmpLeft -= 1
$nTmpTop -= 1
EndIf
EndIf

FillRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, $hBrush)

If $bSelected Or $bGrayed Then
$nTmpLeft = $nTmpLeft + 2
$nTmpTop = $nTmpTop + 2
EndIf

$uFlags = BitOR($DT_NOCLIP, $DT_CENTER, $DT_VCENTER)

If Not BitAND(GetWindowLong($hCtrl, $GWL_STYLE), $BS_MULTILINE) Then $uFlags = BitOR($uFlags, $DT_SINGLELINE)

DrawText($hDC, $sText, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, $uFlags)

If $bGrayed Then
$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

$nTmpLeft -= 1

$nClrTxt = SetTextColor($hDC, GetSysColor($COLOR_GRAYTEXT))
DrawText($hDC, $sText, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, BitOR($DT_NOCLIP, $DT_CENTER, $DT_VCENTER, $DT_SINGLELINE))
EndIf

$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

If $bFocused Then
$hBrush = CreateSolidBrush(0)
FrameRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, $hBrush)

$nTmpLeft = $nLeft
$nTmpTop = $nTop
$nTmpRight = $nRight
$nTmpBottom = $nBottom

InflateRect($nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom, -4, -4)
DrawFocusRect($hDC, $nTmpLeft, $nTmpTop, $nTmpRight, $nTmpBottom)
EndIf

SelectObject($hDC, $hOldBrush)
DeleteObject($hBrush)
SetTextColor($hDC, $nClrTxt)
SetBkColor($hDC, $nClrBk)

Return 1
EndFunc ;==>DrawButton

; 一些圖片 / 視窗函數
Func CreateSolidBrush($nColor)
Local $hBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $nColor)
Return $hBrush[0]
EndFunc ;==>CreateSolidBrush

Func GetSysColor($nIndex)
Local $nColor = DllCall("user32.dll", "int", "GetSysColor", "int", $nIndex)
Return $nColor[0]
EndFunc ;==>GetSysColor

Func GetSysColorBrush($nIndex)
Local $hBrush = DllCall("user32.dll", "hwnd", "GetSysColorBrush", "int", $nIndex)
Return $hBrush[0]
EndFunc ;==>GetSysColorBrush

Func DrawFrameControl($hDC, $nLeft, $nTop, $nRight, $nBottom, $nType, $nState)
Local $stRect = DllStructCreate("int;int;int;int")

DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

DllCall("user32.dll", "int", "DrawFrameControl", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect), "int", $nType, "int", $nState)

$stRect = 0
EndFunc ;==>DrawFrameControl

Func DrawFocusRect($hDC, $nLeft, $nTop, $nRight, $nBottom)
Local $stRect = DllStructCreate("int;int;int;int")

DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

DllCall("user32.dll", "int", "DrawFocusRect", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect))

$stRect = 0
EndFunc ;==>DrawFocusRect

Func DrawText($hDC, $sText, $nLeft, $nTop, $nRight, $nBottom, $nFormat)
Local $nLen = StringLen($sText)

Local $stRect = DllStructCreate("int;int;int;int")
DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

Local $stText = DllStructCreate("char[260]")
DllStructSetData($stText, 1, $sText)

DllCall("user32.dll", "int", "DrawText", "hwnd", $hDC, "ptr", DllStructGetPtr($stText), "int", $nLen, "ptr", DllStructGetPtr($stRect), "int", $nFormat)

$stRect = 0
$stText = 0
EndFunc ;==>DrawText

Func FillRect($hDC, $nLeft, $nTop, $nRight, $nBottom, $hBrush)
Local $stRect = DllStructCreate("int;int;int;int")

DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

DllCall("user32.dll", "int", "FillRect", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect), "hwnd", $hBrush)

$stRect = 0
EndFunc ;==>FillRect

Func FrameRect($hDC, $nLeft, $nTop, $nRight, $nBottom, $hBrush)
Local $stRect = DllStructCreate("int;int;int;int")

DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

DllCall("user32.dll", "int", "FrameRect", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect), "hwnd", $hBrush)

$stRect = 0
EndFunc ;==>FrameRect

Func InflateRect(ByRef $nLeft, ByRef $nTop, ByRef $nRight, ByRef $nBottom, $nX, $nY)
Local $stRect = DllStructCreate("int;int;int;int")

DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)

DllCall("user32.dll", "int", "InflateRect", "ptr", DllStructGetPtr($stRect), "int", $nX, "int", $nY)

$nLeft = DllStructGetData($stRect, 1)
$nTop = DllStructGetData($stRect, 2)
$nRight = DllStructGetData($stRect, 3)
$nBottom = DllStructGetData($stRect, 4)

$stRect = 0
EndFunc ;==>InflateRect

Func SetBkColor($hDC, $nColor)
Local $nOldColor = DllCall("gdi32.dll", "int", "SetBkColor", "hwnd", $hDC, "int", $nColor)
Return $nOldColor[0]
EndFunc ;==>SetBkColor

Func SetTextColor($hDC, $nColor)
Local $nOldColor = DllCall("gdi32.dll", "int", "SetTextColor", "hwnd", $hDC, "int", $nColor)
Return $nOldColor[0]
EndFunc ;==>SetTextColor

Func SelectObject($hDC, $hObj)
Local $hOldObj = DllCall("gdi32.dll", "hwnd", "SelectObject", "hwnd", $hDC, "hwnd", $hObj)
Return $hOldObj[0]
EndFunc ;==>SelectObject

Func DeleteObject($hObj)
Local $nResult = DllCall("gdi32.dll", "hwnd", "DeleteObject", "hwnd", $hObj)
EndFunc ;==>DeleteObject

Func GetWindowLong($hWnd, $nIndex)
Local $nVal = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $hWnd, "int", $nIndex)
Return $nVal[0]
EndFunc ;==>GetWindowLong


Function GUIStartGroup

函數說明（Function Reference）

GUIStartGroup

使此後所有被建立的控制項都歸為一個群組。

GUIStartGroup ( [視窗控制碼] )

參數

視窗控制碼 [選擇性參數] 由 GUICreate 返回取得的視窗控制碼 (預設為前一個使用視窗)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

此函數通常用於單選按鈕控制項。當您點選一個單選按鈕時，其它所有在同一組的單選按鈕將被重新設定。GUIStartGroup 函數讓我們能輕鬆地設定這些群組。

相關

GUICtrlCreateGroup

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $button_1, $group_1, $radio_1, $radio_2, $radio_3
Local $radio_4, $radio_5, $radio_6, $input_1, $input_2
Local $radioval1, $radioval2, $msg

Opt("GUICoordMode", 1)

GUICreate("單選框群組展示", 400, 280)

; 建立控制項
$button_1 = GUICtrlCreateButton("按鈕 1(&U)", 30, 20, 120, 40)
$group_1 = GUICtrlCreateGroup("群組 1", 30, 90, 165, 160)
GUIStartGroup()
$radio_1 = GUICtrlCreateRadio("單選 &0", 50, 120, 70, 20)
$radio_2 = GUICtrlCreateRadio("單選 &1", 50, 150, 60, 20)
$radio_3 = GUICtrlCreateRadio("單選 &2", 50, 180, 60, 20)
GUIStartGroup()
$radio_4 = GUICtrlCreateRadio("單選 &A", 120, 120, 70, 20)
$radio_5 = GUICtrlCreateRadio("單選 &B", 120, 150, 60, 20)
$radio_6 = GUICtrlCreateRadio("單選 &C", 120, 180, 60, 20)
GUIStartGroup()
$input_1 = GUICtrlCreateInput("輸入 1", 200, 20, 160, 30)
$input_2 = GUICtrlCreateInput("輸入 2", 200, 70, 160, 30)

; 設定預設值 (選擇的單選按鈕、預設按鈕 ...等等)
GUICtrlSetState($radio_1, $GUI_CHECKED)
GUICtrlSetState($radio_6, $GUI_CHECKED)
GUICtrlSetState($button_1, $GUI_FOCUS + $GUI_DEFBUTTON)

; 初始化變數，我們將用於持續追蹤單選事件
$radioval1 = 0 ; 我們將設定 assume 0 = 第一個選擇的單選按鈕, 2 = 最近點選的按鈕
$radioval2 = 2

GUISetState()

; 在此訊息迴圈我們使用變數持續修改單選，
; 其它方式為使用 GUICtrlRead() 函數在結束後讀取每個控制項的狀態
; 兩種方法數值都是一樣的
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit

Case $msg = $button_1
MsgBox(0, "按鈕", "單選 " & $radioval1 & @LF & "單選 " & Chr($radioval2 + Asc("A")) & @LF & GUICtrlRead($input_1) & @LF & GUICtrlRead($input_2))

Case $msg = $radio_1 Or $msg = $radio_2 Or $msg = $radio_3
$radioval1 = $msg - $radio_1

Case $msg = $radio_4 Or $msg = $radio_5 Or $msg = $radio_6
$radioval2 = $msg - $radio_4

EndSelect
WEnd
EndFunc ;==>Example


Function GUISwitch

函數說明（Function Reference）

GUISwitch

切換視窗。

GUISwitch ( 視窗控制碼 [, 籤頁項ID] )

參數

視窗控制碼 | 要切換的視窗控制碼。
籤頁項ID | 要選擇的籤頁控制項ID。

返回值

成功： | 返回前一個當前控制碼。
失敗： | 返回一個 NULL 控制碼。

附註

許多 GUI 函數都是在 "目前" 視窗上執行的 - 通常它是以 GUICreate 函數建立的最後一個視窗。此函數讓您可以把另一個視窗設為 "目前" 狀態，這不是代表相關視窗將為活動狀態，您仍須用到 WinActivate。

使用籤頁項ID 可以讓您在指定籤頁控制項內建立一個新的物件，別忘記要關閉籤頁項定義的 GuiCtrlCreateTabItem("")。

相關

GUICreate, GUIDelete

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

Example()

Func Example()
Local $parent1, $parent2, $tabitem, $msg

$parent1 = GUICreate("主視窗 1")
GUICtrlCreateTab(10, 10)
$tabitem = GUICtrlCreateTabItem("籤頁1")
GUICtrlCreateTabItem("籤頁2")
GUICtrlCreateTabItem("")

$parent2 = GUICreate("主視窗 2", -1, -1, 100, 100)

GUISwitch($parent2)
GUISetState()
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE

GUISwitch($parent1, $tabitem)
GUICtrlCreateButton("確定", 50, 50, 50)
GUICtrlCreateTabItem("")

GUISetState(@SW_SHOW, $parent1)
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
EndFunc ;==>Example


Function HotKeySet

函數說明（Function Reference）

HotKeySet

設定一個可呼叫某使用者函數的快速鍵。

HotKeySet ( "快速鍵" [, "函數"] )

參數

快速鍵 | 組合使用為快速鍵的按鍵，與 Send() 函數格式相同。
函數 | [選擇性參數] 按下按鍵後要呼叫的函數名稱，不設定此參數的話則會重設為先前的快速鍵。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

若有兩個 AutoIt 腳本設定了相同的快速鍵，您應該避免同時執行這兩個腳本程式 (否則第二個腳本將無法擷取快速鍵，除非第一個腳本終止、或因為先前已設定過快速鍵故而取消註冊快速鍵)。

按下快速鍵後 *通常會* 中斷當前執行中的 AutoIt 函數/陳述式，並執行其使用者函數，直到完成或被中斷為止。下方所列為例外情況：
1) 如目前的函數是一個"阻斷型(blocking)" 函數，則敲擊按鍵動作將被進行緩衝處理、並在阻斷型函數完成後繼續執行。MsgBox 和 FileSelectFolder 就是典型的阻斷型函數，您可以試試範例中的快速鍵 Shift-Alt-d 動作。
2) 如果您已在 AutoIt 常駐圖示上點選了暫停腳本，則在暫停期間按下的任何快速鍵都將被忽略。

不能設定的快速鍵：

Ctrl+Alt+Delete | 由 Windows 保留。
F12 | 同樣也被 Windows 保留，跟它本身的 API 有關。
數字區(NumPad) 的 Enter 鍵 | 可替代為：使用 {Enter} 同時擷取主鍵盤和數字區鍵盤上的 Enter 鍵。
Win+B,D,E,F,L,M,R,U; 和 Win+Shift+M | 這些都是 Windows 內建的快速鍵。請注意：Win+B 和 Win+L 可能只被 Windows XP 及以上版本保留。
Alt, Ctrl, Shift, Win | 他們都是輔助鍵！
其它 | 任何經由使用者在第三方軟體定義的全域快速鍵、任何由兩個或更多「基本按鍵」如：{F1}{F2} 組成的快速鍵，以及任何 '{LALT}' 或 '{ALTDOWN}' 格式的按鍵類型。

當您設定了一個快速鍵，AutoIt 會擷取按下的按鍵但不會把它傳到啟動中的程式，不過有一個例外：鎖定鍵 (NumLock, CapsLock, 和 ScrollLock) 他們將保持為特定狀態！
若要 Send() 一個將觸發 HotKeySet() 事件的組合鍵，請使用 ControlSend() 或未註冊 HotKeySet() 事件的其中一個。否則 Send() 可能會觸發成無限迴圈。

; 擷取並傳遞單一按鍵事件
HotKeySet("{Esc}", "captureEsc")
Func captureEsc()
; ... 這裡可定義任何動作
HotKeySet("{Esc}")
Send("{Esc}")
HotKeySet("{Esc}", "captureEsc")
EndFunc

被呼叫的函數 不會 收到參數，它們將被忽略。

@HotKeyPressed 巨集可以在函數內使用，它可以在相同函數內處理數個按鍵事件。

相關

Send, ControlSend

範例

; 請按 Esc 鍵結束腳本，暫停/終止 來 "暫停"

Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ;Shift-Alt-d

;;;; 程式主體將在此執行 ;;;;
While 1
Sleep(100)
WEnd
;;;;;;;;

Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('腳本已 "暫停"',0,0)
WEnd
ToolTip("")
EndFunc

Func Terminate()
Exit 0
EndFunc

Func ShowMessage()
MsgBox(4096,"","這是訊息。")
EndFunc


Function Send

函數說明（Function Reference）

Send

向啟動視窗傳送模擬按鍵動作。

Send ( "按鍵" [, 旗標] )

參數

按鍵 | 要傳送的按鍵順序。
旗標 | [選擇性參數] 修改處理 "按鍵" 的方式： 旗標 = 0，文字內含的特殊字元像 + 和 ! 將被視為按下 SHIFT 和 ALT 鍵 (預設) 旗標 = 1, 按鍵照原樣傳送

返回值

無。

附註

請檢視：附錄 關於 Send 的某些提示內容。AutoIt 可以傳送所有的 ASCII 和 延伸 ASCII 字元 (0-255)，對於傳送 UNICODE 字元我們須使用 "ASC" 選項和欲傳送的字元編碼 (請見下表底端的{ASC})。

"Send" 指令的語法跟 ScriptIt 和 Visual Basic 的 "SendKeys" 指令類似，不過照以下寫入內容傳送的字元例外：

'!'
這是告訴 AutoIt 傳送一個 ALT 按鍵訊號， 因此 Send("這是文字!a") 將傳送按鍵："這是文字" 然後按下 "ALT+a"。

請注意，有些程式對大寫和 ALT 鍵非常嚴格，例如："!A" 與 "!a" 不同；第一個是說 ALT+SHIFT+A，第二個是指 ALT+a ，如拿不準的話，請用小寫！

'+'
這是告訴 AutoIt 傳送一個 SHIFT 按鍵訊號， 因此 Send("Hell+o") 將會傳送文字 "HellO"， Send("!+a") 則將傳送 "ALT+SHIFT+a"。

'^'
這是告訴 AutoIt 傳送一個 CONTROL 按鍵訊號， 因此 Send("^!a") 將會傳送 "CTRL+ALT+a"。

請注意，有些程式對大寫和 CTRL 鍵非常嚴格，例如："^A" 與 "^a" 不同；第一個是說 CTRL+SHIFT+A，第二個是指 CTRL+a，如拿不準的話，請用小寫！

'#'
此井號將傳送「視窗鍵」訊號， 因此 Send("#r") 將會傳送 Win+r 彈出 "執行" 對話框。

您可以設定 SendCapslockMode 在 Send 指令執行開始先將 CAPS LOCK 關閉，並在完成後還原。
然而，如果某位使用者在 Send 函數開始執行的時候就按住 Shift 鍵，則傳送的文字可能是小寫。
其中一種替代方式為趁其它 Send 開始前進行 Send("{SHIFTDOWN}{SHIFTUP}") 動作。

某些鍵盤如 Czech 在 CAPSLOCK 開啟狀態下或使用 Shift 鍵傳送一個字元時，它會傳送不同的字元內容。這是因為 AutoIt 對 Send 指令實現的方式，是藉由將 CAPSLOCK 字元視為一個 Shift 傳送，所以 它將不能執行。

某些特殊按鍵可以傳送但是必須用括號括住表示：

請注意，Windows 不允許 "CTRL-ALT-DEL" 組合鍵的模擬動作！
Send 指令 (如旗標為零) | 敲擊按鍵結果
{!} | !
{#} | #
{+} | +
{^} | ^
{{} | {
{}} | }
{SPACE} | 空白鍵
{ENTER} | 主鍵盤區的 ENTER 鍵
{ALT} | ALT
{BACKSPACE} or {BS} | BACKSPACE (後退鍵)
{DELETE} or {DEL} | DELETE (刪除鍵)
{UP} | 向上箭頭
{DOWN} | 向下箭頭
{LEFT} | 向左箭頭
{RIGHT} | 向右箭頭
{HOME} | HOME
{END} | END
{ESCAPE} or {ESC} | ESCAPE
{INSERT} or {INS} | INS
{PGUP} | PageUp
{PGDN} | PageDown
{F1} - {F12} | 功能鍵
{TAB} | TAB
{PRINTSCREEN} | Print Screen (擷取螢幕鍵)
{LWIN} | 左視窗鍵
{RWIN} | 右視窗鍵
{NUMLOCK on} | NUMLOCK (開/關/切換)
{CAPSLOCK off} | CAPSLOCK (開/關/切換)
{SCROLLLOCK toggle} | SCROLLLOCK (開/關/切換)
{BREAK} | 為 Ctrl+Break 鍵
{PAUSE} | PAUSE (暫停鍵)
{NUMPAD0} - {NUMPAD9} | 數字鍵區的數字 0 ~ 9
{NUMPADMULT} | 數字鍵區的乘法
{NUMPADADD} | 數字鍵區的加法
{NUMPADSUB} | 數字鍵區的減法
{NUMPADDIV} | 數字鍵區的除法
{NUMPADDOT} | 數字鍵區的 . 符號
{NUMPADENTER} | 數字鍵區的 Enter 鍵
{APPSKEY} | Windows 應用程式鍵
{LALT} | 左 ALT 鍵
{RALT} | 右 ALT 鍵
{LCTRL} | 左 CTRL 鍵
{RCTRL} | 右 CTRL 鍵
{LSHIFT} | 左 Shift 鍵
{RSHIFT} | 右 Shift 鍵
{SLEEP} | 電腦休眠鍵
{ALTDOWN} | 按住 ALT 鍵直到 {ALTUP} 傳送
{SHIFTDOWN} | 按住 SHIFT 鍵直到 {SHIFTUP} 傳送
{CTRLDOWN} | 按住 CTRL 鍵直到 {CTRLUP} 傳送
{LWINDOWN} | 按住左視窗鍵直到 {LWINUP} 傳送
{RWINDOWN} | 按住右視窗鍵直到 {RWINUP} 傳送
{ASC nnnn} | 傳送 ALT+nnnn 組合鍵
{BROWSER_BACK} | 僅限 2000/XP：按下瀏覽器中的 "下一頁" 鍵
{BROWSER_FORWARD} | 僅限 2000/XP：按下瀏覽器中的 "前一頁" 鍵
{BROWSER_REFRESH} | 僅限 2000/XP：按下瀏覽器中的 "重新整理" 鍵
{BROWSER_STOP} | 僅限 2000/XP：按下瀏覽器中的 "停止" 鍵
{BROWSER_SEARCH} | 僅限 2000/XP：按下瀏覽器中的 "搜尋" 鍵
{BROWSER_FAVORITES} | 僅限 2000/XP：按下瀏覽器中的 "我的最愛" 鍵
{BROWSER_HOME} | 僅限 2000/XP：執行瀏覽器並跳往首頁
{VOLUME_MUTE} | 僅限 2000/XP：靜音
{VOLUME_DOWN} | 僅限 2000/XP：調低音量
{VOLUME_UP} | 僅限 2000/XP：增加音量
{MEDIA_NEXT} | 僅限 2000/XP：前往 Media Player 的下一個音訊
{MEDIA_PREV} | 僅限 2000/XP：前往 Media Player 的前一個音訊
{MEDIA_STOP} | 僅限 2000/XP：停止 Media Player
{MEDIA_PLAY_PAUSE} | 僅限 2000/XP：播放/暫停 Media Player
{LAUNCH_MAIL} | 僅限 2000/XP：執行 E-Mail 程式
{LAUNCH_MEDIA} | 僅限 2000/XP：執行 Media Player
{LAUNCH_APP1} | 僅限 2000/XP：執行使用者程式 1 (我的電腦)
{LAUNCH_APP2} | 僅限 2000/XP：執行使用者程式 2 (計數器)

如要傳送 ASCII 數值 A (與按下數字區的 ALT+065 相同)：
Send("{ASC 065}")

(當使用 2 位元數字的 ASCII 碼時，您須使用前置 0，否則將使用舊版的 437 字碼頁)。

要傳送 UNICODE 字元請輸入字碼 (十進位或十六進位)，例如這是傳送一個中國字元：
Send("{ASC 2709}") 或 Send("{ASC 0xA95}")

單一按鍵可重覆傳送，例如：
Send("{DEL 4}") ;按下 DEL 鍵 4 次
Send("{S 30}") ;傳送 30 個 "S" 字元
Send("+{TAB 4}") ;按下 SHIFT+TAB 4 次

按鍵將被傳送至少一次，甚至計數為零亦同。

要按住按鍵不放的話 (通常只對遊戲有用)：
Send("{a down}") ;按住 A 鍵不放
Send("{a up}") ;放開 A 鍵

要設定 capslock、numlock 和 scrolllock 鍵狀態的話：
Send("{NumLock on}") ;將 NumLock 鍵打開
Send("{CapsLock off}") ;將 CapsLock 鍵關閉
Send("{ScrollLock toggle}") ;切換 ScrollLock 的狀態

如您要使用一個變數作計算，則試試：
$n = 4
Send("+{TAB " & $n & "}")

如您要傳送 ASCII 數值 A 四次，則試試：
$x = Chr(65)
Send("{" & $x & " 4}")

大部份筆記型電腦鍵盤上都有一個特殊的 Fn 鍵，此鍵無法被模擬出來。

請注意，將旗標參數設為 1 的話則以上的 "特殊訊號" 將被關閉，這個是在您從一個變數傳送某些複製的文字，並且要求該文字照寫入內容原封不動傳送時才有用。

例如，先開啟資料夾選項 (在系統控制台) 並嘗試下列方式：
Send("{TAB}") | 瀏覽下一個控制項 (按鈕, 複選框checkbox, 等等)
Send("+{TAB}") | 瀏覽前一個控制項
Send("^{TAB}") | 瀏覽下一個視窗籤頁 (在標籤頁對話視窗上)
Send("^+{TAB}") | 瀏覽前一個視窗籤頁
Send("{SPACE}") | 可以使用來切換複選框或點選按鈕
Send("{+}") | 通常是選取複選框項目 (如它 "真的是" 複選框的話)
Send("{-}") | 通常是取消選取複選框
Send("{NumPadMult}") | 將 SysTreeView32 控制項的資料夾整個還原展開

您可以用 Alt-組合鍵 存取選單項目，也可以開啟記事本並嘗試下列方式：
Send("!f") | 傳送 Alt+f，這是記事本檔案選單的快速鍵，您還可試試其它字母！
Send("{DOWN}") | 移到下一筆選單
Send("{UP}") | 移到上一筆選單
Send("{LEFT}") | 往左移到新選單或展開子選單
Send("{RIGHT}") | 往右移到新選單或關閉子選單

請檢視 Windows 的說明及支援--按下 Win+F1-- 快速鍵的完整清單，如您還不太了解 Alt+F4, PrintScreen, Ctrl+C 等等的重要性可按一下開啟它。

若您是透過如 PsExec(www.sysinternals.com) 或 BeyondExec(www.beyondlogic.org) 這類不可或缺的登入工具來執行遠端電腦上的腳本，特別是用一個 Run 函數執行腳本傳送按鍵訊號給某程式的時候，則要使用 ControlSend 或其它諸如 ControlXXX 函數跟控制項直接進行通訊。不過 Send 指令若是以 Opt("SendAttachMode",1) 使用的話，是絕對不能執行的。
此外在傳送訊號的時後使用 -s 模式，對於取得遠端電腦較高的優先權更有幫助。

Opt("SendKeyDelay",...) 修改傳送敲擊按鍵訊號的短暫延遲時間。
Opt("SendKeyDownDelay",...) 修改按住按鍵到放開的短暫延遲時間。
如設定 "SendKeyDelay" 和 "SendKeyDownDelay" 兩者為 0 將完全移除傳送敲擊訊號的延遲，此用法在某些情況下可能有需要：例如，鎖定系統時 ("#l") 的解除，就有必要將延遲完全移除，避免「視窗鍵」從中作梗阻礙執行動作。

相關

SendAttachmode (Option), SendKeepActive, SendKeyDelay (Option), SendKeyDownDelay (Option), ControlSend

範例

Send("#r")
WinWaitActive("執行")
Send("notepad.exe{Enter}")
WinWaitActive("未命名 -")
Send("今天的時間/日期為： {F5}");Send函數無法傳送中文字元，這裡僅為方便了解


Function SendKeepActive

函數說明（Function Reference）

SendKeepActive

嘗試在 Send() 期間保持指定視窗為作用狀態。

SendKeepActive ( "標題" [, "文字"] )

參數

標題 | 要設為活動的視窗標題，請檢視：標題特別定義 的說明，使用空白標題則關閉函數。.
文字 | [選擇性參數] 視窗的文字。

返回值

成功： | 返回值 1。
失敗： | 如視窗未找到返回 0。

附註

此函數會一一嘗試從 Send() 傳送的每個敲擊動作，將視窗重設為活動狀態。

相關

Send

範例

Run("notepad.exe")
WinWait("未命名")

SendKeepActive("未命名")

; 在暫停期間修改活動視窗
For $i = 1 to 10
Sleep(1000)
Send("您好！");Send函數無法傳送中文字元，這裡僅為方便了解
Next


Function Abs

函數說明（Function Reference）

Abs

求某個數的絕對值。

Abs ( 運算式 )

參數

參數 任何有效的數字運算式。

返回值

返回 運算式 的絕對值。

附註

字串的數值是零。

相關

無。

範例

$var = Abs(-123.45) ;數值是 123.45


Function ACos

函數說明（Function Reference）

ACos

求某個數的反餘弦值(arcCosine)。

ACos ( 運算式 )

參數

運算式 -1到1(包括)之間的數值。

返回值

返回 運算式 的反餘弦值，結果以度數表示。

附註

ACos(x)在數學定義上只可以接受 -1 < x < 1，因此若x的值不在該範圍內則返回值為 -1.#IND。

相關

Sin, Cos, Tan, ASin, ATan

範例

$x = ACos(0.5)

$pi = 3.14159265358979
$radToDeg = 180 / $pi
$y = ACos(-1) * $radToDeg ;arcCosine ;-1的反餘弦值是 180


Function ASin

函數說明（Function Reference）

ASin

求某個數的反正弦值（arcsine）。

ASin ( 運算式 )

參數

運算式 -1到1(包括)之間的數值。

返回值

返回 運算式 的反正弦值，結果以度數表示。

附註

ASin(x) 在數學定義上只可以接受 -1 < x < 1，因此若x的值不在該範圍內則返回值為 -1.#IND。

相關

Sin, Cos, Tan, ACos, ATan

範例

$x = ASin(0.5)

$pi = 3.14159265358979
$radToDeg = 180 / $pi
$y = ASin(1) * $radToDeg ;1 的反正弦值是 90°


Function ATan

函數說明（Function Reference）

ATan

求某個數的反正切值（arctangent）。

ATan ( 運算式 )

參數

運算式 任何有效的數字運算式。

返回值

返回 運算式 的反正切值，結果以度數表示。

附註

4 * ATan(1) 的運算結果為 PI (圓周率)。

相關

Sin, Cos, Tan, ASin, ACos

範例

$x = ATan(0.5)

$pi = 4 * ATan(1) ;等同於 3.14159265358979
$radToDeg = 180 / $pi
$y = ATan(1) * $radToDeg ;1 的反正切值是 45°


Function BitAND

函數說明（Function Reference）

BitAND

按照位元進行「AND」運算。

BitAND ( 數值1, 數值2 [, 數值 n] )

參數

數值1 | 第一個數值。
數值2 | 第二個數值。
數值 n | [選擇性參數] 第 N 個數值- 可達 255 個指定數值。

返回值

返回做過 AND 計算的參數值。

附註

記住十六位元符號可當做數值計算。
BitAND 只有當兩個計算位元完全一致為 1 時方返回 1，其餘則為 0。

相關

BitNOT, BitOR, BitShift, BitXOR, Hex

範例

$x = BitAND(13, 7) ;x == 5，經由 1101 「AND」加入運算 0111 = 0101

$x = BitAND(2, 3, 6) ;x == 2，經由 0010、 0011、 0110「AND」加入運算 = 0010


Function BitNOT

函數說明（Function Reference）

BitNOT

按照位元進行「NOT」運算。

BitNOT ( 數值 )

參數

數值 一起計算的數值。

返回值

返回計算 NOT 的數值結果。
位元運算子會被當做 32-位元整數執行。

附註

記住十六位元符號可當做數值計算。
記住在二碼補數中，BitNOT 的作用等同於加入 1，使得結果相反。
也請記住 NOT 是變更 0 為 1，反之亦然。

相關

BitAND, BitOR, BitShift, BitXOR, Hex

範例

$x = BitNot(5)

#cs Comments:
結果為 -6，因為它是 32-位元 數值
5 == 00000000000000000000000000000101 二進位
-6 == 11111111111111111111111111111010 二進位
第一個位元已標示
#ce


Function BitOR

函數說明（Function Reference）

BitOR

按照位元進行「OR」運算。

BitOR ( 數值1, 數值2 [, 數值 n] )

參數

數值1 | 第一個數值。
數值2 | 第二個數值。
數值 n | [選擇性參數] 第 N 個數值- 可達 255 個指定數值。

返回值

返回兩個參數做過 OR 計算的數值結果。

附註

記住十六位元符號可當做數值計算。
BitOR 只有當兩個計算位元完全一致為 0 時方返回 0，其餘至少其中某個是 1 則為 1。

相關

BitAND, BitNOT, BitShift, BitXOR, Hex

範例

$x = BitOR(3, 6) ;x == 為 7 ，經由 0011「OR」運算 0110 = 0111

$x = BitOR(3, 15, 32) ;x == 為 47，經由 0011、1111、00100000「OR」運算 = 00101111


Function BitRotate

函數說明（Function Reference）

BitRotate

按照位元進行「位移並旋轉」運算動作。

BitRotate ( 數值 , 位移 [, 大小] )

參數

數值 | 要進行計算的數值
位移 | 向左旋轉的位元值 (負值則為向右移)，若未提供數值預設為 1。
大小 | [選擇性參數] 某個要做旋轉字串的大小，預設為 (16 位元)，請見下方。

大小參數：
"B" | 低序位元範圍內的旋轉位元值 (8 位元)。
"W" | 低序位元範圍內的旋轉位元值 (16 位元)。
"D" | 低序位元範圍內的旋轉位元值 (32 位元)。 註：低序(low-order) 指的是字串最右方起的順序。

返回值

依照要求位元值計算，返回做過旋轉的數值結果。
位元運算子會被當做 32-位元整數執行。

附註

記住十六位元符號可當做數值計算。

相關

BitShift, BitAND, BitNOT, BitOR, BitXOR, Hex

範例

$x = BitRotate(7, 2)
; x == 3 由 111b 向左旋轉為 1 1100b == 28

$y = BitRotate(14, -2)
; y == 32771 由 1110b 向右旋轉 16 位元為 1000 0000 0000 0011b == 32771

$z = BitRotate(14, -2, "D")
; z == -2147483645 由 1110b 向右旋轉 16 位元為 1000 0000 0000 0000 0000 0000 0000 0011b == 2147483645


Function BitShift

函數說明（Function Reference）

BitShift

按照位元進行「位移」運算動作。

BitShift ( 數值, 位移)

參數

數值 | 要位移的數值。
位移 | 向右位移的數值 (負值則為向左移)。

返回值

依照要求位元值計算，返回做過位移的數值結果。
位元運算子會被當做 32-位元整數執行。

附註

記住十六位元符號可當做數值計算。
向右移等於兩數相減；反之左移為相加。

相關

BitAND, BitNOT, BitOR, BitXOR, Hex, BitRotate

範例

$x = BitShift(14, 2)
; x == 3，經由 1110b 向右位移 11b == 3

$y = BitShift(14, -2)
; y == 56，經由 1110b 向左位移 111000b == 56

$z = BitShift( 1, -31)
; z == -2147483648，在二碼補數中，以負值從右方起算至第 32 個數字


Function BitXOR

函數說明（Function Reference）

BitXOR

按照位元進行「互斥 (XOR)」運算。

BitXOR ( 數值1, 數值2[, 數值 n] )

參數

數值1 | 第一個數值。
數值2 | 第二個數值。
數值 n | [選擇性參數] 第 N 個數值- 可達 255 個指定數值。

返回值

返回做過 XOR 計算的參數結果。
位元運算子會被當做 32-位元整數執行。

附註

記住十六位元符號可當做數值計算。
BitXOR 在當其中有一個是不成對的 1 時則返回 1，否則互斥為 0。

相關

BitAND, BitNOT, BitOR, BitShift, Hex

範例

$x = BitXOR(10, 6) ;x == 12，經由 1010b「XOR」運算 0110b == 1100
MsgBox(4096,"BitXOR", $x)
$x = BitXOR(2, 3, 6) ;x == 7，經由 0010、0011、0110「XOR」運算 = 0111
MsgBox(4096,"BitXOR", $x)


Function Cos

函數說明（Function Reference）

Cos

求某個數的餘弦值 (cosine)。

Cos ( 運算式 )

參數

運算式 弧度。

返回值

返回三角函數餘弦值 (cosine)。

附註

1°= pi / 180 度。

相關

Sin, Tan, ASin, ACos, ATan

範例

$pi = 3.14159265358979
$x = cos($pi / 4)

$degToRad = $pi / 180
$y = Cos(90 * $degToRad) ; 90° 的 cosine


Function Ceiling

函數說明（Function Reference）

Ceiling

向上捨入返回最近的整數值。

Ceiling ( 運算式 )

參數

運算式 任何有效的數字運算式。

返回值

返回整數值。

附註

無。

相關

Int, Number, Floor, Round

範例

Dim $msg

$msg = ""
$msg = $msg & "向上捨入(4.8) = " & Ceiling(4.8) & @CR
$msg = $msg & "向上捨入(4.5) = " & Ceiling(4.5) & @CR
$msg = $msg & "向上捨入(4.3) = " & Ceiling(4.3) & @CR
$msg = $msg & "向上捨入(4) = " & Ceiling(4) & @CR
$msg = $msg & "向上捨入(-4.3) = " & Ceiling(-4.3) & @CR
$msg = $msg & "向上捨入(-4.5) = " & Ceiling(-4.5) & @CR
$msg = $msg & "向上捨入(-4.8) = " & Ceiling(-4.8) & @CR
$msg = $msg & "向上捨入(-4) = " & Ceiling(-4) & @CR

MsgBox(64, "測試", $msg)


Function Exp

函數說明（Function Reference）

Exp

求自然對數 e 的指定運算結果。

Exp ( 運算式 )

參數

運算式 任何有效的數字運算式。

返回值

以 運算式 的升序次方返回 e 值。

附註

e 是自然對數的基準值，大約是 2.71828182845905。

相關

Log

範例

$x = Exp(5) ;返回 148.413159102577
MsgBox(0,"自然對數","自然對數值 = " & $x)


Function Floor

函數說明（Function Reference）

Floor

向下捨入返回至最近的整數值。

Floor ( 運算式 )

參數

運算式 任何有效的數字運算式。

返回值

向下捨入返回數值。

附註

無。

相關

Int, Number, Round, Ceiling

範例

Dim $msg

$msg = ""

$msg = $msg & "向下捨入(4.8) = " & Floor(4.8) & @CR
$msg = $msg & "向下捨入(4.5) = " & Floor(4.5) & @CR
$msg = $msg & "向下捨入(4.3) = " & Floor(4.3) & @CR
$msg = $msg & "向下捨入(4) = " & Floor(4) & @CR
$msg = $msg & "向下捨入(-4.3) = " & Floor(-4.3) & @CR
$msg = $msg & "向下捨入(-4.5) = " & Floor(-4.5) & @CR
$msg = $msg & "向下捨入(-4.8) = " & Floor(-4.8) & @CR
$msg = $msg & "向下捨入(-4) = " & Floor(-4) & @CR

MsgBox(64, "測試", $msg)


Function Log

函數說明（Function Reference）

Log

求某個數的自然對數。

Log ( 運算式 )

參數

運算式 任何正數值。

返回值

成功： | 返回參數的自然對數。
失敗： | 若非正值參數則可能返回 -1.#IND。

附註

@error 始終為 0。

相關

Exp

範例

$x = Log(1000) ;返回 6.90775527898214

$y = Log10(1000) ;返回 3

; 一般 log 指令的使用者定義函數
Func Log10($x)
Return Log($x) / Log(10) ;10 為基本數值
EndFunc

If Log10($x) Then
MsgBox(4096, "", "運算結果為 10。")
Else
MsgBox(4096, "", "失敗！可能非正值參數。")
EndIf


Function Mod

函數說明（Function Reference）

Mod

執行模組運算。

Mod ( 數值1, 數值2 )

參數

數值1 | 被除數。
數值2 | 除數；公約數。

返回值

成功： | 數值1除以數值2後，返回餘數。
失敗： | 如除數為零，返回 -1.#IND。

附註

商數 = 被除數 / 除數
此函數可執行浮點以及整數。

相關

無。

範例

$n = 18
$n = 18
If mod($n, 2) = 0 Then
MsgBox(0,"", $n & " 是一個偶數。")
Else
MsgBox(0, "", $n & " 是一個奇數。")
EndIf

$x = mod(4, 7) ;$x == 4 因為除數 > 被除數

$y = mod(1, 3/4) ;$y == 0.25 因為該除數為帶小數的浮點


Function Random

函數說明（Function Reference）

Random

產生一個浮點偽隨機數。

Random ( [最小值 [, 最大值 [, 旗標]]] )

參數

最小值 | [選擇性參數] 產生隨機數的最小值，預設為 0。
最大值 | [選擇性參數] 產生隨機數的最大值，預設為 1。
旗標 | [選擇性參數] 若此設定為 1 則返回整數結果，預設為一個浮點值。

返回值

成功： | 返回一個介於最小值及最大值間的偽隨機數。
失敗： | 如參數無效則返回 0 並設定 @error 旗標為 1。

附註

預設下隨機函數的返回值是十進位/浮點，如您只要整數/捨去值結果就好，則設定旗標為 1。

如只提供一個引數，則將被解譯為最大值。

如使用介於最小值和最大值之間的整數，則它必須小於 2^31。

關於原始碼的註解說明

此函數使用 Mersenne Twister 的隨機產生器 MT19937，由 Takuji Nishimura、Makoto Matsumoto、Shawn Cokus、Matthe Bellew 及 Isaku Wada 撰寫。

馬其賽旋轉演算法 (Mersenne Twister algorithm) 是一個產生隨機數的著名演算法，在設計的時候就已綜合考量了其它各種產生器的特點。它的週期是 219937-1，在 623 維空間上的分佈是均勻的，質量遠遠大上許多。產生器的速度也很快；它避免了乘法和除法的使用，而且對緩衝區和管線的使用率更助益良多。詳細說明請檢視作者的網頁：http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html。

Copyright (C) 1997 - 2002, Makoto Matsumoto 和 Takuji Nishimura, 所有權利保留

如滿足以下條件，則允許以原始碼格式或二進位格式，經由修改或不修改，授權進行再分發和使用：

1. 再度分發原始碼時，必須保留上述版權說明、此條件清單和以下免責聲明。

2. 如以二進位格式再分發，必須在文件和/或隨分發版本一起提供的其他資料中，複製上述版權說明、此條件清單和以下的免責聲明。

3. 如沒有指定的書面事先許可，不得用貢獻者的名稱簽署或宣傳由此軟體衍生的產品。

此軟體由版權擁有者和貢獻者「照原樣」提供。對於任何明示或暗示的擔保，內含但不限於對商業可行性、針對特定用途的適用性的暗示擔保，我們均不負責。對於任何直接、間接、偶然、特別、典型或因某原因損壞（內含但不限於替代商品或服務的取得；用法、資料或利潤的遺失；或業務中斷等），無論起因是甚麼，無論根據任何責任理論，無論是否在合同、嚴格賠償責任中，版權所有者及其貢獻者均一概不負責。對於由於使用此軟體，而以任何形式出現的民事侵權行為(包括疏忽或其他形式)，版權所有者及貢獻者均不予負責。即使您已被告知這種損壞的可能性也是一樣。

授權書原文：

Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, all rights reserved

1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

2.The names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

相關

Int, Round, SRandom

範例

;投擲銅幣(Flip of coin)
If Random() < 0.5 Then ; 返回介於 0 和 1 之間的數值
$msg = "正面朝上的機率是 50%"
Else
$msg = "反面朝上的機率是 50%"
Endif
MsgBox(0,"投擲結果", $msg )

;擲骰子(Roll of a die)
msgBox(0, "擲骰子", "您轉到的是： " & Random(1, 6, 1) )

$StockPrice = 98
;模擬股票市場 (In the middle of a stock market simulation game)
$StockPriceChange = Random(-10, 10, 1) ; 產生一個介於 -10 和 10 間的整數
$StockPrice = $StockPrice + $StockPriceChange
If $StockPriceChange < 0 Then
MsgBox(4096, "股票變動", "您所持股票已下跌到 $" & $StockPrice)
ElseIf $StockPriceChange > 0 Then
MsgBox(4096, "股票變動", "您所持股票已漲到 $" & $StockPrice)
Else
MsgBox(4096, "股票變動", "您所持股票仍維持在 $" & $StockPrice)
Endif

;隨機字母(Random letter)
If Random() < 0.5 Then
;大寫字母
$Letter = Chr(Random(Asc("A"), Asc("Z"), 1))
Else
;小寫字母
$Letter = Chr(Random(Asc("a"), Asc("z"), 1))
Endif


Function Round

函數說明（Function Reference）

Round

返回某數值精確到指定位的結果。

Round ( 運算式 [, 小數點位數] )

參數

運算式 | 任何有效的數字運算式。
小數點位數 | [選擇性參數] 設定在小數點後第幾位四捨五入，如省略參數，則捨去返回一個整數。

返回值

返回四捨五入值。

附註

小數點位數 參數可以是負數，它允許您設定要在小數點後一位、十位、百位..等做四捨五入。請注意最多只能顯示 15 位數字，還有須注意的是 小數點位數 不會自動在小數點後補零。

相關

Int, Number

範例

$x = Round(-1.582, 1) ;返回 -1.6
$y = Round(3.1415, 9) ;不變更
$z = Round(123.5, -1) ;返回 120


Function Sin

函數說明（Function Reference）

Sin

求某個數的正弦值 (sine) 。

Sin ( 運算式 )

參數

運算式 以度為單位的數值。

返回值

返回三角函數的 sin 正弦值。

附註

1° = pi / 180 度。

相關

Cos, Tan, ASin, ACos, ATan

範例

$pi = 3.14159265358979
$x = sin($pi / 4)
;返回值 0.707106781186547，您應該看成 sqrt(2)/2
;註：sqrt = square-root = 就是開平方根

$degToRad = $pi / 180
$y = Sin(90 * $degToRad) ; 90° 的 sine 值


Function Sqrt

函數說明（Function Reference）

Sqrt

求某個數的平方根。

Sqrt ( 運算式 )

參數

運算式 求其平方根的非負運算式。

返回值

成功： | 返回開平方根結果。
失敗： | 如參數為負數返回 0 並設定 @error 為 1。

附註

要求得 第N位 平方根，請使用次方運算子：x ^ (1/n)
MsgBox(0,"27 的立方根 (cube root) 是：", 27 ^ (1/3) )

相關

Exp, Log

範例

$x = Sqrt(2) ;返回 1.4142135623731
$y = sqrt(9) ;返回 3


Function SRandom

函數說明（Function Reference）

SRandom

設定要產生隨機碼的運算式。

SRandom ( 亂數種子(Seed) )

參數

亂數種子(Seed) 產生隨機數的原始值，數值範圍在 -2^31 到 2^31-1 之間。

返回值

無。

附註

無。

相關

Random

範例

SRandom(12)
$rand=Random()


Function Tan

函數說明（Function Reference）

Tan

求某個數的正切值 (tan) 。

Tan ( 運算式 )

參數

運算式 以度數為單位的數值。

返回值

返回三角函數的正切值(tangent)。

附註

1° = pi / 180 度。
請注意某些角度的 Tan 是 "無限大的" 如：... -3PI/2, -PI/2, PI/2, 3PI/2, 5PI/2, ... Tan 對於這些1/2圓周率 (Pi-halve) 會返回 1.63317787283838e+016。

相關

Sin, Cos, ASin, ACos, ATan

範例

$pi = 3.14159265358979
$x = tan($pi / 4)

$degToRad = $pi / 180
$y = Tan(90 * $degToRad) ;90° 的 Tan 值


Function InputBox

函數說明（Function Reference）

InputBox

顯示以一個輸入框以供使用者輸入資料。

InputBox ( "標題", "提示" [, "預設值" [, "密碼字元" [, 寬度, 高度 [, 左方, 上方 [, 逾時 [, 主控制碼(hwnd)]]]]]] )

參數

標題 | 輸入框的標題。
提示 | 提示即將出現的輸入性質訊息給使用者。
預設值 | 為輸入框開啟時要用到的數值。
密碼字元 | [選擇性參數] 用以取代使用者所有輸入類型的字元。如要讓輸入的真正字串顯示出來，請以空白字串 ("") 定義(預設)，或將第一個字元以空白替代。如您提供了數個字元的字串，則只有第一個字元可用於字元符號。第二個和後面的其它字元有其它特殊用途，請見附註。
寬度 | [選擇性參數] 視窗的寬度。若定義則高度也必須設定，使用 -1 或預設原始寬度的關鍵字。
高度 | [選擇性參數] 視窗的高度。若定義則寬度也必須設定，使用 -1 或預設原始高度的關鍵字。
左方 | [選擇性參數] 輸入框左方。預設值該視窗為置中顯示，若定義則上方也必須設定，請在此參數使用 Default 關鍵字將輸入框水平置中。
上方 | [選擇性參數] 輸入框上方。預設值該視窗為置中顯示，若定義則左方也必須設定，請在此參數使用 Default 關鍵字將輸入框垂直置中。
逾時 | [選擇性參數] 設定要等待幾秒後才自動關閉輸入框。
主控制碼(hwnd) | [選擇性參數] 做為對話框主體的視窗控制碼。

返回值

成功： | 返回輸入的字串。
失敗： | 返回 "" (空白字串) 並設定 @error 如下表：
@Error | 0 = 要求的字串無效。
 | 1 = 已按下取消按鈕。
 | 2 = 已到達限制時間。
 | 3 = 開啟輸入框失敗，此通常是因損壞的引數造成。

附註

輸入框是可以由使用者自行調整大小的，不過最小值約為 190 x 115 像素，預設大小約 250 x 190 像素。

返回的字串不會超過 254 個字元，而且如果輸入的內容中含有 ENTER 或換行符號，則其字串結果將被這些字元的第一個發生事件截短。

密碼範圍的第二個和後面字元可用於限制輸入內容，可將第一個字元用空格填滿讓該字元類型保持為可見狀態。而在第一個字元後置上 M 為表示該輸入框為 強制性(Mandatory) 狀態，換句話說，您將必須輸入某些東西不可。在輸入框無任何內容時，即使您按下 確定 鈕也不會有任何事發生，它將不會做關閉及字串返回動作。

您還可以在密碼內容後面指定最大值，只要在字元後面輸入數字，就可以指定字串的長度了。

相關

MsgBox

範例

;將輸入框置於左上角，當輸入字元時立刻將它們顯示出來
$answer = InputBox("問題", "您在哪個地方出生？", "在地球行星上出生。", "", _
-1, -1, 0, 0)

;要求使用者輸入密碼，別忘記要讓它生效！
$passwd = InputBox("安全性確認", "請輸入密碼：", "", "*")

;要求使用者輸入 1 或 2 個字串回應
;密碼中的字母 M 表示不允許空白字串，而 2 表示最多 2 個字元長度
$value = InputBox("測試", "請輸入 1 或 2 字元密碼。", "", " M2")


Function MsgBox

函數說明（Function Reference）

MsgBox

顯示一個簡單的對話框 (可設定逾時屬性) 。

MsgBox ( 旗標, "標題", "文字" [, 逾時 [, 主控制碼(hwnd)] )

參數

旗標 | 該參數表示訊息框的類型及可用的組合按鈕，請見附註。
標題 | 訊息框的標題。
文字 | 訊息框的文字。
逾時 | [選擇性參數] 逾時秒數。對話框經過多久後自動關閉的時間延遲，預設為 0 完全無延遲。
主控制碼(hwnd) | [選擇性參數] 做為對話框主體的視窗控制碼。

返回值

成功： | 返回按下的按鈕 ID。
失敗： | 若對話框超過時間則返回 -1。

按下的按鈕 | 返回值
確定 | 1
取消 | 2
放棄 | 3
重試 | 4
忽略 | 5
是的 | 6
否 | 7
重試 ** | 10
繼續 ** | 11

附註

旗標參數可以有下列表格所列數種組合數值：

十進位旗標 | 相關按鈕結果 | 十六進位旗標
0 | 確定按鈕。 | 0x0
1 | 確定和取消。 | 0x1
2 | 終止、重試和忽略。 | 0x2
3 | 是、否和取消。 | 0x3
4 | 是與否。 | 0x4
5 | 重試和取消。 | 0x5
6 ** | 取消、重試、繼續。 | 0x6
十進位旗標 | 相關圖示結果 | 十六進位旗標
0 | (無圖示) | 0x0
16 | 錯誤圖示。 | 0x10
32 | 詢問的問號圖示。 | 0x20
48 | 驚歎號圖示。 | 0x30
64 | 由一個圓圈內有 'i' 所組成的訊息圖示。 | 0x40
十進位旗標 | 相關預設結果 | 十六進位旗標
0 | 第一個即為預設按鈕。 | 0x0
256 | 第二個即為預設按鈕。 | 0x100
512 | 第三個即為預設按鈕。 | 0x200
十進位旗標 | 相關程序類型結果 | 十六進位旗標
0 | 應用程式。 | 0x0
4096 | 系統類型 (有圖示的對話框)。 | 0x1000
8192 | 工作類型。 | 0x2000
十進位旗標 | 其它相關各種結果 | 十六進位旗標
0 | (無其它特別項目) | 0x0
262144 | 訊息框(MsgBox) 擁有置頂屬性。 | 0x40000
524288 | 標題與文字為靠右對齊。 | 0x80000

標示 ** 代表只在 Windows 2000/XP 和以上版本才有效

舉例來說，如要指定一個帶 [是/否] 按鈕的系統類型框(SYSTEMMODAL)，則其旗標值將為 4096+4 (或 4100)。如使用十六進位旗標，則就是 0x1000+0x4 (或 0x1004)。

訊息框會出現在螢幕正中央，且自動根據文字內容自行調整。然而該標題若使用系統類型(SYSTEMMODAL) 旗標(4096)，則它將被截去一部份。

若設定 "標題" 等於 預設關鍵字，則使用 @Scriptname。

相關

InputBox, ToolTip, TrayTip, SplashTextOn

範例

MsgBox(4096, "測試", "此對話框將於 10 秒後關閉。", 10)


Function ProgressOff

函數說明（Function Reference）

ProgressOff

關閉進度列視窗。

ProgressOff ( )

參數

無。

返回值

無。

附註

無。

相關

ProgressSet, ProgressOn

範例

ProgressOff()


Function ProgressOn

函數說明（Function Reference）

ProgressOn

建立自訂進度列視窗。

ProgressOn ( "標題", "主文字" [, "次要文字" [, x 座標 [, y 座標 [, 屬性]]]] )

參數

標題 | 進度列視窗標題。
主文字 | 進度列上方的主要文字，粗體字型。
次要文字 | [選擇性參數] 進度列下方的次要文字，標準字形 (預設為空白)。
x 座標 | [選擇性參數] 自進度列視窗左邊起算的位置 (以像素為單位) - 預設置中。
y 座標 | [選擇性參數] 自進度列視窗上方起算的位置 (以像素為單位) - 預設置中。
屬性 | [選擇性參數] 預設為 "始終置頂/有標題"，您可依下表新增選項： 1 = 無邊框、標題視窗(不命名) 2 = 無 "始終置頂" 屬性 16 = 視窗可移動

返回值

無。

附註

要略過選擇性參數，請保留預設值內容，使用：
"" 字串參數
-1 數字參數
如 ProgressOn 被呼叫時已有一個進度列視窗存在，則該視窗將被重繪或移動 (如您要同時跑多個進度列視窗，需使用數個腳本)。

相關

ProgressOff, ProgressSet

範例

ProgressOn("進度計數器", "每秒增加進度：", "0 百分比。")
For $i = 10 to 100 step 10
sleep(1000)
ProgressSet( $i, $i & " 百分比。")
Next
ProgressSet(100 , "已完成", "進度執行完畢。")
sleep(500)
ProgressOff()


Function ProgressSet

函數說明（Function Reference）

ProgressSet

設定之前建立的進度列視窗的座標位置、文字等屬性。

ProgressSet ( 百分比 [, "次要文字" [, "主文字"]] )

參數

百分比 | 以百分比 (數值介於 0 和 100 之間) 為單位設定進度列。
次要文字 | [選擇性參數] 設定進度列下方的次要文字，標準字形 (預設為空白)。
主文字 | [選擇性參數] 設定進度列上方的主要文字，粗體字型。

返回值

無。

附註

請注意次要文字引數應該在主文字前。

相關

ProgressOff, ProgressOn

範例

ProgressOn("進度計數器", "每秒增加進度：", "0 百分比。")
For $i = 10 to 100 step 10
sleep(1000)
ProgressSet( $i, $i & " 百分比。")
Next
ProgressSet(100 , "已完成", "進度執行完畢。")
sleep(500)
ProgressOff()


Function SplashImageOn

函數說明（Function Reference）

SplashImageOn

建立一個自訂的圖片 (彈出畫面/封面) 視窗。

SplashImageOn ( "標題", "檔案" [, 寬度 [,高度 [, x 座標 [, y 座標 [, 選項]]]]] )

參數

標題 | 彈出視窗的標題。
檔案 | 影像的完整路徑\檔案名稱 (BMP, GIF, 或 JPG 檔)。
寬度 | [選擇性參數] 視窗的像素寬度 (預設為 500)。
高度 | [選擇性參數] 視窗的像素高度 (預設為 400)。
x 座標 | [選擇性參數] 彈出視窗自左方的像素距離位置 (預設為置中)。
y 座標 | [選擇性參數] 彈出視窗自上方的像素距離位置 (預設為置中)。
選項 | [選擇性參數] 新增您要的選項，預設為 '始終置頂並帶標題'： 1 = 細邊框無標題視窗 2 = 無 "始終置頂" 屬性 16 = 可移動視窗

返回值

無。

附註

要跳過選項參數值，保留預設內容使用 -1 數值即可。

影像將自動調整寬度及高度大小而且必須為點陣圖、GIF、或 JPEG 圖檔。圖示 (ICOs) 將不會顯示，不過視窗仍會出現。PNG 圖檔在載入失敗、或檔案/路徑無效時，都會拋出一個錯誤訊息。

圖片是無法崁入執行檔的，除非您用 FileInstall 函數。

此函數一次只能同時顯示一個 彈出圖片/文字視窗；所以如您要實現循環播放數個圖片/文字的特效，只要簡單地在每次彈出新訊息時，再次呼叫 SplashImageOn/SplashTextOn 函數即可。

如將彈出視窗設定 "選項"=1，則視窗無法移動且點選也不會為活動狀態。

相關

SplashOff, SplashTextOn

範例

$destination = @Systemdir & "\oobe\images\mslogo.jpg"

SplashImageOn("彈出畫面", $destination,250,50)
Sleep(3000)
SplashOff()


Function SplashOff

函數說明（Function Reference）

SplashOff

關閉彈出畫面。

SplashOff ( )

參數

無。

返回值

無。

附註

無。

相關

SplashImageOn, SplashTextOn

範例

SplashTextOn("範例", "彈出畫面")
Sleep(5000)
SplashOff()


Function SplashTextOn

函數說明（Function Reference）

SplashTextOn

建立一個自訂的文字 (彈出畫面) 視窗。

SplashTextOn ( "標題", "文字" [, w [, h [, x 座標 [, y 座標 [, 選項 [, "字型名稱" [, 字型大小 [, 字型寬度 ]]]]]]]] )

參數

標題 | 彈出視窗的標題。
文字 | 彈出視窗的文字。
w | [選擇性參數] 視窗的像素寬度 (預設為 500)。
h | [選擇性參數] 視窗的像素高度 (預設為 400)。
x 座標 | [選擇性參數] 彈出視窗自左方的像素距離位置 (預設為置中)。
y 座標 | [選擇性參數] 彈出視窗自上方的像素距離位置 (預設為置中)。<
選項 | [選擇性參數] 新增選項 - 預設為 '置中對齊/始終置頂/帶標題'： 0 = 置中對齊/始終置頂/帶標題 (預設) 1 = 細邊框無標題視窗 2 = 無 "始終置頂" 屬性 4 = 文字靠左對齊 8 = 文字靠右對齊 16 = 可移動視窗 32 = 文字垂直置中
字型名稱 | [選擇性參數] 使用的字型 (如字型為 "" 或未找到檔案，則使用系統預設字型)。
字型大小 | [選擇性參數] 字型大小 (預設 12，標準大小有：6 8 9 10 11 12 14 16 18 20 22 24 26 28 36 48 72)。
字型寬度 | [選擇性參數] 字型寬度 (0 - 1000, 預設 = 400 = 標準)；A 值 > 1000 的話則視為零。

返回值

返回彈出視窗的控制碼，以提供給 ControlSetText 使用。

附註

要跳過選項參數值，請保留預設內容，使用：
"" 代表一個字串參數
-1 代表一個數字參數

此函數一次只能同時顯示一個 彈出圖片/文字視窗；所以如您要實現循環播放數個圖片/文字的特效，只要簡單地在每次彈出新訊息時，再次呼叫 SplashImageOn/SplashTextOn 函數即可。

最好的做法就是使用 ControlSetText 來更新文字，如此就不會有閃爍的問題...
如為數行置中的文字，ControlSetText 將不會覆寫由 SplashTextOn 建立的行數編號。

如將彈出視窗設定 "選項"=1，則視窗無法移動且點選也不會為活動狀態。

標準字型包括：
Arial, Comic Sans MS, Courier New, Lucida Console, Microsoft Sans Serif, System, Tahoma, Times New Roman, 和 WingDings
詳細請見「附錄」的完整字型清單。

請使用 @LF 讓數行文字顯示。

相關

SplashOff, SplashImageOn, ControlSetText, ToolTip

範例

SplashTextOn("標題", "訊息在此顯示。", -1, -1, -1, -1, 4, "", 24)
Sleep(3000)
SplashOff()

;; 閃爍
$message = ""
SplashTextOn("閃爍標題", $message, -1, -1, -1, -1, 4, "")
For $x = 1 to 20
$message = $message & $x & @LF
SplashTextOn("閃爍標題", $message, -1, -1, -1, -1, 4, "")
Sleep(100)
Next

;; 平滑
$message = ""
SplashTextOn("閃爍標題", $message, -1, -1, -1, -1, 4, "")
For $x = 1 to 20
$message = $message & $x & @LF
ControlSetText("閃爍標題", "", "靜態視窗1", $message)
sleep(100)
Next


Function ToolTip

函數說明（Function Reference）

ToolTip

在螢幕的任意位置顯示一個工具提示。

ToolTip ( "文字" [, x [, y [, "標題" [, 圖示 [, 選項]]]]] )

參數

文字 | 提示文字 (空白字串則移除提示)。
x, y | [選擇性參數] 提示的 x,y 座標位置。
標題 | [選擇性參數] 工具提示的標題 需要 IE5+ 的支援
圖示 | [選擇性參數] 事先定義要顯示在下個標題的圖示：(需要 IE5+ 的支援) 必須有標題欄： 0 = 無圖示, 1 = 訊息圖示, 2 = 警告圖示, 3 = 錯誤圖示
選項 | [選擇性參數] 設定不同選項以決定要如何顯示工具提示 (可以相加)： 1 = 顯示水球通知提示 (需要 IE5+ 的支援) 2 = 在控制項中央 x,y 座標顯示，而不會從左上角計算位置 4 = 如成功會在顯示監視器可見範圍內，以強制性方式彈出提示。如您使用一個以上的監視器(螢幕)，則該提示會 "橫跨(snap-to)" 到鄰近的另一個監視器畫面上。

返回值

成功： | 返回值 1。
失敗： | 當標題長度大於 99 時返回 0。

附註

要略過選擇性參數，請保留它的原始預設內容，用預設關鍵字即可。

如省略 x 和 y 座標值，則提示將被置於滑鼠游標旁邊。
提示出現後會一直保留直到腳本終止或呼叫 ToolTip("") 為止。
您可能須使用 @CR 或 @LF 建立多行工具提示。
要顯示圖示，您須指定一個非空白的標題，該圖示將顯示在標題欄位上，所以必須有一個主視窗做為標題。
如使用置中旗標，提示的中心點將會是指定的座標位置；如用水球並置中旗標，則主文字 (stem) 會在水球提示框中間顯示出來，並出現在您設定的位置上。

相關

TrayTip, Default

範例

; 這個將在螢幕左上角建立一個提示
ToolTip("這是一個文字提示", 0, 0)
Sleep(2000) ; 呼叫 Sleep 指令給提示一些時間顯示


Function AdlibDisable

函數說明（Function Reference）

AdlibDisable

關閉 Adlib 功能。

AdlibDisable ( )

參數

無。

返回值

無。

附註

無。

相關

AdlibEnable

範例

AdlibDisable()


Function AdlibEnable

函數說明（Function Reference）

AdlibEnable

開啟 Adlib 功能。

AdlibEnable ( "函數" [, 時間] )

參數

函數 | 呼叫的 adlib 函數。
時間 | [選擇性參數] 指定每隔多少毫秒就呼叫函數一次，預設值為 250 毫秒。

返回值

無。

附註

每隔 250 毫秒（或 指定時間）呼叫指定的函數，通常用來檢查是否遇到各種無法預料的錯誤。例如，您可以在腳本中使用 adlib，處理腳本本身可能會彈出的各種不可預知的錯誤提示視窗。
adlib 函數應該盡可能的簡單，因為它要頻繁地執行而且在執行期間主腳本將被暫停。另外，您應該小心使用時間參數以免導致 CPU 負載過重。

相關

AdlibDisable, Call

範例

AdlibEnable("myadlib")
;...
Exit

Func myadlib()
If WinActive("錯誤") Then
;...
EndIf
EndFunc


Function AutoItWinGetTitle

函數說明（Function Reference）

AutoItWinGetTitle

取得 AutoIt 視窗的標題名稱。

AutoItWinGetTitle ( )

參數

無。

返回值

返回含 AutoIt 視窗標題的字串。

附註

無。

相關

AutoItWinSetTitle, WinGetTitle

範例

$a = AutoItWinGetTitle()


Function AutoItWinSetTitle

函數說明（Function Reference）

AutoItWinSetTitle

修改 AutoIt 視窗的標題名稱。

AutoItWinSetTitle ( "新標題" )

參數

新標題 給視窗的新標題。

返回值

無。

附註

AutoIt 視窗通常是隱藏的，變更標題的目標為允許其它程式 (或其它 AutoIt 腳本) 與 AutoIt 互動。

相關

AutoItWinGetTitle, WinSetTitle

範例

AutoItWinSetTitle("我的 AutoIt 視窗")


Function BlockInput

函數說明（Function Reference）

BlockInput

關閉/開啟滑鼠與鍵盤。

BlockInput ( 旗標 )

參數

旗標 1 = 關閉使用者輸入功能
0 = 開啟使用者輸入功能

返回值

成功： | 返回 1。
失敗： | 返回 0， 始終開啟或不使用 #requireAdmin。

附註

若開啟了 BlockInput，將不能傳送 Alt 鍵！
下清單格列出於不同 Windows 系統下的 BlockInput 各類動作。然而在任何平台上按下 Ctrl+Alt+Del 後將會重開啟讓使用者輸入，因為這是 Windows API 的功能。

作業系統 | "BlockInput" 結果
Windows 2000 | 封鎖使用者輸入功能並由 AutoIt 替代大部份的輸入。
Windows XP | 封鎖使用者輸入功能並由 AutoIt 替代大部份的輸入。請見下方的例外情況。
Windows Vista | 封鎖使用者輸入功能，依使用 #requireAdmi 來決定是否由 AutoIt 替代大部份的輸入。請見下方的例外情況。

若您用的是 Windows XP 系統，因為受到 SP1 及 SP2 間釋出更新修補版本的限制，所以 Blockinput 會有「無法傳送」ALT 鍵的情況。此問題在 XP SP2 上已修復了。

請注意某些函數如 WinMove() 或 Send() 在當 BlockInput 啟動時仍舊可以執行，這是因為該 BlockInput 只會影響經由 使用者互動 來達成鍵盤或滑鼠輸入的功能，而不是由 AutoIt 函數來決定該如何完成 (其餘的部份在上方表格有說明)。

相關

Send

範例

BlockInput(1)

Run("notepad")
WinWaitActive("[未命名 - 記事本]")
Send("{F5}") ;貼上時間和日期

BlockInput(0)


Function Break

函數說明（Function Reference）

Break

允許或禁止使用者從腳本程式的常駐選單中離開。

Break ( 模式 )

參數

模式 設定腳本結束模式：
1 = 結束已開啟 (使用者可以結束) (預設)
0 = 結束已關閉 (使用者無法結束)

返回值

無。

附註

請只在有適當理由情況下，才關閉結束功能。
AutoIt 通常在執行時會建立一個常駐圖示，而且在圖示上點選右鍵可以允許使用者暫停或結束腳本。若 Break 設定關閉(0)，那麼使用者將無法用這種模式結束程式執行。

相關

無。

範例

Break(0) ;關閉結束功能


Function Call

函數說明（Function Reference）

Call

呼叫使用者自訂函數。

Call ( "函數" [, 參數1 [, 參數2 [, 參數N ]]] )

參數

函數 | 被呼叫的函數名稱。
參數 | 引數將會被傳送給函數供呼叫。

返回值

成功： | 返回呼叫函數的返回值。若呼叫的函數有設定 @error 和 @extendedReturns 的話，兩者可能內含該數值。
失敗： | 若函數不存在或參數值無效，將 @error 設定為 0xDEAD，@extended 則設定為 0xBEEF。

附註

「函數」 不能是內建於 AutoIt 的函數或外掛套件函數。
此函數可以傳送引數給函數，然而，當 ByRef 參數不被支援時，則是無法用任何模式接收 ByRef 參數的。
不過一個特別的群組(Array) 可以取代單獨參數被傳送，此群組的第一個類別須設定 "CallArgArray"，則從 1 - n 引數可以替代單獨的參數，各個傳送到指定的函數中。而若是使用此特別的群組，則沒有其它引數可被傳送到 Call()，請見下面的實際範例說明。
Call() 它本身既可以設定 @error，也可以是設定了 @error 的「被呼叫函數」。若 Call() 設定了 @error 值，則 0xDEAD 和 @extended 同樣也會被設為 0xBEEF。詳細請見範例 - 測試一個找不到函數的示範。

相關

AdlibEnable

範例

; 這是允許無引數的函數呼叫
Call("Test1")

; 此為呼叫函數允許一個引數並傳遞之
Call("Test2", "這是來自 Call() 的訊息!")

; 此示範了如何使用特別群組引數
Global $aArgs[4]
$aArgs[0] = "CallArgArray" ; 這是必定要的，不然 Call() 就無法將群組識別為內含的引數了
$aArgs[1] = "這是一個字串" ; 參數一是一個字串
$aArgs[2] = 47 ; 參數二是一個數字
Global $array[2]
$array[0] = "群組類別 0"
$array[1] = "群組類別 1"
$aArgs[3] = $array ; 參數三是一個群組(Array)

; 我們已經順利建立了特別群組，現在要呼叫函數
Call("Test3", $aArgs)

; 測試呼叫一個不存在的函數
; 此測試顯示適當的方法，利用檢查 @error 和 @extended 是否包括無效的值
Local Const $sFunction = "DoesNotExist"
Call($sFunction)
If @error = 0xDEAD And @extended = 0xBEEF Then MsgBox(4096, "", "函數不存在。")

Func Test1()
MsgBox(4096, "", "您好")
EndFunc

Func Test2($sMsg)
MsgBox(4096, "", $sMsg)
EndFunc

Func Test3($sString, $nNumber, $aArray)
MsgBox(4096, "", "字串是：" & @CRLF & $sString)
MsgBox(4096, "", "數字是："& @CRLF & $nNumber)
For $i = 0 To UBound($aArray) - 1
MsgBox(4096, "", "群組 [" & $i & "] 內含：" & @CRLF & $aArray[$i])
Next
EndFunc


Function CDTray

函數說明（Function Reference）

CDTray

彈出或關閉光碟機拖盤。

CDTray ( "裝置", "狀態" )

參數

裝置 | 要控制的光碟機裝置代號，格式為：D:, E:, 等等。
狀態 | 指定要開啟或關閉光碟機："open" 或 "closed"。

返回值

成功： | 返回值 1。
失敗： | 若光碟機已被 CD 燒錄軟體鎖定或該裝置代號並非光碟機，則返回 0。

附註

CDTray 照理也能用於控制虛擬光碟機，如 DAEMON 工具。
CDTray 不能用於控制非本機/映射的光碟機；CDTray 只能執行在能實際控制光碟機的電腦上。
CDTray("X:", "closed") 對那些只能手動關閉的攜帶型光碟機，則返回 0。

相關

DriveGetType, DriveStatus

範例

; 開啟裝置 E: 的光碟機
CDTray("E:", "open")


Function Execute

函數說明（Function Reference）

Execute

執行某個運算式。

Execute ( 字串 )

參數

字串 陳述運算式以進行求取數值的字串。

返回值

成功： | 返回求取數值運算式的值。
失敗： | 返回 "" (空白字串) 並設定 @error 不為 0。

附註

無。

相關

Assign, Eval, Call

範例

$a=1
$v=Execute("$a+1") ; $v 設定為 2
MsgBox(0,"相加","相加數值 = " & $v)


Function SetError

函數說明（Function Reference）

SetError

手動設定巨集 @error 的值。

SetError ( 代碼 [, 進階參數 [, 返回值]] )

參數

代碼 | 設定 @error 巨集要求的數值 (整數)。
進階參數 | 設定 @extended 巨集的選擇性數值 (整數)，這邊設定的巨集與 SetExtended() 函數相同。
返回值 | 覆寫預設值並返回此參數。

返回值

預設為無，不過若有選擇的返回參數值被傳遞，則此函數將返回該值。

附註

當設定此函數的 @error 為 0 時，除非 SetError() 被呼叫，那麼 @error 將在此函數結束後保留為 0。此意味為了讓 @error 在一個函數返回後被設定，它必須明確定義。這也表示說，如您在一個 While-WEnd 內做迴圈測試時，可能須備份 @error 在變數內的狀態。
進階參數是可以選擇性使用的，它只能用一種方法同時設定 @error 和 @extended 兩個；如只有 @extended 需要設定，則建議您換用 SetExtended() 函數。

相關

SetExtended

範例

$result = myDiv(5, 1)
If @error Then
MsgBox(4096,"錯誤", "它被零分隔。")
Else
MsgBox(4096, "結果", $result)
EndIf
Exit

Func myDiv($dividend, $divisor)
If $dividend = 0 And $divisor = 0 Then
SetError(2) ;無法確定的格式 0/0
ElseIf $divisor = 0 Then
SetError(1) ;被零整個分隔
EndIf
Return $dividend / $divisor
EndFunc


Function SetExtended

函數說明（Function Reference）

SetExtended

手動設定巨集 @extended 的值。

SetExtended ( 代碼 [, 返回值] )

參數

代碼 | 設定 @extended 巨集要求的數值 (整數)。
返回值 | 覆寫預設值並返回此參數。

返回值

預設為無，不過若有選擇的返回參數值被傳遞，則此函數將返回該值。

附註

當設定此函數的 @extended 為 0 時，除非 SetExtended() 被呼叫，那麼 @extended 將在此函數結束後保留為 0。此意味為了讓 @extended 在一個函數返回後被設定，它必須明確定義。這也表示說，如您在一個 While-WEnd 內做迴圈測試時，可能須備份 @extended 在變數內的狀態。

相關

SetError

範例

SetExtended(10)
MsgBox(4096, "@Extended 的返回值是： -------", @extended)


Function VarGetType

函數說明（Function Reference）

VarGetType

返回變數運算式整數類型。

VarGetType ( 運算式 )

參數

運算式 一組用來檢查內部類型的運算式。

返回值

返回一個代表運算式類型的字串。
@extended 會以數字設定 AutoIt 內部的值。

附註

當 IsInt 嘗試轉換一個字串或浮點時，會返回不同的結果。

相關

IsInt, IsFloat, IsString, IsBinary, IsArray, IsDllStruct, IsHwnd, IsObj, IsBool, IsKeyword

範例

$int = 1
$float = 2.0
Msgbox(0, "類型", "$int 是：" & VarGetType($int) & @CRLF & "$float 是：" & VarGetType($float) )


Function MouseClick

函數說明（Function Reference）

MouseClick

執行滑鼠點選動作。

MouseClick ( "按鈕" [, x, y [, 點選 [, 速度 ]]] )

參數

按鈕 | 點選的按鈕指令： "left"(左), "right"(右), "middle"(中), "main"(主要按鈕), "menu"(選單), "primary"(第一個), "secondary"(第二個)。
x, y | [選擇性參數] 移動滑鼠的 x/y 座標值。如未提供 x 和 y 的座標，則用目前位置(預設)。
點選 | [選擇性參數] 滑鼠點選的次數。預設為 1。
速度 | [選擇性參數] 移動滑鼠的速度，範圍 1 (最快) 到 100 (最慢)。速度為 0 即立刻移動，預設速度為 10。

返回值

成功： | 返回值 1。
失敗： | 返回 0，該按鈕不在清單上。

附註

如按鈕是一個空白字串，則預設點選左鍵。

若使用者已經在控制台中將左右鍵互換，那麼行為將會不同：
"Left" 和 "right" 始終都會點選該按鈕，不論它們是否已經互換過了。
"primary" 或 "main" 按鈕為主要的點選指令，則為相反不論如何都會互換。
"secondary" 或 "menu" 按鈕通常會呼叫內容選單，不論互換與否皆無影響。

按鈕指令 | 一般按鈕 | 互換
"" | 左 | 左
"left" | 左 | 左
"middle" | 中 | 中
"right" | 右 | 右
"primary" | 左 | 右
"main" | 左 | 右
"secondary" | 右 | 左
"menu" | 右 | 左

相關

MouseClickDrag, MouseGetPos, MouseMove, MouseCoordMode (Option), MouseClickDelay (Option)

範例

; 點擊兩下滑鼠貼上
MouseClick("left")
MouseClick("left")

; 在 0,500 點擊兩下
MouseClick("left", 0, 500, 2)

; 在 0,500 點擊兩下的「安全版本」- 進入使用者帳號的控制台設定
MouseClick("primary", 0, 500, 2)


Function MouseClickDrag

函數說明（Function Reference）

MouseClickDrag

執行滑鼠拖曳動作。

MouseClickDrag ( "按鈕", x1, y1, x2, y2 [, 速度] )

參數

按鈕 | 點選的按鈕指令： "left"(左), "right"(右), "middle"(中), "main"(主要按鈕), "menu"(選單), "primary"(第一個), "secondary"(第二個)。
x1, y1 | 開始拖曳動作的起點 x/y 座標值。
x2, y2 | 結束拖曳動作的終點 x/y 座標值。
速度 | [選擇性參數] 移動滑鼠的速度，範圍 1 (最快) 到 100 (最慢)。速度為 0 即立刻移動，預設速度為 10。

返回值

成功： | 返回值 1。
失敗： | 返回 0，該按鈕不在清單上。

附註

如按鈕是一個空白字串，則預設點選左鍵。

若使用者已經在控制台中將左右鍵互換，那麼行為將會不同：
"Left" 和 "right" 始終都會點選該按鈕，不論它們是否已經互換過了。
"primary" 或 "main" 按鈕為主要的點選指令，則為相反不論如何都會互換。
"secondary" 或 "menu" 按鈕通常會呼叫內容選單，不論互換與否皆無影響。
請檢視清單：MouseClick 有詳細的解釋說明。

相關

MouseClick, MouseGetPos, MouseMove, MouseCoordMode (Option), MouseClickDragDelay (Option)

範例

; 從 0,200 到 600, 700 左鍵拖曳
MouseClickDrag("left", 0, 200, 600, 700)


Function MouseDown

函數說明（Function Reference）

MouseDown

在當前位置產生一個滑鼠按下 (按鍵）事件。

MouseDown ( "按鈕" )

參數

按鈕 點選的按鈕指令： "left"(左), "right"(右), "middle"(中), "main"(主要按鈕), "menu"(選單), "primary"(第一個), "secondary"(第二個)。

返回值

成功： | 返回值 1。
失敗： | 返回 0，該按鈕不在清單上。

附註

請檢視：MouseClick 附註。
使用者請謹記： 每一個 MouseDown 通常最後都一定有相同的 MouseUp 對應事件。

相關

MouseUp, MouseClick, MouseClickDrag, MouseGetPos, MouseMove, MouseCoordMode (Option), MouseClickDownDelay (Option)

範例

MouseDown("left")
Sleep(100)
MouseUp("left")


Function MouseGetCursor

函數說明（Function Reference）

MouseGetCursor

返回目前滑鼠游標的游標 ID 碼。

MouseGetCursor ( )

參數

無。

返回值

返回一個游標 ID 編號：
0 = 不明(UNKNOWN) - 此包括箭頭及抓取、連結的手形圖示
1 = 在背景作業(APPSTARTING)
2 = 箭頭、標準選擇(ARROW)
3 = 選擇精確度(CROSS)
4 = 選擇說明(HELP)
5 = 選擇文字(IBEAM)
6 = 圖示、手寫(ICON)
7 = 無法使用(NO)
8 = 調整大小(SIZE)
9 = 移動(SIZEALL)
10 = 對角線調整2(SIZENESW)
11 = 調整垂直大小(SIZENS)
12 = 對角線調整1(SIZENWSE)
13 = 調整水平大小(SIZEWE)
14 = 其它選擇(UPARROW)
15 = 忙碌中(WAIT)

附註

無。

相關

MouseGetPos

範例

sleep(2000) ;允許回報 ID 前即移動滑鼠的時間延遲

;建立一個群組，告訴我們某個 ID 編號代表的意義
$IDs = StringSplit("在背景作業|標準選擇|選擇精確度|選擇說明|選擇文字|手寫|無法使用|" & _
"調整大小|移動|對角線調整2|調整垂直大小|對角線調整1|調整水平大小|其它選擇|忙碌中", "|")
$IDs[0] = "Unknown"

$cursor = MouseGetCursor()
MsgBox(4096, "ID = " & $cursor, "該碼表示：" & $IDs[$cursor])


Function MouseGetPos

函數說明（Function Reference）

MouseGetPos

取得當前滑鼠的座標位置。

MouseGetPos ( [座標向量] )

參數

座標向量(dimension) 一個選澤性引數，為返回值送回的座標向量值，請見返回值說明。

返回值

座標向量 | 數值
無 | 返回一個內含兩組座標類型：$array[0] = X 水平座標, $array[1] = Y 垂直座標 的群組。
0 | 返回等同整數的 X 值。
1 | 返回等同整數的 Y 值。

如座標向量不是一個數字，則 @error 將設為 1。

附註

請檢視 MouseCoordMode 關於絕對/相對位置的設定說明，如果位置是相對的，數字可能為負值。

相關

MouseClick, MouseClickDrag, MouseMove, MouseCoordMode (Option)

範例

$pos = MouseGetPos()
MsgBox(0, "滑鼠的 x,y 值 --", $pos[0] & "," & $pos[1])


Function MouseMove

函數說明（Function Reference）

MouseMove

移動滑鼠游標。

MouseMove ( x, y [, 速度] )

參數

x | 滑鼠在螢幕上移動的 x 座標。
y | 滑鼠在螢幕上移動的 y 座標。
速度 | [選擇性參數] 移動滑鼠的速度，範圍 1 (最快) 到 100 (最慢)。速度為 0 即立刻移動，預設速度為 10。

返回值

在 MouseMove 做非即時動作時，使用者移動滑鼠的動作會造成干擾。
如 MouseCoordMode 位置是相對的，數字可能為負值。

附註

無。

相關

MouseClick, MouseClickDrag, MouseGetPos, MouseCoordMode (Option)

範例

MouseMove(10, 100)
MouseMove(700, 700, 0)


Function MouseUp

函數說明（Function Reference）

MouseUp

在當前位置產生一個滑鼠釋放 (按鍵）事件。

MouseUp ( "按鈕" )

參數

按鈕 點選的按鈕指令： "left"(左), "right"(右), "middle"(中), "main"(主要按鈕), "menu"(選單), "primary"(第一個), "secondary"(第二個)。

返回值

成功： | 返回值 1。
失敗： | 返回 0，該按鈕不在清單上。

附註

請檢視：MouseClick 附註。
使用者請謹記： 每一個 MouseDown 通常最後都一定有相同的 MouseUp 對應事件。

相關

MouseDown, MouseClick, MouseClickDrag, MouseGetPos, MouseMove, MouseCoordMode (Option)

範例

MouseDown("left")
Sleep(100)
MouseUp("left")


Function MouseWheel

函數說明（Function Reference）

MouseWheel

向上或向下捲動滑鼠滾輪事件，僅支援NT/2000/XP。

MouseWheel ( "方向" [, 點選] )

參數

方向 | "up"(向上) 或 "down"(向下) → 上下方向為指令。
點選 | [選擇性參數] 移動滾輪的次數，預設為 1。

返回值

成功： | 返回值 1。
失敗： | 返回 0，無法辨識方向。

附註

此函數只能在 NT, 2000, XP 或更新的系統版本上執行。

相關

MouseClick, MouseClickDrag, MouseGetPos, MouseMove, MouseCoordMode (Option)

範例

; 移動滾輪 10 次
MouseWheel("up", 10)


Function FtpSetProxy

函數說明（Function Reference）

FtpSetProxy

設定連線 FTP 時使用的代理伺服器。

FtpSetProxy ( 模式 [, "位址：連接埠" [, "使用者名稱", "密碼"]] )

參數

模式 | 使用的代理伺服器模式： 0 = 使用目前的 Internet Explorer 的代理設定 (預設) 1 = 不使用代理伺服器 (直接存取) 2 = 使用指定的代理伺服器
位址：連接埠 | [選擇性參數] 使用的位址及代理伺服器連接埠，請見下方附註。
使用者名稱 | [選擇性參數] 代理伺服器需要的使用者名稱。
密碼 | [選擇性參數] 代理伺服器需要的密碼。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

此函數要求必須已安裝 Internet Explorer 3 或更高的版本方能執行。

只支援 CERN 代理伺服器。

代理伺服器通常都是由網路位址和連接埠號碼建立組成，大部份的 ISP 業者會使用 8080 埠。若您的代理伺服器是 "www.proxy.com" 和 "8080" 埠，那您就如此設定代理伺服器：
FtpSetProxy(2, "www.proxy.com:8080")

大部份的代理伺服器不需要使用者名稱和密碼。

相關

HttpSetProxy, InetGet, InetGetSize

範例

; 不使用代理伺服器
FtpSetProxy(1)

; 使用 IE 預設的代理伺服器
FtpSetProxy(0)

; 使用代理伺服器 "www-cache.myisp.net" 及 8080 埠
FtpSetProxy(2, "www-cache.myisp.net:8080")


Function HttpSetProxy

函數說明（Function Reference）

HttpSetProxy

設定連線HTTP時使用的代理伺服器。

HttpSetProxy ( 模式[, "代理伺服器：連接埠" [, "使用者名稱", "密碼"]] )

參數

模式 | 使用的代理模式： 0 = 使用 Internet Explorer 設定的代理伺服器 (預設) 1 = 不使用代理伺服器 (直接存取) 2 = 使用指定代理伺服器
代理伺服器：連接埠 | [選擇性參數] 代理伺服器使用的位址及連接埠，請見下方附註。
使用者名稱 | [選擇性參數] 使用者名稱。
密碼 | [選擇性參數] 代理伺服器密碼。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

此函數要求必須已安裝 Internet Explorer 3 或更高的版本方能執行。

只支援 CERN 代理伺服器。

代理伺服器通常都是由網路位址和連接埠號碼建立組成，大部份的 ISP 業者會使用 8080 埠。若您的代理伺服器是 "www.proxy.com" 和 "8080" 埠，那您就如此設定代理伺服器：
HttpSetProxy(2, "www.proxy.com:8080")

大部份的代理伺服器不需要使用者名稱和密碼。

僅支援 CERN 代理伺服器。

相關

FtpSetProxy, InetGet, InetGetSize

範例

; 不使用代理伺服器
HttpSetProxy(1)

; 使用 IE 預設的代理伺服器
HttpSetProxy(0)

; 代理伺服器 "www-cache.myisp.net" 及連接埠 8080
HttpSetProxy(2, "www-cache.myisp.net:8080")


Function InetGet

函數說明（Function Reference）

InetGet

利用HTTP或FTP協定從網際網路上下載指定檔案。

InetGet ( "URL" [,"檔案名稱" [, 下載 [, 背景參數]]] )

參數

URL | 要下載檔案的 URL，請見附註，可以 "結束"。
檔案名稱 | [選擇性參數] 下載的本地端檔案。
下載 | [選擇性參數] 0 = 如可以則從本機快取取得檔案 (預設)。 1 = 強制從遠端網站下載。
背景參數 | [選擇性參數] 0 = 等下載完成才繼續 (預設)。 1 = 立即返回並於背景下載檔案 (請見附註)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

此函數要求必須已安裝 Internet Explorer 3 或更高的版本方能執行。

URL 參數應當是如此格式："http://www.somesite.com/path/file.html" - 就跟我們在網頁瀏覽器中輸入的位址格式一樣。

如連線時需要指定使用者名稱及密碼，只要在伺服器名稱前面加上前綴即可："username:password@"，例如：
"http://myuser:mypassword@www.somesite.com"

InetGet 函數須用 http:// https:// 及 ftp:// 執行 - 當使用FTP要修改傳送類型的話請檢視 FtpBinaryMode 選項說明。

"背景(background)" 參數：
在預設情況下，此函數會在完成下載之後才返回。如果下載的檔案較大，那麼這樣的處理模式不是我們想要的。如果把背景參數 設為 1 則函數將立即返回，下載工作則在背景繼續進行。當在此模式下，會有兩個巨集可使用以持續追蹤：
@InetGetActive = 1 正在進行；或是 0 已完成
@InetGetBytesRead = 已下載檔案位元組，如果出錯則為 -1

請注意，每次只可以啟動一個下載，如果您在上一個下載完成前，再次呼叫此函數的話將會失敗。

如果要取消下載請呼叫函數，只要將第一個參數設定為 "abort" 如：

InetGet("abort")

相關

FtpBinaryMode (Option), FtpSetProxy, InetGetSize, HttpSetProxy

範例

InetGet("http://www.mozilla.org", "C:\foo.html")
InetGet("http://www.autoitscript.com", "C:\mydownload.htm", 1)
InetGet("ftp://ftp.mozilla.org/pub/mozilla.org/README", "README.txt", 1)

; 進階範例 - 在背景下載檔案
InetGet("http://www.nowhere.com/somelargefile.exe", "test.exe", 1, 1)

While @InetGetActive
TrayTip("下載中", "位元組 = " & @InetGetBytesRead, 10, 16)
Sleep(250)
Wend

MsgBox(0, "讀取到的位元組", @InetGetBytesRead)


Function InetGetSize

函數說明（Function Reference）

InetGetSize

以位元組為單位返回存放在網際網路上的指定檔案大小。

InetGetSize ( "URL" )

參數

URL 要下載檔案的 URL，請見附註，可以 "結束"。

返回值

成功： | 返回檔案位元組大小。
失敗： | 返回 0 並設定 @error 為 1。

附註

此函數要求必須已安裝 Internet Explorer 3 或更高的版本方能執行 (對於 ftp:// URL 則必須有 IE5！)。

URL 參數應當是如此格式："http://www.somesite.com/path/file.html" - 就跟我們在網頁瀏覽器中輸入的位址格式一樣。

如連線時需要指定使用者名稱及密碼，只要在伺服器名稱前面加上前綴即可："username:password@"，例如：
"http://myuser:mypassword@www.somesite.com"

不是所有伺服器所提供的檔案大小都是正確的，特別是使用代理伺服器的時候。

相關

InetGet

範例

$size = InetGetSize("http://www.autoitscript.com/autoit3/files/beta/update.dat")
MsgBox(0, "遠端的檔案大小：", $size)


Function Ping

函數說明（Function Reference）

Ping

向指定的遠端主電腦發Ping指令並返回收發時間量。

Ping ( 位址或主機名稱 [, 逾時] )

參數

位址/主機名稱 | 可以如右表示："www.autoitscript.com" 或 "87.106.244.38"。
逾時 | [選擇性參數] 為以毫秒為單位的等待回應時間 (預設為 4000)。

返回值

成功： | 以毫秒為單位返回週遊時間 ( 大於 0 )。
失敗： | 如主控端不能 Ping 查詢或其它網路錯誤發生，則返回 0 並設定 @error (請見附註)。

附註

當函數失敗 (返回 0) @error 內含下列進階訊息：
1 = 主控端已離線
2 = 主控端不能傳送
3 = 目的地無效
4 = 其它錯誤

相關

無。

範例

$var = Ping("www.AutoItScript.com",250)
If $var Then; 也有可能的話: 如 @error = 0 則 ...
Msgbox(0,"狀態","在線上，網域周遊為：" & $var)
Else
Msgbox(0,"狀態","遇到一個問題，錯誤碼： " & @error)
EndIf


Function TCPAccept

函數說明（Function Reference）

TCPAccept

允許連接埠上的進入連線嘗試。

TCPAccept ( 主連接埠 )

參數

主連接埠 以 TCPListen 函數返回的主要連接埠識別碼 (SocketID)。

返回值

成功： | 返回已順利連線的連接埠識別碼。
失敗： | 根據 Windows API WSAGetError 返回值返回 -1 並設定 @error。

附註

無。

相關

TCPStartup, TCPListen, TCPTimeout (Option)

範例

;伺服器!! 第一次請先建立連線再開啟此腳本 !!!!!!!!!!!!!!!
$g_IP = "127.0.0.1"

; 開啟 TCP 服務
;==============================================
TCPStartUp()

; 建立一個列出的 "連接埠"
;==============================================
$MainSocket = TCPListen($g_IP, 65432, 100 )
If $MainSocket = -1 Then Exit

; 搜尋用戶端連線
;--------------------
While 1
$ConnectedSocket = TCPAccept( $MainSocket)
If $ConnectedSocket >= 0 Then
msgbox(0,"","我的伺服器 - 用戶端已連線")
exit
EndIf
Wend


Function TCPCloseSocket

函數說明（Function Reference）

TCPCloseSocket

關閉 TCP 連接埠。

TCPCloseSocket ( 連接埠 )

參數

連接埠 以 TCPListen 或 TCPAccept 函數返回的主要連接埠識別碼 (SocketID)。

返回值

成功： | 返回值 1。
失敗： | 根據 Windows API WSAGetLastError 返回值返回 0 並設定 @error。

附註

無。

相關

TCPStartup, TCPListen, TCPAccept

範例

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Opt('MustDeclareVars', 1)

;==============================================
;==============================================
;伺服器!! 第一次請先建立連線再開啟此腳本 !!!!!!!!!!!!!!!
;==============================================
;==============================================

; 初始化變數表示一個連線
;==============================================
Global $ConnectedSocket = -1

Global $MainSocket

Example()

Func Example()
Local $g_IP, $RogueSocket, $GOOEY, $edit, $input, $butt, $msg
Local $ret, $recv

$g_IP = "127.0.0.1"

; 開啟 TCP 服務
;==============================================
TCPStartup()

; 建立一個列出的 "連接埠"
;==============================================
$MainSocket = TCPListen($g_IP, 65432, 100)
If $MainSocket = -1 Then Exit
$RogueSocket = -1

; 建立一個互動視窗
;==============================================
$GOOEY = GUICreate("我的伺服器", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 40, 280, 150, $WS_DISABLED)
$input = GUICtrlCreateInput("", 10, 10, 200, 20)
$butt = GUICtrlCreateButton("傳送", 210, 10, 80, 20, $BS_DEFPUSHBUTTON)
GUISetState()

; 視窗訊息迴圈
;==============================================
While 1
$msg = GUIGetMsg()

; 關閉視窗
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop

; 使用者傳送 "SEND"
;--------------------
If $msg = $butt Then
If $ConnectedSocket > -1 Then
$ret = TCPSend($ConnectedSocket, GUICtrlRead($input))
If @error Or $ret < 0 Then
; 「發生錯誤，關閉連接埠並重設」連接埠端口為 -1
;----------------------------------------------------------------
TCPCloseSocket($ConnectedSocket)
WinSetTitle($GOOEY, "", "我的伺服器 - 用戶端已連線")
$ConnectedSocket = -1
ElseIf $ret > 0 Then
; 更新 $edit 控制及資料，我們將它傳送過去
;----------------------------------------------------------------
GUICtrlSetData($edit, GUICtrlRead($edit) & GUICtrlRead($input) & @CRLF)
EndIf
EndIf
GUICtrlSetData($input, "")
EndIf

If $RogueSocket > 0 Then
$recv = TCPRecv($RogueSocket, 512)
If Not @error Then
TCPCloseSocket($RogueSocket)
$RogueSocket = -1
EndIf
EndIf

; 如沒有連線則搜尋一個存在連線
;--------------------
If $ConnectedSocket = -1 Then
$ConnectedSocket = TCPAccept($MainSocket)
If $ConnectedSocket < 0 Then
$ConnectedSocket = -1
Else
WinSetTitle($GOOEY, "", "我的伺服器 - 用戶端已連線")
EndIf

; 如已連線嘗試讀取一些資料
;--------------------
Else
; 執行無條件自動允許規則，以備其它使用者的嘗試連線需求
;----------------------------------------------------------------
$RogueSocket = TCPAccept($MainSocket)
If $RogueSocket > 0 Then
TCPSend($RogueSocket, "~~拒絕存取！")
EndIf

$recv = TCPRecv($ConnectedSocket, 512)

If $recv <> "" And $recv <> "~~拜拜！" Then
; 我們已收到更新的 $edit 控制項及資料
;----------------------------------------------------------------
GUICtrlSetData($edit, GUICtrlRead($edit) & ">" & $recv & @CRLF)

ElseIf @error Or $recv = "~~拜拜！" Then
; 「發生錯誤，關閉連接埠並重設」連接埠端口為 -1
;----------------------------------------------------------------
WinSetTitle($GOOEY, "", "我的伺服器 - 用戶端已連線")
TCPCloseSocket($ConnectedSocket)
$ConnectedSocket = -1
EndIf
EndIf
WEnd

GUIDelete($GOOEY)
EndFunc ;==>Example

Func OnAutoItExit()
;關閉腳本上的開啟端口，並關閉 TCP 服務
;----------------------------------------------------------------------
If $ConnectedSocket > -1 Then
TCPSend($ConnectedSocket, "~~拜拜！")
Sleep(2000)
TCPRecv($ConnectedSocket, 512)
TCPCloseSocket($ConnectedSocket)
EndIf
TCPCloseSocket($MainSocket)
TCPShutdown()
EndFunc ;==>OnAutoItExit


Function TCPConnect

函數說明（Function Reference）

TCPConnect

建立一個連線至存在伺服器的連接埠。

TCPConnect ( IP 位址, 埠口 )

參數

IP 位址 | 以句點分隔的網路協定位址 (IpV4) 如："192.162.1.1"。
埠口 | 連線至已建立的連接埠端口。

返回值

成功： | 返回主連接埠識別碼。
失敗： | 根據 Windows API WSAGetLasterror 返回值返回 -1 並設定 @error。
 | 如 "IP 位址" 不正確將 @error 設定為 1。
 | 如 "埠口" 不正確將 @error 設定為 2。

附註

此函數是給一個用戶端與伺服器連絡用的。

相關

TCPStartup, TCPListen, TCPTimeout (Option)

範例

;用戶端!!!!!!!! 第一次請先建立伺服器連線再開啟此腳本... 虛擬的(dummy) !!
$g_IP = "127.0.0.1"

; 開啟 TCP 服務
;==============================================
TCPStartUp()

; 建立一個列出的 "連接埠"
;==============================================
$socket = TCPConnect( $g_IP, 65432 )
If $socket = -1 Then Exit


Function TCPListen

函數說明（Function Reference）

TCPListen

建立一個列出某個進入連線的連接埠。

TCPListen ( IP 位址, 埠口 [, 佇列連線最大值(MaxPendingConnection)] )

參數

IP 位址 | 以句點分隔的網路協定位址 (IpV4) 如："192.162.1.1"。
埠口 | 連線至已建立的連接埠端口。
佇列連線最大值(MaxPendingConnection) | 連線期間的最大佇列長度，預設將連線數設定最大值。

返回值

成功： | 返回主連接埠識別碼。
失敗： | 根據 Windows API WSAGetLasterror 返回值返回 -1 並設定 @error。
 | 如 "IP 位址" 不正確將 @error 設定為 1。
 | 如 "埠口" 不正確將 @error 設定為 2。

附註

無。

相關

TCPStartup, TCPConnect, TCPAccept, TCPTimeout (Option)

範例

;伺服器!! 第一次請先建立連線再開啟此腳本 !!!!!!!!!!!!!!!
$g_IP = "127.0.0.1"

; 開啟 TCP 服務
;==============================================
TCPStartUp()

; 建立一個列出的 "連接埠"
;==============================================
$MainSocket = TCPListen($g_IP, 65432, 100 )
If $MainSocket = -1 Then Exit


Function TCPNameToIP

函數說明（Function Reference）

TCPNameToIP

覆寫網路連線名稱到 IP 位址。

TCPNameToIP ( 名稱 )

參數

名稱 包含網路名稱的字串。

返回值

成功： | 返回與名稱符合的 IP 位址字串。
失敗： | 根據 Windows API WSAGetError 返回值返回 "" 並設定 @error。

附註

TCPStartup 必須在此函數前被呼叫。

相關

TCPStartup

範例

TCPStartup()

msgbox(0,"IP???",TCPNameToIP("就決定是你了 ~ 機器！"))


Function TCPRecv

函數說明（Function Reference）

TCPRecv

從已連線的連接埠上接收資料。

TCPRecv ( 主連接埠, 最大長度(maxlen) [, 旗標] )

參數

主連接埠 | 以 TCPAccept 或 TCPConnect 函數返回的主要連接埠識別碼 (SocketID)。
最大長度(maxlen) | 欲取得的字元最大 # 值。
旗標 | [選擇性參數] 如設定 1 則強制此函數返回二進位資料 (預設值 0，且將自動在二進位/字串間進行掃瞄)。

返回值

成功： | 由連接埠端口返回已傳送的 二進位/字串 資料。
失敗： | 根據 Windows API WSAGetError 返回值返回 "" 並設定 @error。

附註

由於此函數考量到向下的相容性，所以會盡可能嘗試優先以預設值返回字串。如收到的是空白 null (0x00) 字串，則返回的會是一個二進位資料類型。
要強制此函數始終返回二進位資料 (最適當選項) 則將 "旗標" 參數值設定為 1。

相關

BinaryLen, BinaryMid, TCPStartup, TCPAccept, TCPConnect, TCPTimeout (Option)

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

;==============================================
;==============================================
;伺服器!! 第一次請先建立連線再開啟此腳本 !!!!!!!!!!!!!!!
;==============================================
;==============================================

Example()

Func Example()
; 設定一些可重覆使用的訊息
; 在此處設定您的公用 IP 位址 (@IPAddress1)
; Local $szServerPC = @ComputerName
; Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891
Local $MainSocket, $GOOEY, $edit, $ConnectedSocket, $szIP_Accepted
Local $msg, $recv

; 開啟 TCP 服務
;==============================================
TCPStartup()

;建立一個列出的 "連接埠"
; 使用您的 IP 位址和 33891 連接埠
;==============================================
$MainSocket = TCPListen($szIPADDRESS, $nPORT)

; 如連接埠建立失敗，則結束
If $MainSocket = -1 Then Exit

; 建立一個訊息用視窗
;==============================================
$GOOEY = GUICreate("我的伺服器 (IP：" & $szIPADDRESS & ")", 300, 200)
$edit = GUICtrlCreateEdit("", 10, 10, 280, 180)
GUISetState()

; 初始化一個變數表示建立連線
;==============================================
$ConnectedSocket = -1

;等待並允許連線
;==============================================
Do
$ConnectedSocket = TCPAccept($MainSocket)
Until $ConnectedSocket <> -1

; 取得用戶端的連線 IP
$szIP_Accepted = SocketToIP($ConnectedSocket)

; 視窗訊息迴圈
;==============================================
While 1
$msg = GUIGetMsg()

; 關閉視窗
;--------------------
If $msg = $GUI_EVENT_CLOSE Then ExitLoop

; 嘗試取得 (可達) 2048 位元組
;----------------------------------------------------------------
$recv = TCPRecv($ConnectedSocket, 2048)

; 如 @error 取得失敗則中斷連接埠
;----------------------------------------------------------------
If @error Then ExitLoop

; 以我們取得的資料更新 $edit 控制項
;----------------------------------------------------------------
If $recv <> "" Then GUICtrlSetData($edit, _
$szIP_Accepted & " > " & $recv & @CRLF & GUICtrlRead($edit))
WEnd

If $ConnectedSocket <> -1 Then TCPCloseSocket($ConnectedSocket)

TCPShutdown()
EndFunc ;==>Example

; 此功能會從已建立的連接埠返回 IP 位址
;----------------------------------------------------------------------
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet

$sockaddr = DllStructCreate("short;ushort;uint;char[8]")

$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf

$sockaddr = 0

Return $aRet
EndFunc ;==>SocketToIP


Function TCPSend

函數說明（Function Reference）

TCPSend

在已連線的連接埠上傳送資料。

TCPSend ( 主連接埠, 資料 )

參數

主連接埠 | 以 TCPConnect 函數返回的主要連接埠識別碼 (SocketID)。
資料 | 將 二進位/字串 傳送至已建立的連接埠。

返回值

成功： | 返回傳送到連接埠的位元組大小。
失敗： | 根據 Windows API WSAGetError 返回值返回 0 並設定 @error。

附註

無。

相關

TCPStartup, TCPConnect, TCPListen, TCPTimeout (Option)

範例

#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)

;==============================================
;==============================================
;用戶端! 第一次請先建立伺服器連線再開啟此腳本!!!!!!!!!!!!!!!
;==============================================
;==============================================

Example()

Func Example()
; 設定一些可重覆使用的訊息
;--------------------------
Local $ConnectedSocket, $szData
; 不論伺服器位址在哪，皆設定 $szIPADDRESS 給它，我們將修改電腦名稱為 IP 位址
; Local $szServerPC = @ComputerName
; Local $szIPADDRESS = TCPNameToIP($szServerPC)
Local $szIPADDRESS = @IPAddress1
Local $nPORT = 33891

; 開啟 TCP 服務
;==============================================
TCPStartup()

; 初始化一個變數表示建立連線
;==============================================
$ConnectedSocket = -1

;嘗試在該 IP 位址和 33891 連接埠上與伺服器建立連線
;=======================================================
$ConnectedSocket = TCPConnect($szIPADDRESS, $nPORT)

; 如發生錯誤... 顯示訊息
If @error Then
MsgBox(4112, "錯誤", "TCPConnect 失敗，返回 WSA 錯誤：" & @error)
; 如沒有錯誤則重覆輸入框 InputBox 迴圈傳遞資料
; 傳送給伺服器
Else
;始終發出傳送資料到伺服器的要求
While 1
; 用於傳送資料的輸入框(InputBox)
$szData = InputBox("給伺服器的資料", @LF & @LF & "請輸入要傳送給伺服器的訊息：")

; 如他們取消了輸入框(InputBox)或不予理會，那我們結束迴圈
If @error Or $szData = "" Then ExitLoop

; 此刻我們在 $szData 應已有一筆資料... 讓咱們嘗試將它透過已建立連線的連接埠傳送出去吧
TCPSend($ConnectedSocket, $szData)

; 如 @error 取得失敗則中斷連接埠
;----------------------------------------------------------------
If @error Then ExitLoop
WEnd
EndIf
EndFunc ;==>Example


Function TCPShutdown, UDPShutdown

函數說明（Function Reference）

TCPShutdown, UDPShutdown

終止 TCP/UDP 服務。

TCPShutdown ( )
UDPShutdown ( )

參數

無。

返回值

成功： | 返回值 1。
失敗： | 根據 Windows API WSACleanup 返回值返回 0 並設定 @error。

附註

腳本必須呼叫 TCPShutdown() 來引用每個成功執行的 TCPStartup() 函數呼叫。
UDPShutdown() 只是 TCPShutdown() 函數的另一個名稱。

相關

TCPStartup, TCPListen, TCPCloseSocket, UDPCloseSocket

範例

TCPStartup() ; 開啟 TCP 服務

TCPShutdown ( ) ; 終止 TCP 服務


Function TCPStartup, UDPStartup

函數說明（Function Reference）

TCPStartup, UDPStartup

啟動 TCP 或 UDP 服務。

TCPStartup ( )
UDPStartup ( )

參數

無。

返回值

成功： | 返回值 1。
失敗： | 根據 Windows API WSAStartup 返回值返回 0 並設定 @error。

附註

此函數必須呼叫 TCPShutdown() 避免記憶體消耗 (consomption) 問題。
腳本必須呼叫 TCPShutdown() 來引用每個成功執行的 TCPStartup() 函數呼叫。
UDPStartup() 只是 TCPStartup() 函數的另一個名稱。

相關

TCPShutdown, TCPListen, TCPCloseSocket, UDPCloseSocket

範例

TCPStartup ( ) ; 開啟 TCP 服務


Function UDPBind

函數說明（Function Reference）

UDPBind

建立一個接受進入連線的連接埠。

UDPBind ( IP 位址, 埠口 )

參數

IP 位址 | 以句點分隔的網路協定位址 (IpV4) 如： "192.162.1.1"。
埠口 | 要限制的已建立連接埠口。

返回值

成功： | 返回一個群組：$array[1] 包括真正的埠口、$array[2] 包括指定的 IP 位址、$array[3] 包括連接埠。在隨後我們呼叫 UDPSend() 函數時會需要這個訊息，它會將這個連接埠的 架構(structure)/群組(array) 傳遞過去。
失敗： | 根據 Windows API WSAGetLasterror 返回值返回 -1 並設定 @error。
 | 如 "IP 位址" 不正確將 @error 設定為 1。
 | 如 "埠口" 不正確將 @error 設定為 2。

附註

無。

相關

UDPRecv, UDPOpen

範例

;伺服器!! 第一次請先建立連線再開啟此腳本 !!!!!!!!!!!!!!!
$g_IP = "127.0.0.1"

; 開啟 UDP 服務
;==============================================
UDPStartUp()

; 建立一個列出的 "連接埠"
;==============================================
$socket = UDPBind($g_IP, 65432)
If @error <> 0 Then Exit


Function UDPCloseSocket

函數說明（Function Reference）

UDPCloseSocket

關閉某個 UDP 連接埠。

UDPCloseSocket ( 連接埠/群組 )

參數

連接埠/群組 以 UDPBind 或 UDPOpen 函數返回的連接埠/群組(Array)。

返回值

成功： | 返回值 1。
失敗： | 根據 Windows API WSAGetLastError 返回值返回 0 並設定 @error。

附註

無。

相關

UDPBind, UDPOpen

範例

;伺服器!! 第一次請先建立連線再開啟此腳本 !!!!!!!!!!!!!!!
$g_IP = "127.0.0.1"

; 開啟 UDP 服務
;==============================================
UDPStartUp()

; 建立一個列出的 "連接埠"
;==============================================
$socket = UDPBind($g_IP, 65432)
If @error <> 0 Then Exit

;--- 這是您的代碼

Func OnAutoItExit()
UDPCloseSocket($socket)
UDPShutdown()
EndFunc


Function UDPOpen

函數說明（Function Reference）

UDPOpen

開啟一個連線至存在伺服器的連接埠。

UDPOpen ( IP 位址, 埠口 )

參數

IP 位址 | 以句點分隔的網路協定位址 (IpV4) 如： "192.162.1.1"。
埠口 | 連線至已建立的連接埠端口。

返回值

成功： | 返回一個群組：$array[1] 包括真正的埠口、$array[2] 包括指定的 IP 位址、$array[3] 包括連接埠。在隨後我們呼叫 UDPSend() 函數時會需要這個訊息，它會將這個連接埠的 架構(structure)/群組(array) 傳遞過去。
失敗： | 根據 Windows API WSAGetLasterror 返回值返回 $array[0]=-1 並設定 @error。

附註

此函數是給一個用戶端與伺服器連絡用的。

相關

UDPBind, UDPSend

範例

;用戶端!!!!!!!! 第一次請先建立伺服器連線再開啟此腳本... 虛擬的(dummy) !!
$g_IP = "127.0.0.1"

; 開啟 UDP 服務
;==============================================
UDPStartUp()

; 建立一個列出的 "連接埠"
;==============================================
$socket = UDPOpen( $g_IP, 65432 )
If @error <> 0 Then Exit


Function UDPRecv

函數說明（Function Reference）

UDPRecv

接收來自開啟連接埠的資料。

UDPRecv ( 連接埠/群組, 最大長度(maxlen) [, 旗標] )

參數

連接埠/群組 | 以 UDPBind 函數返回的連接埠/群組(Array)。
最大長度(maxlen) | 欲取得的字元最大 # 值。
旗標 | [選擇性參數] 如設定 1 則強制此函數返回二進位資料 (預設值 0，且將自動在二進位/字串間進行掃瞄)。

返回值

成功： | 由連接埠端口返回已傳送的 二進位/字串 資料。
失敗： | 根據 Windows API WSAGetError 返回值返回 "" 並設定 @error。

附註

由於此函數考量到向下的相容性，所以會盡可能嘗試優先以預設值返回字串。如收到的是空白 null (0x00) 字串，則返回的會是一個二進位資料類型。
要強制此函數始終返回二進位資料 (最適當選項) 則將 "旗標" 參數值設定為 1。

相關

BinaryLen, BinaryMid, UDPBind, UDPOpen

範例

;;這是 UDP 伺服器
;;第一次請先建立連線再開啟此腳本

; 開啟 UDP 服務
;==============================================
UDPStartup()

; 綑綁進 "連接埠"
;==============================================
$socket = UDPBind("127.0.0.1", 65532)
If @error <> 0 Then Exit

While 1
$data = UDPRecv($socket, 50)
If $data <> "" Then
MsgBox(0, "UDP 資料", $data, 1)
EndIf
sleep(100)
WEnd

Func OnAutoItExit()
UDPCloseSocket($socket)
UDPShutdown()
EndFunc


Function UDPSend

函數說明（Function Reference）

UDPSend

傳送於開啟連接埠的資料。

UDPSend ( 連接埠/群組, 資料)

參數

連接埠/群組 | 以 UDPOpen 函數返回的主要連接埠/群組。
資料 | 要傳送到已連線端口的二進位/字串資料。

返回值

成功： | 返回傳送至已連線端口的位元組大小。
失敗： | 根據 Windows API WSAGetError 返回值返回 0 並設定 @error。
 | 如 "IP 位址" 不正確將 @error 設定為 1。
 | 如 "埠口" 不正確將 @error 設定為 2。

附註

無。

相關

UDPOpen, UDPBind

範例

;;這是 UDP 用戶端
;;第一次請先建立伺服器連線再開啟此腳本

; 開啟 UDP 服務
;==============================================
UDPStartup()

; 開啟一個 "連接埠"
;==============================================
$socket = UDPOpen("127.0.0.1", 65532)
If @error <> 0 Then Exit

$n=0
While 1
Sleep(2000)
$n = $n + 1
$status = UDPSend($socket, "Message #" & $n)
If $status = 0 then
MsgBox(0, "錯誤", "傳送 UDP 訊息時發生錯誤：" & @error)
Exit
EndIf
WEnd

Func OnAutoItExit()
UDPCloseSocket($socket)
UDPShutdown()
EndFunc


COM 說明

AutoIt 的 COM 擴充套件 (COM Extensions to AutoIt)

- 簡單介紹 -

何謂 COM？

COM 係表示 "Component Object Model" -元件物件模型。它是 Microsoft 用來做為軟體共通介面的橋樑。這些介面的定義都在 COM 物件中。

在有 COM 以前，您必須曉得一個程式的實現方式必須十分精確無誤，否則絕對不能用 '介面' 溝通。但使用了 COM，您現在就可 "告知" 系統它所定義的物件。這樣您唯一要了解的東西，就只剩程式用到的物件名稱、以及他們所擁有的 '資源' 或 '模式(Method)' 而已。

COM 元件物件模型 ─ 維基百科

他們(物件)所用的資源或模式(Method)是什麼？

一個物件會同時擁有兩種基本特有屬性。您既可以將 '資源' 看做是物件中儲存的資料，同樣的 '模式(Method)' 也可以看成是內部呼叫的函數，並用資料處理一些事情。

我的 AutoIt 腳本會有 COM 的需要嗎？

那要看依存性了。AutoIt 有內建眾多函數和龐大的 UDF 資料庫，您可以用這些東西完成大部份的程序。然而若您有需要使用特別的 '介面' 跟其它應用程式溝通的話，使用 COM 或許可以將一些腳本指令行儲存起來。要腳本能得知 COM 物件的存在，係 完全依存於 安裝的作業系統 和 軟體來決定。『 下面的範例 』已在 '單純' 的 Windows XP professional 版環境下用 Microsoft Office 2000 做過測試：

AutoIt 的 COM 使用方式範例：

來讓我們說明一下，要把所有開啟的視窗都最小化的話，您可以用標準的 AutoIt 函數像 WinList 和 WinSetState 來進行。不過，這兩行 COM-指令碼 給您的結果是完全一樣的：

$oShell = ObjCreate("shell.application")

$oShell.MinimizeAll

附註：該範例所用的方法，在 AutoIt 引進 WinMinimizeAll() 函數後，它已不再是將所有視窗最小化最簡單、最快的方式了。

在第一行我們建立了一個新物件叫 "shell.application"， 這是 Windows 內部的物件，它的定義在 shell32.dll 函式庫中。我們對這個新物件指標所指定的對象是變數 $oShell，該 $oShell 係自當前存在的物件變數而來。

在第二行中，我們使用了一個叫 "MinimizeAll" 函數到 $oShell 物件的方式，這樣也可將所有視窗最小化。

所有的 Windows 版本都有體系龐大、為數不少的內部物件，以供各式各樣的用途及需求。且某些應用程式像 Excel 或 Word，他們也都擁有各自設定的物件。

不過，說到取得跟他們內部的資源跟 Method 屬性，要找到他們跟您系統所定義存在物件完全符合的清單，那可是另外一回事。您可以搜尋一下 Microsoft.com 或 Google.com 網站，或許可以找到想要使用物件 'X' 的相關線索。

對於 instance(實例物件)，您可以找找有關 "shell.application" 物件的資訊，它在：

http://msdn.microsoft.com/zh-tw/library/bb774094(en-us,VS.85).aspx

若您要在目前系統安裝的所有物件上取得 Peek 的話，那麼 "OLE/COM Object Viewer" 這個工具會很有幫助，最下面幾段我們會說明一下這個工具。

我們先來做另一個範例。 就好像從某個網站取得一個 HTML 原始碼一樣，您可以使用內部的 InetGet() 函數將結果儲存到檔案，然後再用 FileRead() 重新拿回來，而這幾行代碼做的事都是一樣的：

$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET","http://www.AutoItScript.com")
$oHTTP.Send()
$HTMLSource = $oHTTP.Responsetext

該 (字串) 變數 $HTMLSource 目前擁有了 AutoItScript.com 網站首頁的 HTML 完整原始碼 (就是上面的 HTML-Frame)。

(關於 "winhttp.winhttprequest" 物件的資訊內容可以在該頁找到：
http://msdn.microsoft.com/en-us/library/aa384106.aspx )

請留意一下：物件的存在與否，會因電腦所安裝的作業系統及應用程式而有不同，例如：winhttp.winhttprequest.5.1 物件很有可能存在電腦上，因為它至少有安裝 Internet Explorer version 5。當您要分享使用到 COM 物件的腳本時，請確定該物件是否存在於所有電腦上。

物件變數的行為跟 AutoIt 變數相較之下是有一些不同的，該物件不會是一個真正的數值，而是 '指向(pointer)' 腳本外部的某些東西。所以您不能在物件變數上做算術運算、也不能進行方程式求值。在您為某物件指定一項不同的數值時，該 '指標' 會自動被釋放。 對於一個 instance 物件，您也可以指定任意數字或文字給它來刪除物件。

$oHTTP = ObjCreate("winhttp.winhttprequest.5.1") ; 建立物件
$oHTTP=0 ; 刪除物件

事情完成後，您 不需要 將物件刪除。如腳本結束了，AutoIt 會嘗試將所有建立於腳本內的啟動物件關聯通通釋放掉。相同的情況，在您於某個函數內定義本機函數變數後，則用一個返回結束函數。

使用 COM 自動化

COM 之所以廣受歡迎的原因在於程序 '自動化' 的方便性。它取代了原先使用標準 AutoIt 函數像 Send() 或 WinActivate()，您可隨意使用定義在程式內的物件。

這是一個 '自動化' Microsoft Excel 的範例：

$oExcel = ObjCreate("Excel.Application") ; 建立一個 Excel 物件
$oExcel.Visible = 1 ; 讓 Excel 自己出現
$oExcel.WorkBooks.Add ; 加入新的工作表
$oExcel.ActiveWorkBook.ActiveSheet.Cells(1,1).Value="測試" ; 填滿表格
sleep(4000) ; 檢視結果 4 秒
$oExcel.ActiveWorkBook.Saved = 1 ; 模擬儲存工作表
$oExcel.Quit ; 結束 Excel

控制其它應用程式的複雜度係依存於指定的程式，而不是 AutoIt 腳本。如有某件事情無法照您期待的方式完成，那麼可能要研究一下應用程式的相關文件，AutoIt 說明書不能給您答案。

特別陳述式

在 AutoIt 中，有為 COM 設計兩種特別陳述式的使用方法：

WITH/ENDWITH 和 FOR/IN/NEXT 迴圈 (loop)。

WITH..ENDWITH

WITH/ENDWITH 陳述式本身是沒任何功能的，不過它可以讓您的腳本閱讀起來更方便。對於 instance 物件，前一個使用 Excel 的範例也可以改寫成：

$oExcel = ObjCreate("Excel.Application") ; 建立一個 Excel 物件

WITH $oExcel
.Visible = 1 ; 讓 Excel 自己出現
.WorkBooks.Add ; 加入新的工作表
.ActiveWorkBook.ActiveSheet.Cells(1,1).Value="測試" ; 填滿表格
sleep(4000) ; 檢視結果 4 秒
.ActiveWorkBook.Saved = 1 ; 模擬儲存工作表
.Quit ; 結束 Excel
ENDWITH

這個範例不能幫您儲存很多文字，不過當您的物件使用了很長的資源/Method 屬性時，在 WITH 陳述式範圍內，您就可以讓它大大地縮短了。

FOR..IN

FOR...IN 迴圈在使用集區時是有須要的。 集區是一個特殊物件類型，它存在於多個子物件 (Sub-object) 之外。您可以把它看成是群組 (Array) - 事實上，FOR..IN 陳述式也能在 群組(Array)-類型 變數上執行。

在 FOR..IN 迴圈上使用一個群組 (Array)

下面是一個 FOR..IN 迴圈範例。 該範例使用一般的 AutoIt 群組，所以 COM 會無事可做，我們只是想示範一下它的原理：

Dim $aArray[4] ; 建立一個範圍為 4 的群組

$String = "" ; 一個用來顯示目標的字串

$aArray[0]="a" ; 我們來將群組填滿
$aArray[1]=0 ; 和好幾個
$aArray[2]=1.3434 ; 不同的
$aArray[3]="測試測試測試" ; 範例數值

FOR $Element IN $aArray ; 從這裡開始...
$String = $String & $Element & @CRLF
NEXT

; 現在將結果呈現給使用者閱讀
Msgbox(0,"For..IN 群組測試","結果： " & @CRLF & $String)

在 FOR..IN 迴圈上使用一個物件

在多數情況下您是不能使用 '一般的' 物件 Method 屬性來取得集區內的類別 (element)，在 'COM'-欄目中他們有說到，您必須把他們一一 '列舉(enumerate)' 出來。因為這是 FOR..IN 迴圈出現的地方。

下方的 Excel 範例迴圈所示，在目前啟動表格的欄位 A1:O16，如其中一格的值小於 5，該欄內的值將以 0 取代(零)：

$oExcel = ObjCreate("Excel.Application") ; 建立一個 Excel 物件

$oExcel.Visible = 1 ; 讓 Excel 自己出現
$oExcel.WorkBooks.Add ; 加入新的工作表

dim $arr[16][16] ; 這邊定義數行範圍
for $i = 0 to 15 ; $i 從 0 開始到 15
for $j = 0 to 15 ; $j 從 0 開始到 15
$arr[$i][$j] = $i ; 示範建立表格內容
next ; 下一步
next ; 下一步

$oExcel.activesheet.range("A1:O16").value = $arr ; 示範將表格填滿數字

sleep(2000) ; 等待一段時間後繼續

For $cell in $oExcel.ActiveSheet.Range("A1:O16")
If $cell.Value < 5 Then
$cell.Value = 0
Endif
Next

$oExcel.ActiveWorkBook.Saved = 1 ; 模擬儲存工作表
sleep(2000) ; 等待一段時間後關閉
$oExcel.Quit ; 結束 Excel

進階的 COM 使用方式

下面將示範 AutoItCOM 的功能，請務必對 COM 事件及 COM 相關錯誤處理方式有較深入的知識和了解。

如您是 COM 程式設計新手，第一次請先詳細閱讀 COM 相關文件。

關於 COM 有一本很棒的教戰聖典，書名叫 "Inside OLE 2 (OLE2 進階組合語言技術)" 由 Kraig Brockschmidt 撰寫 (Microsoft 特別推薦)。

或者您也可以在網路上搜尋一些有關 COM 的資源 (與 AutoIt 無關)：

http://zh.wikipedia.org/w/index.php?title=COM&variant=zh-tw (維基百科的 COM 介紹)

http://www.garybeene.com/vb/tut-obj.htm (Visual Basic 中的相關物件)

http://java.sun.com/docs/books/tutorial/java/concepts/ (在 Java 中使用物件)

http://msdn.microsoft.com/zh-tw/library/ws1d94bf.aspx (C++ 的編譯器 COM 支援範例)

http://msdn.microsoft.com/zh-tw/library/9y92594t.aspx (Visual Basic 的尋找和修正錯誤)

http://vb.ncis.com.tw/ (VB 研究小站)
(譯者介紹：該站對關於 ASP、RB、VBScript、Visual BASIC 6、VBA、VB.Net 等都有介紹，是不錯的好網站)

COM 事件

在一般的 COM 自動化中，多數使用者主要使用一種溝通的方式。您可以 '要求' 該物件提供來自 Method 屬性的任意結果或資源。不過，只要條件符合，您還可以將一個 COM 物件 '喚回' 到您的腳本。

這個流程必須運用的十分靈活，否則您就只好等相關的一些 COM 動作發生了。

有一個替代撰寫迴圈類型的方式，就是若某件您感興趣的事件發生就呼叫該物件，讓物件自行呼叫腳本內指定的 UDF 函數，並同時處理其它的事情 (差不多如此)。

由於不是所有的物件都能支援事件，所以您必需仔細閱讀物件的相關說明，確認它到底支援哪些事件。

如結果可以，第二件事就是了解事件支援的類型，因為 AutoItCOM 只能取得 '委派(dispatch)' 事件類型。

最後一件就是，您必需知道物件所產生的事件名稱，這些名稱含有他們使用的參數 (若有的話)。

只要您順利地取得所有的資訊並做好充份準備，就可以開始進行使用 COM 事件建構 AutoIt 腳本了。

下方是示範如何從 Internet Explorer 取得事件的腳本片段：

$oIE=ObjCreate("InternetExplorer.Application.1")   ; 建立一個 Internet Explorer 物件

$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")  ; 開始接收事件

$URL= "http://www.autoitscript.com"  ; 載入示範網頁
; 從現在開始於網頁載入期間，用 $oIE 物件產生事件。
; 他們已經在事件函數中被處理好了，結果在下方顯示

; 這裡您可以讓腳本自己等待，直到使用者回應已完成
; ...(這裡是您的 代碼)...

$EventObject.stop            ; 告訴 IE 停止接收事件
$EventObject=0               ; 刪除事件物件
$oIE.quit                    ; 結束 IE
$oIE=0                       ; 將 IE 從記憶體移除 (並非必要)

; 使用一點點 Internet Explorer 事件函數
; 關於完整的 IE 事件函數清單，請檢視 MSDN WebBrowser 文件，在：
; http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/webbrowser.asp

Global $GUIEdit

Func IEEvent_StatusTextChange($Text)
; 在整個腳本中 (見下面一行) 將結果呈現於視窗編輯框
    GUICtrlSetData ( $GUIEdit, "IE 的狀態文字已修改到：" & $Text & @CRLF, "加入文字" )
EndFunc

Func IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
; 在整個腳本中 (見下面一行) 將結果呈現於視窗編輯框
; 請注意：函式宣告與 MSDN 那一種是不同的
  GUICtrlSetData ( $GUIEdit, "瀏覽器： " & $URL & " 旗標： " & $Flags & @CRLF, "加入文字")
EndFunc

Exit                        ; 結束主腳本

請點選 這裡 檢視完整腳本。

腳本中最主要的一行是： $EventObject=ObjEvent($oIE,"IEEvent_",...)。
這個函數會取得物件 $oIE 和資源，它傳送至 AutoIt 函數的事件名稱是以 MYEvent_ 做開頭。第三個參數是選擇性的，它是在當某一物件有多個事件 '介面'、而您又不想讓 AutoIt 自行選擇其中之一時使用。

對於連續性的物件重新導向，有一個相當可靠的物件就是 $EventObject，這個變數並不需要時時去管，除非您要結束該事件。

要終止物件的重新導向行為，您不能只是把變數刪除而已，像：$EventObject=""。原因是 '正在呼叫' 的物件仍然跟這個變數是有關聯的，它還沒有被釋放，要等到物件自己結束為止。而這類問題可以透過刪除 '正在呼叫' 的物件來解決，除此之外，您也可以用： $EventObject.Stop 變數告訴物件，不想再接收到任何事件了。接下來您就可以 (但不是非要不可) 指定任意數值將事件結束，像：$EventObject="" 事件。

若您想要知道處理事件的名稱 $oIE ，您可以利用建立 AutoIt UDF 函數並帶 IE Event_Eventname(選擇性參數) 名稱的方式，將想要的事件實作出來。請確認您對「該事件函數」所使用的參數值、及按照指示排列的順序都沒有問題，否則到頭來很可能以得到非預期數值的下場做收。

若您不知道事件的名稱 (因為某些理由) ，您可以只是在前綴新增一個 UDF 函數，如這個範例：Func IEEvent_($Eventname)。
當收到一個事件但是 IEEvent_ Eventname UDF 並不存在，這個函數的動作將換成被呼叫，事件名稱自然就被放置在變數 $Eventname 裡面了。

您並不需要將「所有」的事件函數都實作出來，只是沒有實作到的部份會被忽略而已。

許多的腳本範例使用了 COM 事件函數，而這些都可以在 /tests/ 分類資料夾中的 AutoIt 3.1.1.xx beta ZIP 檔案中找到，也可以從： http://www.autoitscript.com/autoit3/files/beta/autoit/ 網站下載取得。

在 AutoIt 中使用 COM 事件的限制

某些物件 (像 'WebBrowser') 會 '依關聯' 將參數傳遞到他們的事件函數，這是本來就已設計好讓使用者自行修改參數，並將它傳回物件中。然而，AutoIt 所用的是他自己的變數體系，跟 COM 變數是不相容的。這也是說，所有來自物件的數值都必須轉換為 AutoIt 變數才能使用，這麼一來就會丟掉原本參照到記憶體空間的關聯。也許在不久的將來，我們可以幫您解決這個限制！

COM 錯誤處理

使用 COM 卻沒有完善的錯誤處理機制配套措施，會使它變得十分棘手。尤其是在您對自己的腳本物件運用還不夠熟悉的話更會如此。

一般 AutoIt 腳本會在偵測到一個 COM 錯誤時立即結束執行，這是預設值、也是最安全的設定。遇到這類的情況，您必須好好斟酌研究一下您的腳本，避免錯誤再度發生。

只有在沒辦法避免 COM 錯誤的情況，才建議您建立並安裝一套 "錯誤處理(Error Handler)"，讓您可以於程式事件發生後，進行事後補救工作。但它 絕對不是 將有許多臭蟲腳本完善排除的解決方式，這個機制也不能擷取 非-COM 事件、無關的腳本錯誤 (例如：宣告和語法錯誤)。

錯誤處理實作的方式跟一般的 COM 事件一樣，係使用 ObjEvent() 和使用者自訂的 COM 函數。不過使用方式有一點不同的地方是，AutoIt 的固定字串 "AutoIt.錯誤" 必須為物件名稱。

這是一個範例：

Global $g_eventerror = 0 ; 進行偵測檢查是否有 COM 錯誤發生，處理完畢後必須重新設定

$oMyError = ObjEvent("AutoIt.錯誤","MyErrFunc") ; 安裝一個自訂的錯誤處理

; 在這裡故意讓執行失敗 (物件不存在)
$oIE = ObjCreate("InternetExplorer.Application")
$oIE.visible = 1
$oIE.bogus
if $g_eventerror then Msgbox(0,"","前一行有錯誤！")

Exit

; 這是我自訂的錯誤處理開頭
Func MyErrFunc()
$HexNumber=hex($oMyError.number,8)
Msgbox(0,"","我們已順利中斷一個 COM 錯誤！" & @CRLF & _
"十六進位碼：" & $HexNumber & @CRLF & _
"windescription： " & $oMyError.windescription )

$g_eventerror = 1 ; 當此函數返回時，用來檢查情況的一些物件
Endfunc

有一件相當特別的事跟錯誤處理有關係，就是那個返回的物件。這是一個內含一些有用資源跟 method 屬性的 AutoIt 錯誤物件。它的實作方式有一部份是以 VB(腳本) 的 "Err" 物件為基礎完成。

AutoIt 錯誤物件的資源屬性：

.number | 來自一個 COM 呼叫的 Windows HRESULT 值
.windescription | 來自 .number 的 FormatWinError() 衍生文字
.source | 發生錯誤的物件名稱 (來自 ExcepInfo.source 的內容)
.description | 錯誤的來源物件說明 (來自 ExcepInfo.source 的內容)
.helpfile | 關於錯誤的來源物件說明檔 (來自 ExcepInfo.helpfile 的內容)
.helpcontext | 來源物件的說明檔內文 ID 碼 (來自 ExcepInfo.helpcontext 的內容)
.lastdllerror | 從 GetLastError() 返回的數字
.scriptline | 發生錯誤的腳本行

AutoIt 錯誤物件的 Method 屬性：

.raise | 提升為錯誤事件類別，肇因於使用者
.clear | 清除錯誤物件內容 (例如：編號為 0、字串 "")

UDF 程式設計員的注意事項

每個 AutoIt 腳本只能啟動「一個」錯誤事件處理，如您撰寫了一個內含 COM 的 UDF 自訂函數，您可以檢查使用者是否有安裝，如下所示：

$sFuncName = ObjEvent("AutoIt.錯誤")
if $sFuncName <> "" then Msgbox (0,"測試","使用者已安裝錯誤處理函數： " & $sFuncName)

若該機制未啟動，您可以在呼叫 UDF 過程將它終止安裝。

不過，您可以在未釋放已指定的變數情形下，始終不管那個存在的錯誤處理。如腳本作者已安裝好 COM 錯誤處理程式，那麼使用適當的函數就是它的職責，該函數也將有能力擷取由 UDF 函數所產生的 COM 錯誤。

OLE/COM Object Viewer 軟體使用介紹

"OLE/COM Object Viewer" 是一個非常好上手的工具，用來在系統上所有已安裝的 COM 物件中，為您取得想要的 peek。它本來是Windows 2000 資源工具的一部份，而且還可以從下方的網站免費下載取得： http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/oleview-o.asp

這個程式安裝後要使用有一些不方便，它不會幫您建立一個開始選單圖示。不過換個方面來說，有個叫 oleview.exe 的檔案，它已經在安裝時就幫您於 C:\Program Files\Resource Kit 資料夾中裝好了 (預設的安裝位置)。

在執行 oleview.exe 時，一些系統會抱怨某個叫 iviewers.dll 的檔案遺失了。這個檔案很重要，不過讓人想不通的是竟然沒包括在最新版的安裝中。您可以到下面位置取得較舊的 oleview.exe 版本，DLL 檔就在裡面： http://download.microsoft.com/download/2/f/1/2f15a59b-6cd7-467b-8ff2-f162c3932235/ovi386.exe。 預設是將檔案安裝於 C:\MSTOOLS\BIN 資料夾，但我們需要的就只有 iviewer.dll 檔而已，請將它複製到 oleview.exe 所在的資料夾，然後使用命令行註冊 DLL 檔： regsvr32 iviewers.dll。

讓我們來用 Oleviewer 做個示範吧，首先執行它並依序展開樹狀目錄： Object Classes(物件類型)->Grouped by Component Category(依週邊元件分類群組)->Control(控制項)->Microsoft Web Browser(微軟網頁瀏覽器)。

在左邊的欄位，您可以看到為這個物件所定義的所有 COM 介面，這事稍後再提，現在先將目標放在右邊的欄位。它裡頭有很多內容，這是該物件在 AutoIt 腳本所用的資訊，其中最重要的就是 "VersionIndependentProgID"。這是一個被用於 ObjCreate、ObjGet 或 ObjEvent 函數的名稱，除此之外它還包括物件在內的資料夾和檔案名稱，這個可以是一個 EXE、DLL 或者 OCX 檔。InProcServer32 代表該物件會以跟您腳本相同的執行緒執行 (在程序裡面)。當您看見 LocalServer32 以不同的程序執行時，該物件必然還包括了一個類型資料庫 ("TypeLib=" 下面那幾行)，否則絕對無法被用於 AutoIt 腳本中。

在左方欄位介面所示，他們是用來與物件產生互動的各種方式。一些用來做儲存 (IStorage, IPersist)，另一個則是用來崁入 GUI 視窗裡面 (IOleObject, IOleControl)。AutoIt 使用到一個 IDispatch 介面來完成自動化，這個介面會將該物件所支援、所有可腳本化的資源和 method 屬性通通 '灘在陽光下'，如果沒有它，您就不能在 AutoIt 腳本中使用物件了。

好了，現在我們就來看看這個介面。在名稱 IDispatch 上點右鍵，然後在選單上選擇 "View..."， 然後點一下 "View TypeInfo..." 按鈕 (請注意：如這個按鈕為灰色不可選的話，代表您還沒有註冊 iviewers.dll 檔，或可能該物件並沒有類型資料庫)。

"ITypeInfo Viewer" 視窗只能顯示出物件提供的資訊，如開發者不打算做一個說明檔包括在裡頭的話，您只能檢視 模式(method)/資源 屬性的名稱做參考了。"Microsoft Web Browser" 類型資料庫所包括的範圍相當遼闊，但只要簡單地在左邊的欄位點一下項目，相關說明就會同步在右方欄位上顯示。有些時候您必須透過瀏覽 "Inherited Interfaces"，才能取得更多關於物件的 method 屬性內容。

模式(method)/資源 屬性描述的語法都是以 C/C++ 類型寫成， '資源' 係以 "HRESULT Resizable([in] VARIANT_BOOL pbOffline)" 的方式描述，在 AutoIt 腳本中則必須重新改寫，像：$Resizable=$Object.Resizable ($Object 擁有以 ObjCreate 或 ObjGet 所建立的物件)。

COMmonly 易混淆專有名詞解疑 (COMmonly mixed up terms)

這些專有名詞通常很容易跟 COM 搞混，但他們所表示的含意是完全不同的：

OOP = Object Oriented Programming (物件導向程式設計)

這是一種廣為人知、將可重複組建的模組如物件跟其它週邊軟體跟資料封裝在一起的程式技術。

物件導向程式設計 ─ 維基百科

DDE = Dynamic Data Exchange (動態資料交換)

您可以說它是 COM 的前輩，它使用 IPC 在不同的應用程式間進行資料交換和指令溝通。

動態資料交換 ─ 維基百科

OLE =Object Linking and Embedding (物件連結嵌入)

他的第一個版本是 DDE，OLE 為 DDE 的改良版，從某個程式將資料 '嵌入' 到另一個程式中。OLE 目前主要用來建立於 COM 頂端並做為 ActiveX 的一部份。

對象連接與嵌入 ─ 維基百科

自動化 = Automation

這是一種與操控其它應用程式物件的方法，被使用於 OLE, ActiveX 和 COM 等等。

自動化技術 ─ 維基百科

ActiveX = 具備自動化功能的 OLE 次世代版

第一次主要是用來為程式和網路間做跨平台交換的溝通介面 (特別是網路瀏覽器)。此外，ActiveX 是建立於 COM 頂端的。

ActiveX ─ 維基百科

DCOM=Distributed COM (分散式 COM 架構)

一種將 COM 小小修改的版本，讓它可以在不同的實體電腦中互通有無。

DCOM ─ 維基百科

.NET = .NET Framework

這個不單單是用一段程式碼寫成的軟體而已，該 '點子' 是 Microsoft 想將 "幾乎每樣東西" 透過 (他們的) 軟體來互相連結的方法。".NET" 主要用做基於網路服務的用途上。

.NET Framework 框架 ─ 維基百科

COMmunist = 共產黨 (?...誤)

這位可不是啥 COM 的擁護者，不過某些人對共產主義是如此深信不疑 (其理論基礎為一群人共享所有的資源)。

共產黨 ─ 維基百科

譯註：誤很大 XD


Function ObjCreate

函數說明（Function Reference）

ObjCreate

建立一個從取得類別名稱關聯到 COM 的物件。

ObjCreate ( "類別名稱" [, "伺服器名稱" [,"使用者名稱", ["密碼"]]] )

參數

類別名稱 | 物件的類別格式如下面所示： "appname.objectype"
伺服器名稱 | 從遠端電腦取得的選擇性名稱，不過須先取得對方電腦的物件才可以。
使用者名稱 | 遠端電腦的使用碼名稱。 您必須以此格式輸入："computer\usercode" 或 "domain\usercode"。
密碼 | 給遠端電腦使用碼的密碼。

返回值

成功： | 返回一個物件。
失敗： | 返回 0 並設定 @error 為 1。

附註

如您要實現某個新的相關程式，使用 ObjCreate() 函數。
若要跟一個已存在程序進行連線，則替代使用 ObjGet()。

請記住不是所有的電腦都會有同樣的物件設定，所以請在呼叫 ObjCreate() 後 始終進行 錯誤檢查。

如您想要存取 遠端電腦 的物件，請依照下列要求套用設定：
-使用者執行腳本必須擁有適當的權限。
-遠端電腦物件必須支援 DCOM (Distributed COM) -- 分散式COM。
-遠端電腦必須啟用 '遠端修改登錄(Remote Registry)' 和 '檔案及印表機共用(File and Printer sharing)' 服務。

請檢視：Obj/COM 相關說明 更多相關的物件資訊。

相關

GUICtrlCreateObj, IsObj, ObjEvent, ObjGet, ObjName

範例

; 範例 1
; 計算開啟 shell windows 的數量

$oShell = ObjCreate("shell.application") ; 取得 Windows Shell 物件
$oShellWindows=$oShell.windows ; 取得開啟 shell Windows 連線

if Isobj($oShellWindows) then

$string="" ; 顯示目地的字串

for $Window in $oShellWindows ; 計算所有存在的 shell windows
$String = $String & $Window.LocationName & @CRLF
next

Msgbox(0,"Shell Windows","您擁有的 shell windows 如下表：" & @CRLF & @CRLF & $String);

endif

; 範例 2
;
; 開啟遠端電腦的 MediaPlayer
$oRemoteMedia = ObjCreate("MediaPlayer.MediaPlayer.1","name-of-remote-computer")

If not @error then
Msgbox(0,"遠端 ObjCreate 測試","遠端 Mediaplayer 物件的 ObjCreate() 函數執行成功！")
$oRemoteMedia.Open( @WindowsDir & "\media\Windows XP Startup.wav") ; 若檔案還在則播放音效
Else
Msgbox(0,"遠端 ObjCreate 測試","開啟遠端物件失敗，錯誤碼：" & hex(@error,8))
Endif
exit


Function ObjEvent

函數說明（Function Reference）

ObjEvent

處理從取得物件進來的事件。

ObjEvent ( $ObjectVar, "函數前綴字母" [, "介面名稱"] )
ObjEvent ( "AutoIt.Error" [, "函數名稱"] )

參數

$ObjectVar | 一個內含物件的變數，該物件來自您要取得的事件。
"函數前綴字母" | 係您指定處理所取得事件的函數前綴字母。 該前綴由物件模式名稱綑綁附加。
"介面名稱" | 事件介面的選擇性名稱。 請注意：須為一個支援外部執行的物件「而且」必須為 DISPATCH 類型。

返回值

成功： | 返回物件或一個函數名稱。
失敗： | 返回 "" 並設定 @error 為 1。

附註

第一種格式通常是用來取得來自提供物件的事件。
要取得特殊事件，請建立一個 AutoIt 函數名稱，並使用跟事件名稱捆綁的提供前綴。

第二種格式是通常是用於 COM 錯誤的處理，若發生任何 COM 錯誤，是因為該函數已被呼叫。

如省略第二個參數，若為當前函數，則它將返回目前錯誤處理函數的名稱。

請檢視：Obj/COM 相關說明 更詳細的解釋。

相關

ObjGet, IsObj, ObjCreate

範例

; ObjEvent 範例

ProgressOn("範例", "載入頁面中...")
$oIE=ObjCreate("InternetExplorer.Application.1") ; 建立 Internet Explorer 應用程式
$SinkObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2") ; 指定事件以 IEEvent_ 開始 UDF

; 執行一些瀏覽動作
$oIE.Visible=1
$oIE.RegisterAsDropTarget = 1
$oIE.RegisterAsBrowser = 1
$oIE.Navigate( "http://www.AutoItScript.com/" )

sleep(3000) ; 給它時間載入網頁

$SinkObject=0 ; 停止 IE 事件
$oIE.Quit ; 結束 IE
$oIE=0

; 許多 Internet Explorer 事件函數的其中一個

Func IEEvent_ProgressChange($Progress,$ProgressMax)
$percent = Int( ($Progress * 100) / $ProgressMax )
If $percent >= 0 And $percent <= 100 Then
ProgressSet ( $percent , $percent & " 目前已執行。" , "載入網頁" )
EndIf

EndFunc

; COM 錯誤處理範本
; -------------------------

$oIE=ObjCreate("InternetExplorer.Application.1") ; 建立 Internet Explorer 應用程式

Global $g_eventerror = 0 ; 檢查是否發生錯誤，處理完畢後須重設。

$oMyError = ObjEvent("AutoIt.錯誤","MyErrFunc") ; 初始化 COM 錯誤處理機制

$oIE.UnknownMethod ; 故意呼叫一個未定義類型

If $g_eventerror then
$g_eventerror = 0
Msgbox (0,"AutoItCOM 測試","測試已通過：我們取得的錯誤碼：" & @error)
Else
Msgbox (0,"AutoItCOM 測試","測試失敗！")
Endif

; 這是我自訂的錯誤處理
Func MyErrFunc()

Msgbox(0,"AutoItCOM 測試","我們已攔截一個 COM 錯誤！" & @CRLF & @CRLF & _
"err.description 是： " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number 是： " & @TAB & hex($oMyError.number,8) & @CRLF & _
"err.lastdllerror 是： " & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline 是： " & @TAB & $oMyError.scriptline & @CRLF & _
"err.source 是： " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile 是： " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext 是： " & @TAB & $oMyError.helpcontext _
)

Local $err = $oMyError.number
If $err = 0 Then $err = -1

$g_eventerror = $err ; 此函數返回後進行檢查
Endfunc
Exit


Function ObjGet

函數說明（Function Reference）

ObjGet

接收從工作階段程式或檔名關聯到 COM 的某個物件。

ObjGet ( "檔案名稱" [, "類別名稱"] )

參數

檔案名稱 | (請見附註) 內含物件的檔案名稱或完整路徑。
類別名稱 | (選擇性參數) 物件類別格式如下： "appname.objectype"

返回值

成功： | 返回一個物件。
失敗： | 返回 "" 並設定 @error 為 1。

附註

檔案名稱是可以選擇的，如您只想要使用類別名稱，則不能省略掉參數。
若您只是想要使用類別名稱，請使用一個空白字串。
像是：$Object = ObjGet("","Excel.Application")

如您要使用一個檔案名稱，則類別名稱可以選擇使用，它只在您將數個類別定義成相同名稱的檔案類型，
或是存取一個指定的類型時才會有需要。

請記住不是所有的電腦都會有同樣的物件設定，所以請在呼叫 ObjGet() 後 始終進行 錯誤檢查。

請檢視：Obj/COM 相關說明 更多相關的物件資訊。

相關

GUICtrlCreateObj, IsObj, ObjCreate, ObjEvent, ObjName

範例

; 使用它的類別名稱取得一個物件的範例
;
; Excel 必須先啟動為活動狀態，否則此範本不能順利執行

$oExcel = ObjGet("","Excel.Application") ; 取得一個存在的 Excel 物件

if @error then
Msgbox (0,"Excel 測試","取得啟動中的 Excel 物件發生錯誤，錯誤碼：" & hex(@error,8))
exit
endif

$oExcel.Visible = 1 ; 讓他自行顯示
$oExcel.workbooks.add ; 新增一個工作簿

; 使用檔案名稱取得一個物件的範例
; 以試算表.xls 為檔案名稱的 Excel 檔案必須已建立於根目錄 C:\ 硬碟中
; 如此這個範例才能順利運作

$FileName="C:\試算表.xls"

if not FileExists($FileName) then
Msgbox (0,"Excel 檔測試","無法進行此測試，因為您尚未建立 Excel 檔案："& $FileName)
Exit
endif

$oExcelDoc = ObjGet($FileName) ; 從一個存在的檔案名稱取得 Excel 物件

if IsObj($oExcelDoc) then

; 提示：請別註解這幾行讓 Excel 為可見狀態 (credit: DaleHohm)
; $oExcelDoc.Windows(1).Visible = 1; 在可見工作表內設定第一個試算表
; $oExcelDoc.Application.Visible = 1; 設定程式為可見狀態 (沒有的話 Excel 將被結束)

$String = "" ; 顯示目標的字串

; 某些文件內容不會返回數值，我們將忽略這些
$OEvent=ObjEvent("AutoIt.錯誤","無事件"); 等同於 VBscript's On Error Resume Next

For $Property In $oExcelDoc.BuiltinDocumentProperties
$String = $String & $Property.Name & "：" & @CRLF
Next

Msgbox(0,"Excel 檔案測試","檔案 " & $FileName & " 的內容是：" & @CRLF & @CRLF & $String)

$oExcelDoc.Close ; 關閉 Excel 檔案

else
Msgbox (0,"Excel 檔案測試","錯誤：無法開啟 "& $FileName & " Excel 物件。")
endif
exit


Function ObjName

函數說明（Function Reference）

ObjName

返回名稱或某個物件的整數說明。

ObjName ( $Objectvariable [,旗標] )

參數

$Objectvariable | 內含您欲取得物件名稱的變數。
旗標 | 1 = 指派使用的介面名稱 (預設) 2 = 物件 (檔案) 的說明 3 = 物件的 ProgID() → 註：ProgID = Program ID 等同於 CLSID，微軟用於字串表示。 4 = 來自已建立物件的 DLL 檔 (如有支援) 5 = 工具框的位置和檔案名稱 (如有支援)

返回值

成功： | 返回一個表示名稱的字串。
失敗： | 並設定 @error 並返回 ""。

附註

不是所有物件都能支援旗標 2 到 5，請在遇到這類情況時測試 @error。

相關

IsObj, ObjGet, ObjCreate

範例

$oInternet = ObjCreate("InternetExplorer.Application")
$oInternet.Navigate( "http://www.google.com" ) ; 開啟一個含有一種格式的網頁
sleep(4000) ; 給予該網站時間載入

$oDoc = $oInternet.document ; 測試的範例物件
$oForm = $oDoc.forms(0) ; 測試的範例物件

msgbox(0,"","$oInternet 的介面名稱是： " & ObjName($oInternet) & @CRLF & _
"$oInternet 的物件名稱是： " & ObjName($oInternet,2) & @CRLF & _
"$oDoc 的介面名稱是： " & ObjName($oDoc) & @CRLF & _
"$oDoc 的物件名稱是： " & ObjName($oDoc,2) & @CRLF & _
"$oForm 的介面名稱是： " & ObjName($oForm) & @CRLF & _
"$oForm 的物件名稱是： " & ObjName($oForm,2))


Function DllCall

函數說明（Function Reference）

DllCall

呼叫指定 DLL(動態連結函式庫) 檔案內部的函數。

DllCall ( "DLL", "返回值類型", "函數" [, "類型1", 參數1 [, "類型 n", 參數 n]] )

參數

DLL | 要使用的 DLL 檔案名稱，例如："user32.dll"。也可使用由 DllOpen 取得的控制碼 (請見附註)。
返回值類型 | 函數的返回類型 (請見下表)。
函數 | DLL 中要呼叫的函數名稱，如："MessageBox" ；或順序名稱，如：62。
類型 | [選擇性參數] 參數類型 (請見附註)。
參數 | [選擇性參數] 實際參數 (請見附註)。

有效類型為：
類型 | 細節內容
none | 無數值 (僅作用於無返回值函數的返回類型，跟 C 語言類似)。
byte | 8 位元整數。
ubyte | 無帶符號的 8 位元整數。
short | 16 位元整數。
ushort | 無帶符號的 16 位元整數。
dword | 無帶符號的 32 位元整數。
udword | 無帶符號的 32 位元整數。
int | 32 位元整數。
uint | 無帶符號的 32 位元整數。
long | 32 位元整數。
ulong | 無帶符號的 32 位元整數。
int64 | 64 位元整數。
uint64 | 無帶符號的 64 位元整數。
str | 一個 ANSI 字串 (不能多於 65536 字元)。
wstr | 一個 UNICODE 寬字元文字 (當呼叫需要時須轉換 為/來自 的 ANSI 文字)，不能多於 65536 字元。
hwnd | 視窗控制碼 (指標)。
ptr | 通用指標 (void *)。
float | 單精度浮點指標數值。
double | 雙精度浮點指標數值。
lresult/int_ptr/long_ptr | 當於 x86 或 x64 的 AutoIt 版本下執行時，大小足夠用以支援指標的整數。
lparam/int_ptr/long_ptr | 當於 x86 或 x64 的 AutoIt 版本下執行時，大小足夠用以支援指標的整數。
wparam/uint_ptr/ulong_ptr | 當於 x86 或 x64 的 AutoIt 版本下執行時，大小足夠用以支援指標的無帶符號整數。
* | 新增 * 符號到其它類型結尾以透過關聯傳遞。例如 "int*" 傳遞指標到某個 "int" 類型。

將 Windows API 類型轉換為 AutoIt 類型：
WINDOWS API 類型 | AutoIt 類型
LPCSTR/LPSTR | str
LPCWSTR/LPWSTR | wstr
LPVOID | ptr
HWND | hwnd
WPARAM | wparam
LPARAM | lparam
DWORD | dword
LPDWORD | dword*
HANDLE/HINSTANCE | ptr
LONGLONG/LARGE_INTEGER | int64
ULONGLONG/ULARGE_INTEGER | uint64
UINT_PTR | wparam
LONG_PTR | lparam

返回值

成功： | @error = 0 。
失敗： | @error = 1，不能使用 DLL 檔。
 | @error = 2，不明的 "返回類型"。
 | @error = 3，在 DLL 檔內找不到 "函數"。

其它請見下方附註：

附註

若提供了 DLL 檔名稱，則它將自動被載入然後在結束呼叫後關閉。若您要手動控制載入或不載入某個 DLL 檔，則您可能須用 DllOpen 和 DllClose 並搭配控制碼取代此函數內的檔案名稱。

預設值上，AutoIt 會使用 'stdcall' 呼叫模式。要使用 'cdecl' 模式請在返回類型後方置 ':cdecl' 即可。
DllCall("SQLite.dll", "int:cdecl", "sqlite3_open", "str", $sDatabase_Filename , "long*", 0)

預設值上，AutoIt 會嘗試使用 ANSI 版本的函數名稱，也就是說：MessageBoxA 會在當 MessageBox 被當做函數提供時，企圖呼叫 Unicode 版本的函數，改為使用 MessageBoxW。

若函數呼叫失敗則 @error 會設為 1。否則將其中內含函數返回值和所有參數單一副本的群組返回 (也內含透過傳遞而可能被修改函數的相關參數等)
$return[0] = 函數返回值
$return[1] = param1
$return[2] = param2
...
$return[n] = paramn

相關

DllCallbackFree, DllCallbackGetPtr, DllCallbackRegister, DllOpen, DllClose, DllStructCreate, DllStructGetPtr

範例

; *******************************************************
; 範例 1 - 直接呼叫 MessageBox API
; *******************************************************

$result = DllCall("user32.dll", "int", "MessageBox", "hwnd", 0, "str", "某些文字", "str", "某些標題", "int", 0)

; *******************************************************
; 範例 2 - 呼叫修改參數的函數
; *******************************************************

$hwnd = WinGetHandle("[未命名 - 記事本]")
$result = DllCall("user32.dll", "int", "GetWindowText", "hwnd", $hwnd, "str", "", "int", 32768)
msgbox(0, "", $result[0]) ; 返回字元數量
msgbox(0, "", $result[2]) ; 在 param 2 的返回文字

; *******************************************************
; 範例 3 - 顯示視窗 PickIconDlg 選擇圖示
; *******************************************************

$sFileName = @SystemDir & '\shell32.dll'

; 建立結構儲存圖示索引
$stIcon = DllStructCreate("int")
$stString = DLLStructCreate("wchar[260]")
$structsize = DllStructGetSize($stString)/2
DllStructSetData($stString, 1, $sFileName)

; 執行 PickIconDlg - '62' 是此函數照順序排序的數值
DllCall("shell32.dll", "none", 62, "hwnd", 0, "ptr", DllStructGetPtr($stString), "int", $structsize, "ptr", DllStructGetPtr($stIcon))

$sFileName = DllStructGetData($stString, 1)
$nIconIndex = DllStructGetData($stIcon, 1)

; 顯示新檔案名稱和圖示索引
Msgbox(0, "資訊訊息", "最近選擇的檔案：" & $sFileName & @LF & "圖示索引：" & $nIconIndex)


Function DllCallbackFree

函數說明（Function Reference）

DllCallbackFree

針對前一個以 DllCallbackRegister 建立的控制碼挪出可用空間。

DllCallbackFree ( 控制碼 )

參數

控制碼 DllCallback 控制碼，由前一個 DllCallbackRegister 呼叫返回取得。

返回值

無。

附註

在完成結束時，AutoIt 會自動關閉任何它開啟的控制碼，不過呼叫 DllCallbackFree 仍然是較建議的方式。

相關

DllCall, DllCallbackGetPtr, DllCallbackRegister

範例

; 建立 callback 函數
$handle = DLLCallbackRegister ("_EnumWindowsProc", "int", "hwnd;lparam")

; 呼叫 EnumWindows
DllCall("user32.dll", "int", "EnumWindows", "ptr", DllCallbackGetPtr($handle), "lparam", 10)

; 移除 callback 函數
DllCallbackFree($handle)

; 取消程式呼叫
Func _EnumWindowsProc($hWnd, $lParam)
If WinGetTitle($hWnd) <> "" And BitAnd(WinGetState($hWnd), 2) Then
$res = MsgBox(1, WinGetTitle($hWnd), "$hWnd=" & $hWnd & @CRLF & "lParam=" & $lParam & @CRLF & "$hWnd(type)=" & VarGetType($hWnd))
If $res = 2 Then Return 0 ; 取消點選，返回 0 結束列出動作
EndIf
Return 1 ; 返回 1 繼續列出
EndFunc


Function DllCallbackGetPtr

函數說明（Function Reference）

DllCallbackGetPtr

返回到指標，並到可被傳遞到 Win32 API 的某個返回函數。

DllCallbackGetPtr ( 控制碼 )

參數

控制碼 從 DllCallbackRegister 返回的 DllCallback 控制碼。

返回值

成功： | 取消函數呼叫的指標。
失敗： | 返回 0。

附註

當使用 DllCall 時，請用 DllCallbackGetPtr 將取消函數呼叫的位址傳送給 Win32 API。

相關

DllCall, DllCallBackRegister, DllCallbackFree

範例

; 建立 callback 函數
$handle = DLLCallbackRegister ("_EnumWindowsProc", "int", "hwnd;lparam")

; 呼叫 EnumWindows
DllCall("user32.dll", "int", "EnumWindows", "ptr", DllCallbackGetPtr($handle), "lparam", 10)

; 移除 callback 函數
DllCallbackFree($handle)

; 取消程式呼叫
Func _EnumWindowsProc($hWnd, $lParam)
If WinGetTitle($hWnd) <> "" And BitAnd(WinGetState($hWnd), 2) Then
$res = MsgBox(1, WinGetTitle($hWnd), "$hWnd=" & $hWnd & @CRLF & "lParam=" & $lParam & @CRLF & "$hWnd(type)=" & VarGetType($hWnd))
If $res = 2 Then Return 0 ; 取消點選，返回 0 結束列出動作
EndIf
Return 1 ; 返回 1 繼續列出
EndFunc


Function DllCallbackRegister

函數說明（Function Reference）

DllCallbackRegister

建立一個使用者自訂的 DLL 返回呼叫函數。

DllCallbackRegister ( "函數", "返回類型", "參數" )

參數

函數 | 呼叫的使用者定義函數名稱。
返回類型 | 返回的類型及呼叫函數協定 (依 DllCall 決定)。
參數 | 一份由分號分隔的參數清單將會被傳送至此函數，須使用 DllCall 類型。

返回值

成功： | 返回 DLL "控制碼"，供用於 DllCallbackGetPtr 和 DllCallbackFree 函數。
失敗： | 若錯誤發生返回 0。

附註

當取消呼叫工作完成後，請呼叫 DllCallbackFree 函數關閉它。AutoIt 正常情形上會主動關閉所有進行終止的檔案，不過使用 DllCallbackFree 呼叫仍然是較建議的方式。

相關

DllCall, DllCallbackFree, DllCallbackGetPtr

範例

; 建立 callback 函數
$handle = DLLCallbackRegister ("_EnumWindowsProc", "int", "hwnd;lparam")

; 呼叫 EnumWindows
DllCall("user32.dll", "int", "EnumWindows", "ptr", DllCallbackGetPtr($handle), "lparam", 10)

; 移除 callback 函數
DllCallbackFree($handle)

; 取消程式呼叫
Func _EnumWindowsProc($hWnd, $lParam)
If WinGetTitle($hWnd) <> "" And BitAnd(WinGetState($hWnd), 2) Then
$res = MsgBox(1, WinGetTitle($hWnd), "$hWnd=" & $hWnd & @CRLF & "lParam=" & $lParam & @CRLF & "$hWnd(type)=" & VarGetType($hWnd))
If $res = 2 Then Return 0 ; 取消點選，返回 0 結束列出動作
EndIf
Return 1 ; 返回 1 繼續列出
EndFunc


Function DllClose

函數說明（Function Reference）

DllClose

關閉以前開啟過的DLL檔案。

DllClose ( DLL 控制碼 )

參數

DLL 控制碼 DLL 的控制碼，由前一個 DllOpen 呼叫返回取得。

返回值

無。

附註

在完成結束時，AutoIt 會自動關閉任何它開啟的 DLL，不過呼叫 DllClose 仍然是較建議的方式。

相關

DllCall, DllOpen

範例

$dll = DllOpen("user32.dll")
$result = DllCall($dll, "int", "MessageBox", "hwnd", 0, "str", "一些文字", "str", "一些標題", "int", 0)
DllClose($dll)


Function DllOpen

函數說明（Function Reference）

DllOpen

開啟指定的 DLL 檔案以供 DllCall 函數使用。

DllOpen ( "檔案名稱" )

參數

檔案名稱 要開啟的 DLL 檔名稱。

返回值

成功： | 返回 DLL "控制碼"，供用於隨後的函數。
失敗： | 若錯誤發生返回 0。

附註

當 DLL 工作完成後，請呼叫 DllClose 函數關閉它。AutoIt 正常情形上會主動關閉所有終止的檔案，不過使用 DllClose 仍然是較建議的方式。

相關

DllCall, DllClose

範例

$dll = DllOpen("user32.dll")
$result = DllCall($dll, "int", "MessageBox", "hwnd", 0, "str", "一些文字", "str", "一些標題", "int", 0)
DllClose($dll)


Function DllStructCreate

函數說明（Function Reference）

DllStructCreate

建立一個 C/C++ 結構鍵入 DllCall 中使用。

DllStructCreate ( "結構類型" [,指標] )

參數

"結構類型" | 某個說明程式結構以協助建立的字串 (請見附註)。
指標 | 若是支援該結構則不配置記憶體，改由使用支援的指標。

返回值

成功： | 與 DllStruct 呼叫使用的變數。
失敗： | 返回 0。
@Error： | 0 = 無錯誤。
 | 1 = 傳送至 DllStructCreate 的變數不是字串。
 | 2 = 字串內傳遞了某個不明的資料類型。
 | 3 = 為結構配置需要的記憶體內容失敗，或指標 = 0。
 | 4 = 為傳遞的字串配置記憶體內容錯誤。

類型 | 詳細內容
byte | 8bit(1位元組) 帶符號字元。
ubyte | 8bit(1位元組) 無帶符號字元。
char | 8bit(1位元組) ASCII 字元。
wchar | 16bit(2位元組) 寬字元。
short | 16bit(2位元組) 帶符號整數。
ushort | 16bit(2位元組) 無帶符號整數。
int | 32bit(4位元組) 帶符號整數。
uint | 32bit(4位元組) 無帶符號整數。
long | 32bit(4位元組) 帶符號整數。
ulong | 32bit(4位元組) 無帶符號整數。
dword | 32bit(4位元組) 無帶符號整數。
ptr | 32bit(4位元組) 整數。
hwnd | 32bit(4位元組) 整數。
float | 32bit(4位元組) 浮點。
double | 64bit(8位元組) 浮點。
int64 | 64bit(8位元組) 帶符號整數。
uint64 | 64bit(8位元組) 無帶符號整數。
int_ptr | 32 或 64bit 帶符號整數 (依使用的 AutoIt x86 或 x64 版本而定)。
uint_ptr | 32 或 64bit 帶符號整數 (依使用的 AutoIt x86 或 x64 版本而定)。
long_ptr | 32 或 64bit 無帶符號整數 (依使用的 AutoIt x86 或 x64 版本而定)。
ulong_ptr | 32 或 64bit 無帶符號整數 (依使用的 AutoIt x86 或 x64 版本而定)。

附註

每筆資料類型必須以 ';' 分號隔開，並在資料類型後面新增 '[大小]' 建立群組，如：DllStructCreate("int;char[128]")。
每個類別可以用類似 C-語言 的模式聲明加入，如：DllStructCreate("int n;char buffer[128]")。
此類資料名稱可以在其它像 DllStruct... 函數等類別位置中使用。

預設值會使用 8 位元對齊結構 (以保持跟 Microsoft 編譯器與 API 函式的相容性和一致性)。
要以 align 關鍵字來用不同的結構前綴對齊模式的話 - 其有效的對齊模式為 1,2,4,8 和 16 位元：
DllStructCreate("short;int") ; 結構為 8 位元組，"int" 在 offset 4。
DllStructCreate("align 2;short;int") ; 結構為 6 位元組，"int" 在 offset 2。

要釋放配置的記憶體，只要設定返回變數為 0 即可。

相關

DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr

範例

;=========================================================
; 建立結構類型
; struct {
; int var1;
; 無帶符號字元 var2;
; 無帶符號整數 var3;
; char var4[128];
; }
;=========================================================
$str = "int var1;ubyte var2;uint var3;char var4[128]"
$a = DllStructCreate($str)
if @error Then
MsgBox(0,"","在 DllStructCreate 內發生錯誤" & @error);
exit
endif

;=========================================================
; 設定結構內的資料
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1 將被分配至(無帶符號整數 - int)
; strcpy(struct.var4,"您好");
; struct.var4[0] = 'h';
;=========================================================
DllStructSetData($a,"var1",-1)
DllStructSetData($a,"var2",255)
DllStructSetData($a,"var3",-1)
DllStructSetData($a,"var4","您好")
DllStructSetData($a,"var4",Asc("h"),1)

;=========================================================
; 顯示結構內的訊息
;=========================================================
MsgBox(0,"DllStruct 函數內容","結構大小：" & DllStructGetSize($a) & @CRLF & _
"結構指標：" & DllStructGetPtr($a) & @CRLF & _
"資料：" & @CRLF & _
DllStructGetData($a,1) & @CRLF & _
DllStructGetData($a,2) & @CRLF & _
DllStructGetData($a,3) & @CRLF & _
DllStructGetData($a,4))

;=========================================================
; 依需要分配給結構的記憶體可用剩餘空間
;=========================================================
$a=0


Function DllStructGetData

函數說明（Function Reference）

DllStructGetData

返回某個 struct 的類別資料。

DllStructGetData ( 結構, 類別(Element) [, 索引 ] )

參數

結構 | 由 DllStructCreate 返回的結構。
類別(Element) | 為您要存取的結構類別，開始時為 1 或 DllStructCreate 內定義的類別。
索引 | 若該類別類別為群組，您須指定返回的索引位置，否則返回 index 1，第一個類別為 1。
*char[n], byte[n] 和 ubyte[n] 在索引被忽略時會返回全部類別資料。

返回值

成功： | 結構類別內的資料。
失敗： | 返回 0。
@Error： | 0 = 無錯誤。
 | 1 = 結構不正確則由 DllStructCreate 返回。
 | 2 = 類別數值超出範圍。
 | 3 = 索引有可能被置於結構外。
 | 4 = 類別資料類型不明。
 | 5 = 索引 <= 0。

附註

當類別為 char[n] 且索引被忽略，則返回資料為字串；當類別為 byte[n] 或 ubyte[n] 且索引被省略則返回二進位資料，
否則將始終返回數字。

相關

DllCall, DllStructCreate, DllStructSetData

範例

$p = DllStructCreate("dword dwOSVersionInfoSize;dword dwMajorVersion;dword dwMinorVersion;dword dwBuildNumber;dword dwPlatformId;char szCSDVersion[128]")

;假設它是 p->dwOSVersionInfoSize = sizeof(OSVERSIONINFO)
DllStructSetData($p, "dwOSVersionInfoSize", DllStructGetSize($p))

;建立一個 DllCall 呼叫 DLL
$ret = DllCall("kernel32.dll","int","GetVersionEx","ptr",DllStructGetPtr($p))

if Not $ret[0] Then
MsgBox(0,"DllCall 錯誤","DllCall 呼叫失敗。")
exit
EndIf

;取得返回值
$major = DllStructGetData($p,"dwMajorVersion")
$minor = DllStructGetData($p,"dwMinorVersion")
$build = DllStructGetData($p,"dwBuildNumber")
$platform = DllStructGetData($p,"dwPlatformId")
$version = DllStructGetData($p,"szCSDVersion")

;清理結構
$p =0

msgbox(0,"DllStruct 示範","主要：" & $major & @CRLF & _
"次要：" & $minor & @CRLF & _
"建立：" & $build & @CRLF & _
"平台 ID：" & $platform & @CRLF & _
"版本：" & $version)


Function DllStructGetPtr

函數說明（Function Reference）

DllStructGetPtr

返回指標到 struct 或一個 struct 類別。

DllStructGetPtr ( 結構 [,類別(Element)])

參數

結構 | 由 DllStructCreate 返回的結構。
類別(Element) | (選擇性參數) 結構的類別取決於您需要的指標，開始時為 1 或 DllStructCreate 內定義的類別。

返回值

成功： | 指向結構的指標。
失敗： | 返回 0。
@Error： | 0 = 無錯誤。
 | 1 = 結構不正確則由 DllStructCreate 返回。
 | 2 = 類別不在範圍內。

附註

請於 DllCall 中使用。

相關

DllCall, DllStructCreate

範例

;範例1
;取得視窗控制碼並利用 WinGetPos 取得視窗框類別
$hwnd = WinGetHandle("")
$coor = WinGetPos($hwnd)

;建立結構
$rect = DllStructCreate("int;int;int;int")

;建立 DllCall 呼叫 DLL
DLLCall("user32.dll","int","GetWindowRect", _
"hwnd",$hwnd, _
"ptr",DllStructGetPtr($rect)) ; 當呼叫 DllCall 時使用 DllStructGetPtr 函數

;取得返回的視窗
$l = DllStructGetData($rect,1)
$t = DllStructGetData($rect,2)
$r = DllStructGetData($rect,3)
$b = DllStructGetData($rect,4)

;清理結構
$rect = 0

;顯示 WinGetPos 的結果和返回的視窗
MsgBox(0,"Larry 測試：","WinGetPos(): (" & $coor[0] & "," & $coor[1] & _
") (" & $coor[2] + $coor[0] & "," & $coor[3] + $coor[1] & ")" & @CRLF & _
"GetWindowRect(): (" & $l & "," & $t & ") (" & $r & "," & $b & ")")

;範例2
; DllStructGetPtr 參照某個項目
$a = DllStructCreate("int")
if @error Then
MsgBox(0,"","在 DllStructCreate 內發生錯誤" & @error);
exit
endif

$b = DllStructCreate("uint",DllStructGetPtr($a,1))
if @error Then
MsgBox(0,"","在 DllStructCreate 內發生錯誤" & @error);
exit
endif

$c = DllStructCreate("float",DllStructGetPtr($a,1))
if @error Then
MsgBox(0,"","在 DllStructCreate 內發生錯誤" & @error);
exit
endif

;設定資料
DllStructSetData($a,1,-1)

;=========================================================
; 顯示相同資料類別內的不同資料
;=========================================================
MsgBox(0,"DllStruct 示範", _
"int：" & DllStructGetData($a,1) & @CRLF & _
"uint：" & DllStructGetData($b,1) & @CRLF & _
"浮點：" & DllStructGetData($c,1) & @CRLF & _
"")

; 釋放組態的記憶空間
$a = 0


Function DllStructGetSize

函數說明（Function Reference）

DllStructGetSize

返回在 struct 位元內的大小。

DllStructGetSize ( 結構 )

參數

結構 由 DllStructCreate 返回的結構。

返回值

成功： | 結構大小位元組。
失敗： | 返回 0。
@Error： | 0 = 無錯誤。
 | 1 = 結構不正確則由 DllStructCreate 返回。

附註

使用在當資料於結構內有須要取得大小的情況。

相關

DllCall, DllStructCreate, DllStructSetData

範例

;=========================================================
; 建立結構類型
; struct {
; int var1;
; 無帶符號字元 var2;
; 無帶符號整數 var3;
; char var4[128];
; }
;=========================================================
$str = "int var1;ubyte var2;uint var3;char var4[128]"
$a = DllStructCreate($str)
if @error Then
MsgBox(0,"","在 DllStructCreate 內發生錯誤" & @error);
exit
endif

;=========================================================
; 設定結構內的資料
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1 將被分配至(無帶符號整數 - int)
; strcpy(struct.var4,"您好");
; struct.var4[0] = 'h';
;=========================================================
DllStructSetData($a,"var1",-1)
DllStructSetData($a,"var2",255)
DllStructSetData($a,"var3",-1)
DllStructSetData($a,"var4","您好")
DllStructSetData($a,"var4",Asc("h"),1)

;=========================================================
; 顯示結構內的訊息
;=========================================================
MsgBox(0,"DllStruct 函數內容","結構大小：" & DllStructGetSize($a) & @CRLF & _
"結構指標：" & DllStructGetPtr($a) & @CRLF & _
"資料：" & @CRLF & _
DllStructGetData($a,1) & @CRLF & _
DllStructGetData($a,2) & @CRLF & _
DllStructGetData($a,3) & @CRLF & _
DllStructGetData($a,4))

;=========================================================
; 依需要分配給結構的記憶體可用剩餘空間
;=========================================================
$a=0


Function DllStructSetData

函數說明（Function Reference）

DllStructSetData

設定在 struct 內類別的輸入資料。

DllStructSetData ( 結構, 類別(Element), 數值 [, 索引 ] )

參數

結構 | 由 DllStructCreate 返回的結構。
類別(Element) | 為您要存取的結構類別，開始時為 1 或 DllStructCreate 內定義的類別。
數值 | 置於結構內的新數值。
索引 | 若該類別類別為群組，您須指定返回的索引位置，否則返回 index 1，第一個類別為 1。

返回值

成功： | 數值，為從結構內讀取得到的。
失敗： | 返回 0。
@Error： | 0 = 無錯誤。
 | 1 = 結構不正確則由 DllStructCreate 返回。
 | 2 = 類別數值超出範圍。
 | 3 = 索引有可能被置於結構外。
 | 4 = 類別資料類型不明。
 | 5 = 索引 <= 0。

附註

當類別為 char[n], byte[n] 或 ubyte[n] 時資料可以是一個字串，否則必須為數字。

相關

DllCall, DllStructCreate, DllStructGetData

範例

;=========================================================
; 建立結構類型
; struct {
; int var1;
; 無帶符號字元 var2;
; 無帶符號整數 var3;
; char var4[128];
; }
;=========================================================
$str = "int var1;ubyte var2;uint var3;char var4[128]"
$a = DllStructCreate($str)
if @error Then
MsgBox(0,"","在 DllStructCreate 內發生錯誤" & @error);
exit
endif

;=========================================================
; 設定結構內的資料
; struct.var1 = -1;
; struct.var2 = 255;
; struct.var3 = INT_MAX; -1 將被分配至(無帶符號整數 - int)
; strcpy(struct.var4,"您好");
; struct.var4[0] = 'h';
;=========================================================
DllStructSetData($a,"var1",-1)
DllStructSetData($a,"var2",255)
DllStructSetData($a,"var3",-1)
DllStructSetData($a,"var4","您好")
DllStructSetData($a,"var4",Asc("h"),1)

;=========================================================
; 顯示結構內的訊息
;=========================================================
MsgBox(0,"DllStruct 函數內容","結構大小：" & DllStructGetSize($a) & @CRLF & _
"結構指標：" & DllStructGetPtr($a) & @CRLF & _
"資料：" & @CRLF & _
DllStructGetData($a,1) & @CRLF & _
DllStructGetData($a,2) & @CRLF & _
DllStructGetData($a,3) & @CRLF & _
DllStructGetData($a,4))

;=========================================================
; 依需要分配給結構的記憶體可用剩餘空間
;=========================================================
$a=0


Function ProcessClose

函數說明（Function Reference）

ProcessClose

結束某個程式。

ProcessClose ( "程序")

參數

程序 要終止的程序標題或 PID 碼。

返回值

無。

附註

程序名稱為不帶完整路徑的執行檔名稱，如："notepad.exe" 或 "winword.exe"。

如有數個程序名稱相同，則以數值最大的 PID 終止其中一個 -- 不會管最近到底開啟了多少程序。

PID 是以數字表示的程序唯一識別碼，一個 PID 可以透過 ProcessExists 或 Run 指令取得。

大約每隔 250 毫秒檢查程序一次。

相關

ProcessExists, ProcessWait, ProcessWaitClose, Run, WinClose

範例

ProcessClose("notepad.exe")

$PID = ProcessExists("notepad.exe") ; 如程序未找到將返回 PID 或 0
If $PID Then ProcessClose($PID)


Function ProcessExists

函數說明（Function Reference）

ProcessExists

檢查指定程式是否存在。

ProcessExists ( "程序" )

參數

程序 要檢查的程序名稱或 PID 碼。

返回值

成功： | 返回程序的 PID 碼。
失敗： | 如程序不存在返回 0。

附註

程序名稱為不帶完整路徑的執行檔名稱，如："notepad.exe" 或 "winword.exe"。

PID 以數字表示的程序唯一識別碼，一個 PID 碼可以透過 ProcessExists 或 Run 指令取得。

大約每隔 250 毫秒檢查程序一次。

相關

ProcessClose, ProcessWait, ProcessWaitClose, WinExists

範例

If ProcessExists("notepad.exe") Then
MsgBox(0, "範例", "記事本正在執行。")
EndIf


Function ProcessGetStats

函數說明（Function Reference）

ProcessGetStats

返回一個跟記憶體相關的群組或某在執行中程式的 IO 訊息。

ProcessGetStats ( ["程序" [, 類型]] )

參數

程序 | [選擇性參數] 要取得訊息的程序名稱或 PID 碼，預設值為目前程序 (-1)。
類型 | [選擇性參數] 0 = (預設) 記憶體訊息、1 = IO 訊息。

返回值

成功： | 一個訊息資料的群組 (請見附註)。
失敗： | 返回值 0。

附註

返回的群組為單一範圍且依下表建立：

Type = 0 : 記憶體狀態

$array[0] = 工作集區大小(WorkingSetSize)
$array[1] = 尖峰工作集區大小(PeakWorkingSetSize)

Type = 1 : I/O 統計

$array[0] = 執行讀取動作的次數
$array[1] = 執行寫入動作的次數
$array[2] = 執行 I/O、以及其它讀寫動作的次數
$array[3] = 讀取位元組
$array[4] = 寫入位元組
$array[5] = 在執行期間除了讀寫動作外所傳送的位元組

附註

ProcessList

範例

; 取得目前執行程序的記憶體資訊
$mem = ProcessGetStats()

; 取得目前執行程序的 IO 資訊
$IO = ProcessGetStats(-1, 1)


Function ProcessSetPriority

函數說明（Function Reference）

ProcessSetPriority

設定某個程式的優先層級。

ProcessSetPriority ( "程序", 優先權)

參數

程序 | 要檢查的程序名稱或 PID 碼。
優先權 | 一個決定優先權的設定旗標： 0 - 閒置/低 (Idle/Low) 1 - 標準以下 (Below Normal) 2 - 標準 (Normal) 3 - 標準以上 (Above Normal) 4 - 高 (High) 5 - 即時 (Realtime) - 使用請注意，可能導致系統不穩定

返回值

成功： | 返回值 1。
失敗： | 返回 0 並設定 @error 為 1，如嘗試使用一個不支援的優先權層級可能設定 @error 為 2。

附註

無。

相關

無。

範例

Run("Notepad.exe")
ProcessSetPriority("notepad.exe", 0)
; 記事本將立即擁有 閒置/低 的優先權


Function ProcessList

函數說明（Function Reference）

ProcessList

返回當前執行中的程式清單 (含有程式名稱和PID值) 。

ProcessList ( ["名稱"] )

參數

名稱 [選擇性參數] 如提供一個名稱，則只返回名稱符合的程序。

返回值

成功： | 一個內含程序名稱和 PID 碼的群組 (請見附註)。
失敗： | 如清單未建立則將 @error 設定為 1。

附註

返回的群組有兩個範圍且依下表建立：
$array[0][0] = 程序編號
$array[1][0] = 第一個程序的名稱
$array[1][1] = 第一個程序的 ID (PID)
$array[2][0] = 第二個程序的名稱
$array[2][1] = 第二個程序的 ID (PID)
...
$array[n][0] = 第N個程序的名稱
$array[n][1] = 第N個程序的 ID (PID)

如 $array[0][0] = 0 則清單為空，此情況不會設定 @error。

相關

ProcessClose, ProcessExists, ProcessSetPriority, ProcessWait, ProcessWaitClose, ProcessGetStats

範例

; 列出所有的程序
$list = ProcessList()
for $i = 1 to $list[0][0]
msgbox(0, $list[$i][0], $list[$i][1])
next

; 只列出 notepad.exe 程序
$list = ProcessList("notepad.exe")
for $i = 1 to $list[0][0]
msgbox(0, $list[$i][0], $list[$i][1])
next


Function ProcessWait

函數說明（Function Reference）

ProcessWait

暫停腳本的執行直至給定程式存在為止。

ProcessWait ( "程序" [, 逾時] )

參數

程序 | 要檢查的程序名稱。
逾時 | [選擇性參數] 指定要等待多長的時間 (單位為秒)，預設是永久等待。

返回值

成功： | 返回值 1。
失敗： | 如等待逾時則返回 0。

附註

程序名稱為不帶完整路徑的執行檔名稱，如："notepad.exe" 或 "winword.exe"。

大約每隔 250 毫秒檢查程序一次。

此函數只具備程序的處理功能而不允許 PID碼，因為 PID 碼是隨機配置發給的，等待一個特殊 PID 碼的存在沒有什麼意義。

相關

ProcessClose, ProcessExists, ProcessWaitClose, RunWait, WinWait, WinWaitActive

範例

ProcessWait("notepad.exe")


Function ProcessWaitClose

函數說明（Function Reference）

ProcessWaitClose

暫停腳本的執行直至給定程式不再存在為止。

ProcessWaitClose ( "程序" [, 逾時] )

參數

程序 | 要檢查的程序名稱或 PID 碼。
逾時 | [選擇性參數] 指定要等待多長的時間 (單位為秒)，預設是永久等待。

返回值

成功： | 返回 1 並設定 @extended 為程序結束碼。
失敗： | 若逾時則返回 0，對於無效的 PID @error 設為非零值並將 @extended 設定為 0xCCCCCCCC。

附註

程序名稱為不帶完整路徑的執行檔名稱，如："notepad.exe" 或 "winword.exe"。

PID 是以數字表示的程序唯一識別碼，一個 PID 可以透過 ProcessExists 或 Run 指令取得。

大約每隔 250 毫秒檢查程序一次。

如程序不存在則返回 1。

相關

ProcessClose, ProcessExists, ProcessWait, RunWait, WinWaitClose

範例

;等待直到實際的 notepad 程序皆不存在
ProcessWaitClose("notepad.exe")

; 等待直到 notepad 的特別範本結束
$PID = Run("notepad.exe")
ProcessWaitClose($PID)


Function Run

函數說明（Function Reference）

Run

執行外部程式。

Run ( "檔案名稱" [, "工作目錄" [, 顯示_旗標[, 選項_旗標 ]]] )

參數

檔案名稱 | 要執行的程式名稱 (EXE, BAT, COM, 或 PIF)。
工作目錄 | [選擇性參數] 工作的目錄。
顯示_旗標 | [選擇性參數] 可執行程式的 "顯示旗標"： @SW_HIDE = 隱藏視窗 (或預設關鍵字) @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗
選項_旗標 | [選擇性參數] 控制目前程序及子程序如何互動的各種相關選項： 0x1 ($STDIN_CHILD) = 提供控制碼給 STDIN 子字串 0x2 ($STDOUT_CHILD) = 提供控制碼給 STDOUT 子字串 0x4 ($STDERR_CHILD) = 提供控制碼給 STDERR 子字串 0x8 ($STDERR_MERGED) = 給予 STDOUT 和 STDERR 一樣的控制碼， 暗示表示為 $STDOUT_CHILD 和$STDERR_CHILD。 0x10 ($STDIO_INHERIT_PARENT) = 以主 STDIO 形式提供子字串，此旗標不能與其它任何 STDIO 旗標組合使用，它只在主程序被編譯成控制台程式後才會有作用。 0x10000 ($RUN_CREATE_NEW_CONSOLE) = 子控制台程序應該以它自身視窗建立，而不是利用主視窗，此旗標只在主程序被編譯成控制台程式後才會有作用。

返回值

成功： | 已執行程序的 PID 碼。
失敗： | 返回 0 並設定 @error 為非零值。

附註

要執行 DOS (控制台) 命令提示字元，請嘗試 Run(@ComSpec & " /c " & '指令名稱', "", @SW_HIDE) ; 別忘記在 "/c" 前置 " "。

在執行要求的程式後腳本會繼續，要暫停腳本直到所有產生執行的程式完成，請換用 RunWait 函數。

請給予適當的標準 I/O 參數值，以 StderrRead, StdinWrite 和 StdoutRead 函數跟子程序進行互動。您可以組合這些旗標 (或使用 $STDERR_CHILD, $STDIN_CHILD & $STDOUT_CHILD，在 Constants.au3 有詳細定義) 來管理一個以上的字串。

因為要讓這些字串關閉，則必然會遇到以下的情況：
1) 子程序將關閉它的字串結尾 (此發生於子程序關閉時)
2) AutoIt 必須讀取任何擷取到的字串，直到無資料可取為止
3) 如 STDIN 已提供給子程序，則必須呼叫 StdinWrite() 關閉字串，因為偵測過的字串已沒有保留的必要，所以內部的全部資源會被自動釋放。
StdioClose 可以用於讓 STDIO 字串被強制關閉。

相關

RunWait, RunAs, RunAsWait, ShellExecute, ShellExecuteWait, StderrRead, StdinWrite, StdoutRead, StdioClose, ProcessClose

範例

Run("Notepad.exe", "", @SW_MAXIMIZE)


Function RunWait

函數說明（Function Reference）

RunWait

執行一個外部程式並暫停腳本的執行直至該程式執行完畢。

RunWait ( "檔案名稱" [, "工作目錄" [, 顯示_旗標 [, 選項_旗標 ]]] )

參數

檔案名稱 | 要執行的程式名稱 (EXE, BAT, COM, 或 PIF)。
工作目錄 | [選擇性參數] 工作的目錄。
顯示_旗標 | [選擇性參數] 可執行程式的 "顯示旗標"： @SW_HIDE = 隱藏視窗 (或預設關鍵字) @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗
選項_旗標 | [選擇性參數] 控制目前程序及子程序如何互動的各種相關選項： 0x10000 ($RUN_CREATE_NEW_CONSOLE) = 子控制台程序應該以它自身視窗建立，而不是利用主視窗，此旗標只在主程序被編譯成控制台程式後才會有作用。

返回值

成功： | 返回執行的程式結束碼。
失敗： | 返回 0 並設定 @error 為非零值。

附註

要執行 DOS (控制台) 命令提示字元，請嘗試 Run(@ComSpec & " /c " & '指令名稱', "", @SW_HIDE) ; 別忘記在 "/c" 前置 " "。

在執行要求的程式後腳本將暫停直到該程式結束為止。要執行程式並立即執行腳本執行檔，請換用 Run 函數。

某些程式將出現立即返回的情況，即使它們仍正在執行中；這些程式會產生其它的程序 - 您可能需使用 ProcessWaitClose 函數處理這類情況。

相關

ProcessWait, ProcessWaitClose, Run, ShellExecute, ShellExecuteWait, RunAs, RunAsWait

範例

$val = RunWait("Notepad.exe", @WindowsDir, @SW_MAXIMIZE)
; 腳本將等待直到記事本關閉
MsgBox(0, "程式已返回一個結束碼：", $val)


Function RunAs

函數說明（Function Reference）

RunAs

執行位於其它使用者環境下的外部程式。

RunAs ( "使用者名稱", "網域", "密碼", 登入_旗標, "檔案名稱" [, "工作目錄" [, 顯示_旗標 [, 選項_旗標 ]]] )

參數

使用者名稱 | 要登入的使用者名稱。
網域 | 驗證使之生效的網域。
密碼 | 使用者的密碼。
登入_旗標 | 0 - 不用設定檔 (profile) 互動登入 1 - 使用設定檔 (profile) 互動登入 2 - 僅 Network credentials 授權身份 4 - 繼承呼叫的程式環境，而非使用者的身份
檔案名稱 | 要執行的程式名稱 (EXE, BAT, COM, 或 PIF)。
工作目錄 | [選擇性參數] 工作的目錄，如未指定則使用 @SystemDir 的數值。
顯示_旗標 | [選擇性參數] 可執行程式的 "顯示旗標"： @SW_HIDE = 隱藏視窗 (或預設關鍵字) @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗
選項_旗標 | [選擇性參數] 控制目前程序及子程序如何互動的各種相關選項： 0x1 ($STDIN_CHILD) = 提供控制碼給 STDIN 子字串 0x2 ($STDOUT_CHILD) = 提供控制碼給 STDOUT 子字串 0x4 ($STDERR_CHILD) = 提供控制碼給 STDERR 子字串 0x8 ($STDERR_MERGED) = 給予 STDOUT 和 STDERR 一樣的控制碼， 暗示表示為 $STDOUT_CHILD 和$STDERR_CHILD。 0x10 ($STDIO_INHERIT_PARENT) = 以主 STDIO 形式提供子字串，此旗標不能與其它任何 STDIO 旗標組合使用，它只在主程序被編譯成控制台程式後才會有作用。 0x10000 ($RUN_CREATE_NEW_CONSOLE) = 子控制台程序應該以它自身視窗建立，而不是利用主視窗，此旗標只在主程序被編譯成控制台程式後才會有作用。

返回值

成功： | 已執行程序的 PID 碼。
失敗： | 返回 0 並設定 @error 為非零值。

附註

有一點很重要的是，須指定一個工作目錄給您正在存取執行的使用者環境，否則此函數將會失敗。

建議只載入您確認有需要的使用設定檔，在正當使用的情況下，設定檔佔用記憶體不放的機率是很小的。如腳本使用 RunAs() 的情況是在 SYSTEM 帳戶下 (舉個例子，假設該腳本目前以服務執行) 且已載入使用設定檔，則您必須特別注意該腳本將保持運作狀態直到子程序結束為止。

當以系統管理員執行時 (administrator)，Secondary Logon 服務 (RunAs) 必須開啟否則此函數將會失敗。在 SYSTEM 帳戶下此方式不適用。

在執行要求的程式後腳本會繼續，要暫停腳本直到所有產生執行的程式完成，請換用 RunAsWait 函數。

請給予適當的標準 I/O 參數值，以 StderrRead, StdinWrite 和 StdoutRead 函數跟子程序進行互動。您可以組合這些旗標 (或使用 $STDERR_CHILD, $STDIN_CHILD & $STDOUT_CHILD，在 Constants.au3 有詳細定義) 來管理一個以上的字串。

因為要讓這些字串關閉，則必然會遇到以下的情況：
1) 子程序將關閉它的字串結尾 (此發生於子程序關閉時)
2) AutoIt 必須讀取任何擷取到的字串，直到無資料可取為止
3) 如 STDIN 已提供給子程序，則必須呼叫 StdinWrite() 關閉字串，因為偵測過的字串已沒有保留的必要，所以內部的全部資源會被自動釋放。
StdioClose 可以用於讓 STDIO 字串被強制關閉。

"載入設定檔" 和 "僅 Network credentials 授權身份" 選項是不相容的，如兩者都使用將產生未定義的結果。

在 Windows XP 視窗系統版本下還有一個被發現的問題，就是 STDIO 被阻止重新導向及工作目錄會透露旗標內容。請檢視 Microsoft 技術支援服務知識庫關於 KB818858 的文章資訊，該版本同樣因為該問題而必須用 hotfix 修復。此問題對於在 Windows 2000, Windows XP SP2 或以上版本執行的使用者是無影響的。

相關

Run, RunWait, RunAsWait, ShellExecute, ShellExecuteWait, StderrRead, StdinWrite, StdoutRead, StdioClose, ProcessClose

範例

; 為系統填入適當的使用者名稱和密碼
Local $sUserName = "使用者名稱"
Local $sPassword = "Password"

; 以其它使用者身份執行命令提示字元
RunAs($sUserName, @ComputerName, $sPassword, 0, @ComSpec, @SystemDir)


Function RunAsWait

函數說明（Function Reference）

RunAsWait

執行位於其它使用者環境下的外部程式及暫停腳本的執行直到程式執行完畢。

RunAsWait ( "使用者名稱", "網域", "密碼", 登入_旗標, "檔案名稱" [, "工作目錄" [, 顯示_旗標 [, 選項_旗標 ]]] )

參數

使用者名稱 | 要登入的使用者名稱。
網域 | 驗證使之生效的網域。
密碼 | 使用者的密碼。
登入_旗標 | 0 - 不用設定檔 (profile) 互動登入 1 - 使用設定檔 (profile) 互動登入 2 - 僅 Network credentials 授權身份 4 - 繼承呼叫的程式環境，而非使用者的身份
檔案名稱 | 要執行的程式名稱 (EXE, BAT, COM, 或 PIF)。
工作目錄 | [選擇性參數] 工作的目錄，如未指定則使用 @SystemDir 的數值。
顯示_旗標 | [選擇性參數] 可執行程式的 "顯示旗標"： @SW_HIDE = 隱藏視窗 (或預設關鍵字) @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗
選項_旗標 | [選擇性參數] 控制目前程序及子程序如何互動的各種相關選項： 0x10000 ($RUN_CREATE_NEW_CONSOLE) = 子控制台程序應該以它自身視窗建立，而不是利用主視窗，此旗標只在主程序被編譯成控制台程式後才會有作用。

返回值

成功： | 返回執行的程式結束碼。
失敗： | 返回 0 並設定 @error 為非零值。

附註

有一點很重要的是，須指定一個工作目錄給您正在存取執行的使用者環境，否則此函數將會失敗。

建議只載入您確認有需要的使用設定檔，在正當使用的情況下，設定檔佔用記憶體不放的機率是很小的。如腳本使用 RunAs() 的情況是在 SYSTEM 帳戶下 (舉個例子，假設該腳本目前以服務執行) 且已載入使用設定檔，則您必須特別注意該腳本將保持運作狀態直到子程序結束為止。

當以系統管理員執行時 (administrator)，Secondary Logon 服務 (RunAs) 必須開啟否則此函數將會失敗。在 SYSTEM 帳戶下此方式不適用。

在執行要求的程式後腳本將暫停直到該程式結束為止。要執行程式並立即執行腳本執行檔，請換用 RunAs 函數。

某些程式將出現立即返回的情況，即使它們仍正在執行中；這些程式會產生其它的程序 - 您可能需使用 ProcessWaitClose 函數處理這類情況。

"載入設定檔" 和 "僅 Network credentials 授權身份" 選項是不相容的，如兩者都使用將產生未定義的結果。

在 Windows XP 視窗系統版本下還有一個被發現的問題，就是 STDIO 被阻止重新導向及工作目錄會透露旗標內容。請檢視 Microsoft 技術支援服務知識庫關於 KB818858 的文章資訊，該版本同樣因為該問題而必須用 hotfix 修復。此問題對於在 Windows 2000, Windows XP SP2 或以上版本執行的使用者是無影響的。

相關

ProcessWait, ProcessWaitClose, Run, RunWait, ShellExecute, ShellExecuteWait, RunAs

範例

; 為系統填入適當的使用者名稱和密碼
Local $sUserName = "使用者名稱"
Local $sPassword = "Password"

; 以其它使用者身份執行命令提示字元
Local $pid = RunAsWait($sUserName, @ComputerName, $sPassword, 0, @ComSpec, @SystemDir)

; 等待直到程序關閉
ProcessWaitClose($pid)

; 顯示訊息
MsgBox(0, "", "我們等待的程序已關閉了。")


Function ShellExecute

函數說明（Function Reference）

ShellExecute

執行一個外部程式直到使用 ShellExecute API 為止。

ShellExecute ( "檔案名稱" [, "程式參數" [, "工作目錄" [, "動態參數(verb)" [, 顯示_旗標]]]] )

參數

檔案名稱 | 要執行的檔案名稱 (EXE, .TXT, .LNK, 等等)。
程式參數 | [選擇性參數] 任何程式的參數，空白 ("") 為不使用。
工作目錄 | [選擇性參數] 工作資料夾，空白 ("") 為使用目前的工作目錄。
動態參數(verb) | [選擇性參數] 要使用的 "動態參數"，常用的動詞包括： open (開啟) = 開啟指定的檔案，該檔可以是一個執行檔、文件檔、或一個資料夾 (預設) edit (編輯) = 執行一個編輯器並開啟要編修的文件，如 "檔案名稱" 不是一個文件檔，函數將失敗 print (列印) = 列印指定的文件檔，如 "檔案名稱" 不是一個文件檔，函數將失敗 properties (內容) = 顯示檔案或資料夾的內容
顯示_旗標 | [選擇性參數] 可執行程式的 "顯示旗標"： @SW_HIDE = 隱藏視窗 (或預設關鍵字) @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗

返回值

成功： | 返回值 1。
失敗： | 返回 0 並設定 @error 為非零值。

附註

在執行要求的程式後腳本會繼續，要暫停腳本直到所有產生執行的程式完成，請換用 ShellExecuteWait 函數。

相關

ShellExecuteWait, Run, RunWait, RunAs, RunAsWait

範例

; 開啟記事本
ShellExecute("Notepad.exe")

; 以預設編輯器開啟 "文件.txt" 檔
ShellExecute("文件.txt", "", @ScriptDir, "edit")


Function ShellExecuteWait

函數說明（Function Reference）

ShellExecuteWait

執行一個外部程式來使用 ShellExecute API 並暫停腳本的執行直到執行完畢。

ShellExecuteWait ( "檔案名稱" [, "程式參數" [, "工作目錄" [, "動態參數(verb)" [, 顯示_旗標]]]] )

參數

檔案名稱 | 要執行的檔案名稱 (EXE, .TXT, .LNK, 等等)。
程式參數 | [選擇性參數] 任何程式的參數，空白 ("") 為不使用。
工作目錄 | [選擇性參數] 工作資料夾，空白 ("") 為使用目前的工作目錄。
動態參數(verb) | [選擇性參數] 要使用的 "動態參數"，常用的動詞包括： open (開啟) = 開啟指定的檔案，該檔可以是一個執行檔、文件檔、或一個資料夾 (預設) edit (編輯) = 執行一個編輯器並開啟要編修的文件，如 "檔案名稱" 不是一個文件檔，函數將失敗 print (列印) = 列印指定的文件檔，如 "檔案名稱" 不是一個文件檔，函數將失敗 properties (內容) = 顯示檔案或資料夾的內容
顯示_旗標 | [選擇性參數] 可執行程式的 "顯示旗標"： @SW_HIDE = 隱藏視窗 (或預設關鍵字) @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗

返回值

成功： | 返回執行的程式結束碼。
失敗： | 返回 0 並設定 @error 為非零值。

附註

在執行要求的程式後腳本將暫停直到該程式結束為止。

相關

ShellExecute, Run, RunWait, RunAs, RunAsWait

範例

$val = ShellExecuteWait("Notepad.exe")

; 腳本將等待到記事本關閉
MsgBox(0, "程式返回的結束碼： ----", $val)


Function Shutdown

函數說明（Function Reference）

Shutdown

關機。

Shutdown ( 代碼 )

參數

代碼 Shutdown 關機指令的組合值，請見 "附註" 說明。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

shutdown 指令代碼如下表組合的數值：
0 = 登出 (Logoff)
1 = 關機 (Shutdown)
2 = 重新開機 (Reboot)
4 = 強制關閉 (Force)
8 = 斷電 (Power down)
16= 如當機強制關閉 (Force if hung)
32= 待機 (Standby)
64= 休眠 (Hibernate)

數值是可依需要相加的，如要關機並斷電，則代碼為 9 (關機 + 斷電 = 1 + 8 = 9)。

如設定了其它代碼，則待機或休眠會被略過。

相關

ProcessClose

範例

Shutdown(6) ;強制重新開機


Function StderrRead

函數說明（Function Reference）

StderrRead

從前一個執行副程式的 STDERR 字串讀取。

StderrRead ( 程序_ID [, 取值 = false[, 二進位 = false]] )

參數

程序_ID | 子程式的程序_ID，由前一個呼叫 Run 函數返回。
取值 | 如為真，則函數不會移除自字串讀取到的字元。
二進位 | 如為真，則函數會以二進位讀取資料而不是文字 (預設是文字)。

返回值

成功： | 返回讀取得到的資料，@extended 內含讀取的位元組大小。
失敗： | 如到達 EOF(End Of File)、STDERR 不能為程序被重新導向、或其它錯誤則設定 @error 為非零值。

附註

StderrRead 會讀取來自子程序的控制台標準輸出字串，它一般被控制台程式用來寫入畫面。如在為子程序呼叫 Run 函數的時候，您要自 STD I/O 參數讀取的話，必須為此函數包括 $STDERR_CHILD (4) 數值，工作方能順利完成 (請檢視：Run 函數部份)。
StderrRead 不能被擋住，否則將立即返回。為了取得全部的資料，它必須在迴圈內被呼叫。
擷取字串上的內容是不會將資料從緩衝區中移除的，不過，它可以將有用資料如一般返回。
預設值上，返回的資料是文字格式。使用二進位選項的話，該資料將以二進位格式返回。

相關

StdoutRead, StdinWrite, StdioClose, Run, RunAs

範例

; 示範 StdoutRead()
#include <Constants.au3>

Local $foo = Run(@ComSpec & " /c dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
MsgBox(0, "讀取到的 STDOUT 字串：", $line)
Wend

While 1
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "讀取到的 STDERR 字串：", $line)
Wend

MsgBox(0, "示範結束", "結束...")


Function StdinWrite

函數說明（Function Reference）

StdinWrite

寫入數值或字元到前一個執行副程式的 STDIN 字串。

StdinWrite ( 程序_ID[, 資料] )

參數

程序_ID | 子程式的程序_ID，由前一個呼叫 Run 函數返回。
資料 | 您希望函數輸出的資料，可能是文字也可能是二進位資料。

返回值

成功： | 返回寫入的字元大小。
失敗： | STDERR 不能為程序被重新導向、或其它錯誤則設定 @error 為非零值。

附註

StdinWrite 會為子程序寫入控制台標準輸入字串，它一般被控制台程式用來讀取來自使用者、或可說是鍵盤的輸入資訊。如在為子程序呼叫 Run 函數的時候，您要自 STD I/O 參數讀取的話，必須為此函數包括 $STDIN_CHILD (1) 數值，工作方能順利完成 (請檢視：Run 函數部份)。

第二個選擇性參數為您要 StdinWrite 寫入到字串的字元內容。如函數沒用到第二個參數便被呼叫的話，StdinWrite 會關閉該字串並且不再接受它的寫入。

這一個字串是「先進先出緩衝區」而且是沒有固定大小的。如這函數在任何時刻被呼叫 (除非它是被呼叫來關閉字串)，就沒有多餘空間可容納更多字元來寫入字串，StdinWrite 將凍結 (暫停) 且不再返回，直到子程序關閉該字串、或函數自字串讀取到夠多字元使之足以完成寫入程序。此意味 AutoIt 程式將會當住，而且連快速鍵、視窗訊息等等都無法處理，直到子程序讀取到來自 STDIN 字串的內容為止。

相關

StdoutRead, StderrRead, StdioClose, Run, RunAs

範例

; 示範 StdinWrite() 的使用
#include <Constants.au3>

Local $foo = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
; 寫入排序字串到子程式 sort.exe 的 STDIN
StdinWrite($foo, "老鼠" & @CRLF & "貓" & @CRLF & "揮棒" & @CRLF)
; 不用第 2 個參數來呼叫關閉字串
StdinWrite($foo)

; 讀取來字子程式的 STDOUT 並顯示
Local $data
While True
$data &= StdoutRead($foo)
If @error Then ExitLoop
Sleep(25)
WEnd
MsgBox(0, "示範", $data)


Function StdioClose

函數說明（Function Reference）

StdioClose

關閉以 STDIO 重新導向前一個執行程式的所有相關資源。

StdioClose ( 程序_ID )

參數

程序_ID 子程式的程序_ID，由前一個呼叫 Run 函數返回。

返回值

成功： | 非零值。
失敗： | 如程式沒有將 STDIO 重新導向或已關閉則返回 0。

附註

此函數會關閉所有的控制碼並適放 STDIO 所有相關資源，往後將不能讀取來自程式的 STDIO 資料，任何尚未儲存的資料將會遺失。

相關

StdoutRead, StderrRead, StdinWrite, Run, RunAs

範例

; 示範 StdioClose()
#include <Constants.au3>

Local $pid = Run(@ComSpec & " /c dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_MERGED + $STDOUT_CHILD)
StdioClose($pid)

; 將沒有任何內容可讀取，因為我們已關閉所有我們要讀取的字串。
Local $line
While 1
$line = StdoutRead($pid)
If @error Then ExitLoop
MsgBox(0, "讀取到的 STDOUT 為：", $line)
Wend

While 1
$line = StderrRead($pid)
If @error Then ExitLoop
MsgBox(0, "讀取到的 STDERR 為：", $line)
Wend

MsgBox(0, "示範結束", "結束...")


Function StdoutRead

函數說明（Function Reference）

StdoutRead

從前一個執行副程式的 STDOUT 字串讀取。

StdoutRead ( 程序_ID[, 取值 = false[, 二進位 = false]] )

參數

程序_ID | 子程式的程序_ID，由前一個呼叫 Run 函數返回。
取值 | 如為真，則函數不會移除自字串讀取到的字元。
二進位 | 如為真，則函數會以二進位讀取資料而不是文字 (預設是文字)。

返回值

成功： | 返回讀取得到的資料，@extended 內含讀取的位元組大小。
失敗： | 如到達 EOF(End Of File)、STDERR 不能為程序被重新導向、或其它錯誤則設定 @error 為非零值。

附註

StdoutRead 會讀取來自子程序的控制台標準輸出字串，它一般被控制台程式用來寫入畫面。在為子程序呼叫 Run 函數的時候，您要自 STD I/O 參數讀取的話，必須為此函數包括 $STDOUT_CHILD (2) 數值，工作方能順利完成 (請檢視：Run 函數部份)。
StdoutRead 不能被擋住，否則將立即返回。為了取得全部的資料，它必須在迴圈內被呼叫。
擷取字串上的內容是不會將資料從緩衝區中移除的，不過，它可以將有用資料如一般返回。
預設值上，返回的資料是文字格式。使用二進位選項的話，該資料將以二進位格式返回。

相關

StderrRead, StdinWrite, StdioClose, Run, RunAs

範例

; 示範 StdoutRead()
#include <Constants.au3>

Local $foo = Run(@ComSpec & " /c dir foo.bar", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
$line = StdoutRead($foo)
If @error Then ExitLoop
MsgBox(0, "讀取到的 STDOUT 為：", $line)
Wend

While 1
$line = StderrRead($foo)
If @error Then ExitLoop
MsgBox(0, "讀取到的 STDERR 為：", $line)
Wend

MsgBox(0, "示範結束", "結束...")


Function RegDelete

函數說明（Function Reference）

RegDelete

從登錄中移除指定機碼。

RegDelete ( "機碼名稱" [, "數值名稱"] )

參數

機碼名稱 | 要刪除的登錄機碼。
數值名稱 | [選擇性參數] 要刪除的登錄數值。

返回值

成功： | 返回值 1。
特殊： | 如機碼/數值不存在返回 0。
失敗： | 如刪除機碼/數值錯誤返回 2。
 | @error 值依下表設定：
 | 如無法開啟要求機碼返回 1
 | 如無法開啟要求的主機碼返回 2
 | 如無法連線遠端登錄返回 3
 | 如無法刪除要求數值返回 -1
 | 如無法刪除要求機碼/數值返回 -2

附註

登錄機碼必須以 "HKEY_LOCAL_MACHINE" ("HKLM") 或 "HKEY_USERS" ("HKU") 或 "HKEY_CURRENT_USER" ("HKCU") 或 "HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC") 等做開頭。

當在 64-位元 Windows 系統下執行時，如您要刪除某個機碼或數值，在 64-位元 環境下的指定方式，須在 HK... 後頭補綴64，如：HKLM64。

如要存取 (預設值) 須使用 "" (一個空白字串) 做為數值名稱。

刪除機碼動作有潛在的危險性 -- 請謹慎執行！

也可用格式 "\\computername\keyname" 機碼名稱來存取遠端登錄，要使用此函數您須擁有適當的存取權限。

相關

RegRead, RegWrite

範例

RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey")


Function RegEnumKey

函數說明（Function Reference）

RegEnumKey

根據物件 instance 讀取指定子機碼名稱。

RegEnumKey ( "機碼名稱", instance(案例) )

參數

機碼名稱 | 要讀取的登錄機碼。
instance(案例) | 要取得的機碼 instance，以 1 為基準值。

返回值

成功： | 返回要求的子機碼名稱。
失敗： | 返回一個錯誤訊息字串並設定 @error 旗標：
 | 如無法開啟要求機碼返回 1
 | 如無法開啟要求的主機碼返回 2
 | 如無法連線遠端登錄返回 3
 | 如無法取得要求的子機碼返回 -1 (機碼 instance 超過範圍)

附註

登錄機碼必須以 "HKEY_LOCAL_MACHINE" ("HKLM") 或 "HKEY_USERS" ("HKU") 或 "HKEY_CURRENT_USER" ("HKCU") 或 "HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC") 等做開頭。

當在 64-位元 Windows 系統下執行時，如您要刪除某個機碼或數值，在 64-位元 環境下的指定方式，須在 HK... 後頭補綴64，如：HKLM64。

相關

RegEnumVal, RegDelete, RegWrite

範例

For $i= 1 to 10
$var = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE", $i)
If @error <> 0 then ExitLoop
MsgBox(4096, "子機碼 #" & $i & " 在 HKLM\Software 下為：", $var)
Next


Function RegEnumVal

函數說明（Function Reference）

RegEnumVal

根據物件 instance 讀取指定子機碼數值。

RegEnumVal ( "機碼名稱", instance(案例) )

參數

機碼名稱 | 要讀取的登錄機碼。
instance(案例) | 要取得的機碼 instance，以 1 為基準值。

返回值

成功： | 返回要求的登錄值，@EXTENDED 將設定為數值類型。
失敗： | 返回一個錯誤訊息字串並設定 @error 旗標：
 | 如無法開啟要求機碼返回 1
 | 如無法開啟要求的主機碼返回 2
 | 如無法連線遠端登錄返回 3
 | 如無法取得要求的子機碼返回 -1 (機碼 instance 超過範圍)

附註

登錄機碼必須以 "HKEY_LOCAL_MACHINE" ("HKLM") 或 "HKEY_USERS" ("HKU") 或 "HKEY_CURRENT_USER" ("HKCU") 或 "HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC") 等做開頭。

當在 64-位元 Windows 系統下執行時，如您要刪除某個機碼或數值，在 64-位元 環境下的指定方式，須在 HK... 後頭補綴64，如：HKLM64。

相關

RegEnumKey, RegDelete, RegWrite

範例

For $i = 1 to 100
$var = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\Autoit", $i)
if @error <> 0 Then ExitLoop
MsgBox(4096, "數值名稱 #" & $i & " 於 AutoIt3 機碼下 ---------", $var)
next


Function RegRead

函數說明（Function Reference）

RegRead

從登錄讀取一個數值。

RegRead ( "機碼名稱", "數值名稱" )

參數

機碼名稱 | 要讀取的登錄機碼。
數值名稱 | 要讀取的登錄數值。

返回值

成功： | 返回要求的登錄值，並將 @EXTENDED 設定為數值 REG_... 類型。這些在 "Constants.au3" include 檔案中有詳細定義。
失敗： | 返回 "" 並設定 @error 旗標：
 | 如無法開啟要求機碼返回 1
 | 如無法開啟要求的主機碼返回 2
 | 如無法連線遠端登錄返回 3
 | 如無法開啟要求數值返回 -1
 | 如數值類型不支援返回 -2

附註

登錄機碼必須以 "HKEY_LOCAL_MACHINE" ("HKLM") 或 "HKEY_USERS" ("HKU") 或 "HKEY_CURRENT_USER" ("HKCU") 或 "HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC") 等做開頭。

當在 64-位元 Windows 系統下執行時，如您要刪除某個機碼或數值，在 64-位元 環境下的指定方式，須在 HK... 後頭補綴64，如：HKLM64。

AutoIt 可支援 REG_BINARY, REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ, 和 REG_DWORD 等登錄類型。

如要存取 (預設值) 須使用 "" (一個空白字串) 做為數值名稱。

讀取 REG_BINARY 機碼的結果是一個二進位資料類型 (在先前的版本它們是一個十六進位字串)。

讀取 REG_MULTI_SZ 機碼的數個字串項目會被 @LF 分割 - 使用 StringSplit(..., @LF) 可取得每個登錄項目。

也可用格式 "\\computername\keyname" 機碼名稱來存取遠端登錄，要使用此函數您須擁有適當的存取權限。

相關

RegDelete, RegWrite, StringSplit

範例

$var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion", "ProgramFilesDir")
MsgBox(4096, "Program files 在： --------", $var)


Function RegWrite

函數說明（Function Reference）

RegWrite

從登錄建立一個機碼或數值。

RegWrite ( "機碼名稱" [,"數值名稱", "類型", 數值] )

參數

機碼名稱 | 要寫入的登錄機碼，如已指定其它參數則只建立此機碼。
數值名稱 | [選擇性參數] 要寫入的數值名稱。
類型 | [選擇性參數] 可以寫入的機碼類型："REG_SZ", "REG_MULTI_SZ", "REG_EXPAND_SZ", "REG_DWORD", "REG_QWORD", 或 "REG_BINARY"。
數值 | [選擇性參數] 要寫入的數值。

返回值

成功： | 返回值 1。
失敗： | 如寫入登錄機碼或數值錯誤返回 0。
 | @error 值依下表設定：
 | 如無法開啟要求機碼返回 1
 | 如無法開啟要求的主機碼返回 2
 | 如無法連線遠端登錄返回 3
 | 如無法開啟要求的數值返回-1
 | 如數值類型不支援返回 -2

附註

登錄機碼必須以 "HKEY_LOCAL_MACHINE" ("HKLM") 或 "HKEY_USERS" ("HKU") 或 "HKEY_CURRENT_USER" ("HKCU") 或 "HKEY_CLASSES_ROOT" ("HKCR") 或 "HKEY_CURRENT_CONFIG" ("HKCC") 等做開頭。

當在 64-位元 Windows 系統下執行時，如您要刪除某個機碼或數值，在 64-位元 環境下的指定方式，須在 HK... 後頭補綴64，如：HKLM64。

AutoIt 可支援 REG_BINARY, REG_SZ, REG_MULTI_SZ, REG_EXPAND_SZ, REG_QWORD, 和 REG_DWORD 等登錄類型。

如要存取 (預設值) 須使用 "" (一個空白字串) 做為數值名稱。

當寫入一個 REG_MULTI_SZ 機碼時您必須以 @LF 將每個數值分隔，該值「絕對不能」以 @LF 做結尾，除非您要建立的是空白的子字串 (請見範例)。

也可用格式 "\\computername\keyname" 機碼名稱來存取遠端登錄，要使用此函數您必須在 NT/2000/XP/2003 系統上擁有適當的存取權限。

相關

RegDelete, RegRead

範例

; 寫入一個 REG_SZ 機碼數值
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\測試", "測試機碼", "REG_SZ", "您好這是測試")

; 在 "第1行" 和 "第2行" 寫入 REG_MULTI_SZ 數值
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\測試", "測試機碼1", "REG_MULTI_SZ", "第1行" & @LF & "第2行")

; 在 "第 1 行" 寫入 REG_MULTI_SZ 數值
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\測試", "測試機碼2", "REG_MULTI_SZ", "第1行")

; 始終新增額外 null 字串
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\測試", "測試機碼3", "REG_MULTI_SZ", "第1行" & @LF & "第2行" & @LF)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\測試", "測試機碼4", "REG_MULTI_SZ", "第1行" & @LF & @LF & "第2行" & @LF)

; 空白的 REG_MULTI_SZ
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\測試", "測試機碼5", "REG_MULTI_SZ", "")

; 只建立機碼
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\測試1")


Function StringAddCR

函數說明（Function Reference）

StringAddCR

在指定字串的所有換行符號 ( Chr(10) ) 前附加一個ENTER ( Chr(13) ) （ASCII碼) 。

StringAddCR ( "字串" )

參數

字串 要轉換的字串。

返回值

返回所有帶換行符號 ( @LF ) 、且前綴 ENTER 返回符號 ( @CR ) 的字串。

附註

無。

相關

StringStripCR, StringReplace

範例

$old = "記事本" & @LF & "預計的" & @LF & "CRLF 文字"
$new = StringAddCR($old)


Function StringCompare

函數說明（Function Reference）

StringCompare

依照選項比對兩個字串。

StringCompare ( "字串1", "字串2" [, 大小寫] )

參數

字串1 | 要求取的第一個字串。
字串2 | 要求取的第二個字串。
大小寫 | [選擇性參數] 該旗標為設定是否要區分大小寫： 0 = 不區分大小寫，使用電腦的當前模式 (預設) 1 = 區分大小寫 2 = 不區分大小寫，使用基本/較快的比對模式。

返回值

0 | "字串1" 和 "字串2" 相同。
> 0 | "字串1" 大於 "字串2"。
< 0 | "字串1" 小於 "字串2"。

附註

無。

相關

String, StringInStr, StringLeft, StringLen, StringLower, StringMid, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$result = StringCompare("MELON", "melon")
MsgBox(0, "StringCompare 字串比對結果 (模式 0)：", $result)

$result = StringCompare("MELON", "melon", 1)
MsgBox(0, "StringCompare 字串比對結果 (模式 1)：", $result)

$result = StringCompare("MELON", "melon", 2)
MsgBox(0, "StringCompare 字串比對結果 (模式 2)：", $result)


Function StringInStr

函數說明（Function Reference）

StringInStr

檢查某個字串是否含有給定的子字串。

StringInStr ( "字串", "子字串" [, 區分大小寫 [, 順序 [, 開始 [, 計數]]]] )

參數

字串 | 要求取的字串。
子字串 | 要尋找的子字串。
區分大小寫 | [選擇性參數] 該旗標為設定是否要區分大小寫： 0 = 不區分大小寫，使用電腦的當前模式 (預設) 1 = 區分大小寫 2 = 不區分大小寫，使用基本/較快的比對模式。
順序 | [選擇性參數] 為在字串內搜尋子字串的順序。如順序使用負數則從右邊開始搜尋，預設值為 1 (搜尋第一個符合的子字串)。
開始 | [選擇性參數] 搜尋的起始位置。
計數 | [選擇性參數] 搜尋執行的比對次數。

返回值

成功： | 返回子字串的位置。
失敗： | 如未找到字串返回 0。
@Error | 0 - 標準動作
 | 1 - 提供的"開始" 或 "順序" 參數無效。

附註

第一個字元的位置是 1。

相關

String, StringCompare, StringLeft, StringLen, StringLower, StringMid, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$result = StringInStr("我是一個字串", "RING")
$location = StringInStr("如果啄木鳥能啄木的話他能啄多少木頭？", "木", 0, 3) ; 搜尋關於 "木" 順序第三位的字串

MsgBox(0, "搜尋結果：", $location)

;原文：How much wood could a woodchuck chuck if a woodchuck could chuck wood?
;譯文：如果啄木鳥能啄木的話他能啄多少木頭？


Function StringIsAlNum

函數說明（Function Reference）

StringIsAlNum

檢查某個字串是否僅含有字母或數字。

StringIsAlNum ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串內含非標準字串則返回 0。

附註

請記住空格會導致 StringIsAlNum 返回 0。

相關

StringIsAlpha, StringIsASCII, StringIsDigit, StringIsLower, StringIsSpace, StringIsUpper, StringIsXDigit, StringUpper, StringLower

範例

$x = "這 是 帶 著 空 格 的 句 子。"
MsgBox(0,"StringIsAlNum 返回值：", StringIsAlNum($x))


Function StringIsAlpha

函數說明（Function Reference）

StringIsAlpha

檢查某個字串是否僅含有字母。

StringIsAlpha ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串內含非標準字串則返回 0。

附註

請記住空格會導致 StringIsAlpha 返回 0。

相關

StringIsAlNum, StringIsASCII, StringIsDigit, StringIsLower, StringIsSpace, StringIsUpper, StringIsXDigit, StringUpper, StringLower

範例

$x = "這是帶著空格的句子。"
MsgBox(0,"StringIsAlpha 返回值：", StringIsAlpha($x))


Function StringIsASCII

函數說明（Function Reference）

StringIsASCII

檢查某個字串是否僅含有ASCII碼值介於 0x00 - 0x7f（0 - 127) 之間的字元。

StringIsASCII ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串內含延伸 ASCII 字元返回 0。

附註

無。

相關

StringIsAlNum, StringIsAlpha, StringIsDigit, StringIsLower, StringIsSpace, StringIsUpper, StringIsXDigit, StringUpper, StringLower

範例

$x = StringIsASCII("這是一個句子。")
MsgBox(0,"StringIsASCII 返回值：", $x)


Function StringIsDigit

函數說明（Function Reference）

StringIsDigit

檢查某個字串是否僅含有數字 (0-9) 。

StringIsDigit ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串沒有數字返回 0。

附註

請見範例。

相關

StringIsAlNum, StringIsAlpha, StringIsASCII, StringIsLower, StringIsSpace, StringIsUpper, StringIsXDigit

範例

StringIsDigit("12333") ;返回 1
StringIsDigit("1.5") ;返回 0 因為有小數點
StringIsDigit("1 2 3") ;返回 0 因為有空格
StringIsDigit("") ;返回 0


Function StringIsFloat

函數說明（Function Reference）

StringIsFloat

檢查某個字串是否為浮點。

StringIsFloat ( "字串/運算式" )

參數

字串/運算式 要檢查的字串或運算式。

返回值

成功： | 返回值 1。
失敗： | 如不是浮點格式則返回 0。

附註

如該字串內含的小數至少有一個以上且小數點 "只有一個"，則為一個有效浮點；其它字元部份只有開頭有加號或減號者可允許使用 (StringIsFloat 不接受逗號作為小數點，即使電腦的區域設定中已設定使用該符號)。如參數不是一個字串，該值會被轉換成字串，請見範例。

相關

StringIsInt, IsFloat

範例

StringIsFloat("1.5") ;返回 1
StringIsFloat("7.") ;返回 1 因為有小數點
StringIsFloat("-.0") ;返回 1
StringIsFloat("3/4") ;返回 0 因為 '3' 斜線 '4' 不代表是浮點
StringIsFloat("2") ; 返回 0 因為 '2' 是一個整數，不是一個浮點

StringIsFloat(1.5) ;返回 1 因為 1.5 轉換後為內含 . 的有效字串
StringIsFloat(1.0) ;返回 0 因為 1.0 轉換後為不包含 . 的無效字串


Function StringFormat

函數說明（Function Reference）

StringFormat

返回格式化字串 (類似於C語言的sprintf() 函數) 。

StringFormat ( "格式控制", 變數1 [, ... 變數32 ] )

參數

格式控制 | 使用的格式和旗標 (請見附註)。
變數1...變數32 | 最多可使用 32 個變數，此參數將依 "格式控制項" 內容輸出字串。

返回值

依 "格式控制" 參數定義的 "變數格式" 返回格式化字串。

附註

為防止緩衝溢位，每個 "變數" 上限為 65535 字元。
換碼字元(Escape character) 可以包含在 "格式控制" 內像：\n (@LF), \r (@CR), \t (@TAB]。所以如果您希望擁有一個 "\" 必須使用 \\，"%" %% 也一樣比照處理。

"變數格式" 是：%[旗標] [寬度] [.精確度] 類型。

寬度規則說明

寬度規則是此函數格式規則定義的第二個選擇範疇。寬度參數是一個非負數的十進位整數，用以控制可列印字元數量的最小值。若輸出值中的實際字元數量少於指定寬度，則依照 —> 是否指定 "–" 旗標(靠左對齊) ，在數值左側或右側補上空格，直到抵達寬度下限。如寬度帶有前綴數值 0，則補零到最小寬度為止 (它對於靠左對齊的數字是沒有用處的)。

寬度規則不會使數值被裁斷。若輸出值中的字元數量大於指定寬度、或未提供寬度，則列出數值的所有字元 (受精確度範圍控制)。

類型規則說明

類型 | 變數類型 | 輸出格式
d, i | 整數 | 帶符號十進位整數。
o | 整數 | 無符號八進位整數。
u | 整數 | 無符號十進位整數。
x | 整數 | 無符號十六進位整數，使用："abcdef"。
X | 整數 | 無符號十六進位整數，使用："ABCDEF"。
e | 浮點 | 帶符號數值，格式為：[ - ]d.dddd e [符號 ]ddd；其中 d 代表一個十進位數字，dddd 是一位或多位數字，ddd 剛好三個十進位數字，至於 符號 就是 + 或 -。
E | 浮點 | 與 e 格式相同，不過使用 E 而不是 e，為指數的表示法。
f | 浮點 | 帶符號數值，格式為：[ - ]dddd.dddd；其中 dddd 是一位或多位數字。小數點前面的位數由該數的大小決定，而小數點後面的位數則由精確度決定。
g | 浮點 | 帶符號數值，以 f 或 e 的格式列出，不論是哪一個，它所提供的數值和精確度都會更精細許多。當指數小於 -4 或大於/等於精確度參數時，才使用 e 格式，後面的零將被裁斷，且若小數點後有一個或更多位小數時才保留小數點。
G | 浮點 | 與 g 格式相同，不過使用 E 而不是 e，為指數的表示法 (該處會被捨入)。
s | 字串 | 字串。

旗標規則說明

旗標 | 含義說明 | 預設值
- | 在提供的寬度範圍內靠左對齊。 | 靠右對齊。
+ | 若輸出值是一個帶符號類型，則為輸出值前綴一個符號 (+ 或 -)。 | 僅當帶符號數值是負數時(-) 時，才會出現符號。
0 | 如 寬度 帶有前綴 0 時，則補零直到最小寬度為止。若 0 和 - 同時出現則 0 會被忽略。假使 0 以整數格式 i、u、x、X、o、d 指定則 0 將被忽略。 | 不補零。
空格 | 若輸出值帶符號而且是正數，則為輸出值前綴一個空格；如空格和 + 旗標同時出現則忽略空格。 | 不顯示空格。
# | 當與 o, x, 或 X 格式一起使用時，# 旗標會對任何非零輸出值各自前綴一個 0, 0x, 或 0X。 | 不顯示空格。
# | 當與 e, E, 或 f 格式一起使用時，# 旗標會強制在所有類型輸出值內補上小數點。 | 僅當該旗標後面有數字時，才會出現小數點。
# | 當與 g 或 G 格式一起使用時，# 旗標會強制在所有類型輸出值內補上小數點，並阻止數值後面的零被裁斷。 當與 c, d, i, u, 或 s 一起使用時 # 會被忽略。 | 僅當該旗標後面有數字時，才會出現小數點，後面的零會被裁斷。

精確度規則說明

精確度規則是此函數格式規則定義的第三個選擇範疇。精確度控制是一個非負數的十進位整數，前面帶一個小數點 (.)，它用來指定被列出的字元數量、小數點位數、或有效數字 (請見下面的表)。和寬度規則不同的是，精確度規則可以使輸出值被裁斷或是浮點被四捨五入。若提供的精度為 0 且輸出值也被轉換為 0，則結果為不輸出任何字元，請見下面所示 (C 語言)：

StringFormat( "%.0d", 0 ); /* 不返回任何字元 */

精確度大小將影響類型

類型 | 含義說明 | 預設值
d, i, u, o, x, X | 精確度決定了要列出數值的最小位數。若參數內的位數小於精確度，則輸出值將被自左邊補零。當位數超過精確度範圍則該數值並不會被裁斷。 | 預設精確度為 1。
e, E | 精確度決定了要列出小數點後面的第幾位。最後一位列出的數字會被四捨五入。 | 預設精確度為 6；如精確度為 0 或出現小數點 (.) 而後面無任何數字，則小數點不會被列出。
f | 精確度決定了要列出小數點後面的第幾位。如出現小數點，則前面須至少顯示一位數。該數值會被四捨五入至適當的位數。 | 預設精確度為 6；若精確度為 0 或出現小數點 (.) 而後面無任何數字，則小數點不會被列出。
g, G | 精確度決定了列出的有效數字最大值。 | 列出六位有效數字，後面的零全都會被裁斷。
s | 精確度決定了列出的有效數字最大值，超出精確度範圍的字元不會被列出。 | 字元會被列出直到遇到一個空白 (null) 字元為止。

相關

無。

範例

$n = 43951789;
$u = -43951789;

; 請注意雙位元值 %% ，這會列出字母 '%' 字元
printf("%%d = '%d'\n", $n); '43951789' 表示標準的整數
printf("%%e = '%e'\n", $n); '4.395179e+007' 科學表示法
printf("%%u = '%u'\n", $n); '43951789' 表示正值整數的無帶符號整數
printf("%%u <0 = '%u'\n", $u); '4251015507' 表示負值整數的無帶符號整數
printf("%%f = '%f'\n", $n); '43951789.000000' 表示浮點
printf("%%.2f = '%.2f'\n", $n); '43951789.00' 表示小數點後 2 位
printf("%%o = '%o'\n", $n); '247523255' 表示八進位
printf("%%s = '%s'\n", $n); '43951789' 表示字串
printf("%%x = '%x'\n", $n); '29ea6ad' 表示十六進位 (小寫)
printf("%%X = '%X'\n", $n); '29EA6AD' 表示十六進位 (大寫)

printf("%%+d = '%+d'\n", $n); '+43951789' 正值整數符號
printf("%%+d <0= '%+d'\n", $u); '-43951789' 負值整數符號

$s = '猴子';
$t = '很多隻猴子';

printf("%%s = [%s]\n", $s); [猴子] 標準輸出字串
printf("%%10s = [%10s]\n", $s); [ 猴子] 以空格靠右對齊
printf("%%-10s = [%-10s]\n", $s); [猴子 ] 以空格靠左對齊
printf("%%010s = [%010s]\n", $s); [0000猴子] 在字串上也補零
printf("%%10.10s = [%10.10s]\n", $t); [很多隻猴子] 靠左對齊不過以 10 個字元縮排

printf("%04d-%02d-%02d\n", 2008, 4, 1);

Func Printf($format, $var1, $var2=-1, $var3=-1)
If $var2=-1 Then
ConsoleWrite(StringFormat($format, $var1))
Else
ConsoleWrite(StringFormat($format, $var1, $var2, $var3))
EndIf
EndFunc


Function StringFromASCIIArray

函數說明（Function Reference）

StringFromASCIIArray

覆寫某個 ASCII 碼群組為一個字串。

StringFromASCIIArray( 群組, [ 開始 [, 結束 [, 編碼 ] ] ] )

參數

群組 | 要轉換為字元的 ASCII 碼群組。
開始 | [選擇性參數] 要開始處理的索引來源，索引以 0 為基準值 (預設：0)。
結束 | [選擇性參數] 要結束處理的索引，索引以 0 為基準值 (預設：UBound($array) - 1)。
編碼 | [選擇性參數] 包含指定字元集數值的返回群組： 0 - UTF-16 (預設) 1 - ANSI 2 - UTF-8

返回值

成功 - 一個以字元表示的 ASCII 碼字串。
失敗 - 返回一個空白字串並設定 @error 非零值，@error 可以是：
1 - 輸出的不是一個群組
2 - 開始索引無效

附註

返回的字串可能內含崁入的 Chr(0)，不過它仍是一個字串類型。大部份字串函數會在找到第一個 Chr(0) 處停止，不過如存取的是要取得的整個字串內容，則 StringToBinary() 函數會將它轉換為一個二進位字串將所有資料保留。

若您嘗試手動建立一個群組 (與從 StringToASCIIArray() 函數返回的群組相反)，則群組內的代碼必須指定為 UNICODE。

相關

StringToASCIIArray

範例

#include <Array.au3> ; For _ArrayDisplay()

; 將字串轉換為一個群組
Local $a = StringToASCIIArray("abc")

; 顯示要檢視的群組，該內容包含 ASCII 每個字元的數值
_ArrayDisplay($a)

; 現在要將群組轉換為一個字串
Local $s = StringFromASCIIArray($a)

; 顯示要檢視的字串，它與原始的輸入內容完全符合
MsgBox(0, "", $s)


Function StringIsInt

函數說明（Function Reference）

StringIsInt

檢查某個字串是否為整數。

StringIsInt ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串不是整數返回 0。

附註

StringIsInt 對於非字串整數運算式同樣也會返回 1；不過 StringIsInt 對於像 "4ff0" 這類的十六進位運算式會返回 0。唯一允許使用的標點符號只有字串開頭的 + 號或 - 號其中一個。

相關

StringIsFloat, StringIsDigit, IsInt

範例

StringIsInt("+42") ;返回 1
StringIsInt("-00") ;返回 1
StringIsInt("1.0") ;返回 0 因為有小數點
StringIsInt(1.0) ;返回 1 因為換算後為數字字串
StringIsInt("1+2") ;返回 0 因為有加號


Function StringIsLower

函數說明（Function Reference）

StringIsLower

檢查某個字串是否僅含有小寫字母。

StringIsLower ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串內含非小寫字元返回 0。

附註

請注意：數字/標點符號/空格 都會導致 StringIsLower 返回 0。

相關

StringIsAlNum, StringIsAlpha, StringIsASCII, StringIsDigit, StringIsSpace, StringIsUpper, StringIsXDigit, StringUpper, StringLower

範例

If StringIsLower("abcfoo") Then
MsgBox(0, "結果：", "字串內只有小寫字母。")
EndIf


Function StringIsSpace

函數說明（Function Reference）

StringIsSpace

檢查某個字串是否僅含有「空白符號」。

StringIsSpace ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如內含非空白字元返回 0。

附註

空白符號係包括 Chr(9) 到 Chr(13) 的所有字元像：水平表格符號(HorizontalTab)、換行符號(LineFeed)、垂直表格符號(VerticalTab)、換頁符號(FormFeed), 和 ENTER 換行符號(CarriageReturn)。

空白符號還包括標準空格符號 ( Chr(32) )。

相關

StringIsAlNum, StringIsAlpha, StringIsASCII, StringIsDigit, StringIsLower, StringIsUpper, StringIsXDigit, StringUpper, StringLower

範例

$x = " " & @LF & Chr(11) & @TAB & " " & @CRLF
If StringIsSpace($x) Then
MsgBox(0,"", "字串僅包含空白符號。")
EndIf


Function StringIsUpper

函數說明（Function Reference）

StringIsUpper

檢查某個字串是否僅含有大寫字母。

StringIsUpper ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串內含非大寫字元返回 0。

附註

請注意：數字/標點符號/空格 都會導致 StringIsUpper 返回 0。

相關

StringIsAlNum, StringIsAlpha, StringIsASCII, StringIsDigit, StringIsLower, StringIsSpace, StringIsXDigit, StringUpper, StringLower

範例

If StringIsUpper("ABCDF") Then
MsgBox(4096, "", "字串內只有「大寫字母」。")
EndIf


Function StringIsXDigit

函數說明（Function Reference）

StringIsXDigit

檢查某個字串是否僅含有十六進位字元 (0-9, A-F) 。

StringIsXDigit ( "字串" )

參數

字串 要檢查的字串。

返回值

成功： | 返回值 1。
失敗： | 如字串內含非十六進位字元返回 0。

附註

有效的十六進位字元為：0123456789abcdefABCDEF，請注意內含空白符號或前綴 "0x" 的字串將導致 StringIsXDigit 返回 0。

相關

StringIsAlNum, StringIsAlpha, StringIsASCII, StringIsDigit, StringIsLower, StringIsSpace, StringIsUpper, StringUpper, StringLower

範例

StringIsXDigit("00FC") ;返回 1
StringIsXDigit("2570") ;返回 1
StringIsXDigit("一杯 咖啡") ;返回 0 因為有空格
StringIsXDigit(1 + 2.0) ;返回 1 因為轉換後為數字字串


Function StringLeft

函數說明（Function Reference）

StringLeft

返回字串中從左開始指定數量的字元。

StringLeft ( "字串", 計數 )

參數

字串 | 要求取的字串。
計數 | 要取得的字元數量。

返回值

返回一個字串，該內容包括 最左邊 起算設定數量的字元。

附註

若 計數 超過字串長度，返回整個字串。
若 計數 是一個負值，返回空白字串。

相關

String, StringInStr, StringLen, StringLower, StringMid, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$result = StringLeft("我是一個字串", 3)
MsgBox(0, "最左邊起 3 個字元是：", $result)


Function StringLen

函數說明（Function Reference）

StringLen

返回指定字串的字元總數。

StringLen ( "字串" )

參數

字串 要求取的字串。

返回值

返回字串的長度。

附註

數字運算式會自動求值並轉換成一個字串。

相關

String, StringInStr, StringLeft, StringLower, StringMid, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$len = StringLen("請問我幾歲了？")
MsgBox(0, "字串長度是：", $len)


Function StringLower

函數說明（Function Reference）

StringLower

轉換字串為小寫字母。

StringLower ( "字串" )

參數

字串 要轉換的字串。

返回值

返回轉換為小寫的字串。

附註

無。

相關

StringIsLower, StringIsUpper, String, StringInStr, StringLeft, StringLen, StringMid, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$var = StringLower("PAGE_READONLY")
MsgBox(0, "轉換為小寫的字串：", $var)


Function StringMid

函數說明（Function Reference）

StringMid

取某個字串的部分字元。

StringMid ( "字串", 開始 [, 計數] )

參數

字串 | 要求取的字串。
開始 | 字串的起始位置 (1 = 第一個字元)。
計數 | [選擇性參數] 擷取的字元數量，預設為擷取剩下的所有字串。

返回值

返回擷取的字串。

附註

如提供的 開始 越界則返回一個空白字串。若 開始 有效但 "計數" 越界則返回剩餘的所有字串。

相關

String, StringInStr, StringLeft, StringLen, StringLower, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$var = StringMid("I am a string", 3, 2)
MsgBox(0, "從第 3 個位置擷取的 2 個字元：", $var)


Function StringRegExp

函數說明（Function Reference）

StringRegExp

檢查某個字串是否符合規則陳述式要求。

StringRegExp ( "測試", "範本規則(pattern)" [, 旗標 ] [, 位移 ] ] )

參數

測試 | 要檢查的字串。
範本規則(pattern) | 比對用的規則陳述式。
旗標 | [選擇性參數] 決定函數如何執行的數值，請見下表詳細說明，預設值為 0。
位移 | [選擇性參數] 開始比對的起始位置 (起始從 1 開始)，預設值為 1。

旗標 | 數值
0 | 返回1 (若符合) 或 0 (不符合)。
1 | 返回符合的群組。
2 | 返回完整符合各種類別的群組 (Perl / PHP 類型)。
3 | 返回符合的全域群組。
4 | 返回內含完整符合各種類別的全域群組為一個群組 (Perl / PHP style)。

返回值

旗標 = 0：
@Error | 含意說明：
2 | 範本規則 (pattern) 無效，巨集 @Extended = 範本規則 (pattern) 內位移錯誤。

旗標 = 1 或 2：
@Error | 含意說明：
0 | 有效群組，為下一個位移選擇巨集 @Extended。
1 | 無效群組，沒有符合項目。
2 | 範本規則毀損、群組無效，巨集 @Extended = 範本規則 (pattern) 內位移錯誤。

旗標 = 3 或 4：
@Error | 含意說明：
0 | 有效群組。
1 | 無效群組，沒有符合項目。
2 | 範本規則毀損、群組無效，巨集 @Extended = 範本規則 (pattern) 內位移錯誤。

附註

規則陳述式 (Regular Expression) 是一組完整表達欲搜尋字串規則的表示法。陳述式為純文字字串，內容係說明字串中可能有哪些文字存在，而且某些字元會被賦予特殊的意義表示目標字串中的變數。AutoIt 的規則陳述式通常是區分大小寫的。

規則陳述式是由下列清單所示一個或多個簡單的陳述式規則符號所組成，如該字元不在下列清單中，則僅以自身的項目為符合對象。

循環字元 (*, +, ?, {...} ) 會盡可能嘗試最大符合集區字串，而該內容允許與下列的字串相同，除非後面緊跟一個問號；否則它將以最小範本規則搜尋跟下表字元符合的部份。

巢狀式群組(複雜比對)是允許使用的，不過請記住所有的群組中有幾項是例外：不擷取群組(Non-capturing group)、指向返回群組、以及在內部群組後指派的外部群組。

完整的說明請見：這裡 (官方網站)。

請注意：無效的規則陳述式，可能會形成一個接近無限大的無窮迴圈，導致 CPU 滿載甚至系統崩潰當機。

符合字元

[ ... ] | 比對集區內的字串，如：[aeiou] 為比對所有符合的小寫字母。連續集區可以用一個破折號 "-" 在開始及結束字元間定義一個範圍，如：[a-z] 比對所有符合的小寫字元。要包括一個破折號 (-) 在集區內，請將它做為範圍內的開頭或最後一個字元使用。集區中括弧的表示方式，係將它做為範圍中的第一個字元，如：[][] 將符合 "[" 或 "]" 其中一個。請注意特殊符號 不會 記住它在集區內代表的特殊意義，其中的例外有：\\, \^, \-,\[ 和 \] 將符合集區內的換碼字元(脫逸字元)。
[^ ... ] | 將不符合字串 排除 在外，如：[^0-9] 符合所有非數字字串。 要包括一個曲折號 (^) 在集區內，請將它置於集區開頭後面或換碼排除 (\^)。
[:類別:] | 比對提供字串類別中符合的字元。有效類別為：alpha (所有字母 - alphabetic)、alnum (所有字母和數字 - alphanumeric)、lower (所有小寫字母)、upper (所有大寫字母)、digit (所有數字 0-9)、xdigit (所有十六進位數字 0-9, A-F, a-f)、space (所有空白字元)、blank (只有空格或 Tab)、print (所有可列出字元)、graph (除了空格外的可列出字元)、cntrl (任何控制字元 [ascii 127 或 <32])、或 punct (所有標點符號)。所以 [0-9] 跟 [[:digit:]] 是相同的。( [0-9] = [[:digit:]])
[^:類別:] | 將不符合類別 排除 在外，不過僅限於為第一個字元時。
( ... ) | 代表群組。群組的各個類別都是依照前後排序且可同時重覆使用，如： (ab)+ 將符合 "ab" 或 "abab"，不過不包括 "aba"。一個群組也可以儲存符合的文字將它使用在後方參照上，並且由此函數依照旗標值返回群組。
(?i) | 不區分大小寫旗標。這個不能當做群組使用，它會告訴規則陳述式引擎，自該點不區分大小寫比對符合字串。
(?-i) | 區分大小寫旗標 (預設)。這個不能當做群組使用，它會告訴規則陳述式引擎，自該點區分大小寫比對符合字串。
(?i ... ) | 不區分大小寫群組 (Case-insensitive group)。行為特性跟一般群組類似，不過會不區分大小寫比對群組內的字串。
(?-i ... ) | 區分大小寫群組 (Case-sensitive group)。行為特性跟一般群組類似，不過會區分大小寫比對群組內的字串。主要用在 (-i) 旗標後方或不區分大小寫群組中。
(?: ... ) | 不擷取群組(Non-capturing group)。行為特性跟一般群組類似，不過它不會記錄群組內的符合字串、也不會讓符合文字被用在後方參照 (back-referencing) 內。
(?i: ... ) | 不擷取也不區分大小寫群組(Case-insensitive non-capturing group)。行為特性跟一般群組類似，不過會不區分大小寫比對群組內的字串。
(?-i: ... ) | 不擷取區分大小寫群組(Case-sensitive non-capturing group)。行為特性跟一般群組類似，不過會區分大小寫比對群組內的字串。
(?m) | ^ 和 $ 符合資料範圍內的新行。
(?s) | . 符合所有地方包括新行 (預設值 "." 不會符合新行)。
(?x) | 忽略空格和 # 註解。
(?U) | 反轉無窮量詞 (greediness of quantifiers)。
. | 符合所有單一字元 (除了新行)。
| | 或是 "." ；陳述式可符合單一字元 或 其它項目。
\ | 排除(Escape) 一個特殊字元 (使之符合當前字元) 或引用一個特殊字元類型 (請見下方)。
\\ | 符合當前的反斜線符號 (\)。
\a | 嗶聲警告，也就是 BEL 字元 (chr(7))。
\A | 僅符合字串開頭。
\b | 符合文字邊界。
\B | 以非文字邊界符合字串。
\c | 符合控制字元，以下一個字元為基準。例如：\cM 符合 ctrl-M。
\d | 符合所有數字 (0-9)。
\D | 符合非數字的所有字元。
\e | 符合一個 ESC 字元 (escape character) (chr(27))。
\E | 結束 case 修正。
\f | 符合一個換頁字元 (formfeed) (chr(12))。
\h | 符合所有水平空白字元。
\H | 符合非水平空白外的所有字元。
\n | 符合換行 linefeed 符號 (@LF, chr(10))。
\Q | 引用 (Quote 關閉) Pattern 規則跟字元間的字串直到 \E 結束。
\r | 符合一個 ENTER 換行符號 (carriage return) (@CR, chr(13))。
\s | 符合所有空白字元：Chr(9) 到 Chr(13) 包括：Tab, Line Feed, Vertical Tab, Form Feed, 及 Carriage Return, 和標準空格字元 ( Chr(32) )。
\S | 符合非空白字串的所有字元。
\t | 符合一個水平表格符號 (chr(9))。
\v | 符合所有垂直空白字元。
\V | 符合非垂直空白字串的所有字元。.
\w | 符合所有 "文字" 字元： a-z, A-Z, 0-9 或底線 (_)。
\W | 符合所有非文字字元。
\### | 符合所有提供的 ASCII 碼字元或後方參照。最高可達 3 個八進位數字。 如發現符合的後方參照 (back-referencing)，則完全符合提供的首個群組，例如：([:alpha:])\1 將符合兩位元字母。
\x## | 符合以十六進位提供的 ascii 碼字元，最高可達 2 個數字。
\z | 僅符合字串結尾。
\Z | 僅符合字串結尾、或結尾的新行之前。

循環字元

{x} | 循環前一個字元、集合、或群組的 x 剛好次數。
{x,} | 循環前一個字元、集合、或群組的 x 最少次數。
{0,x} | 循環前一個字元、集合、或群組的 x 最多次數。
{x, y} | 循環前一個字元、集合、或群組介於 x 和 y 間的次數，內含模式 (inclusive)。
* | 循環前一個字元、集合、或群組介於 0 或以上的次數，與 {0,} 相同。
+ | 循環前一個字元、集合、或群組介於 1 或以上的次數，與 {1,} 相同。
? | 循環前一個字元、集合、或群組介於 0 間可能的次數，與 {0, 1} 相同。
? (在循環字元之後) | 搜尋最小符合的字串而不是最大符合。

字元類別

[:alnum:] | 字母和數字。
[:alpha:] | 字母。
[:ascii:] | 字元碼 0 - 127。
[:blank:] | 只有空格或 Tab。
[:cntrl:] | 控制字元。
[:digit:] | 十進位數字 (與 \d 相同)。
[:graph:] | 列出的字元，除空格以外。
[:lower:] | 小寫字母。
[:print:] | 列出的字元，包括空格。
[:punct:] | 列出的字元，除字母和數字以外。
[:space:] | 空格 (不等同於 \s，它包括垂直表格符號 VT: chr(11) )。
[:upper:] | 大寫字母。
[:word:] | "文字" 字元 (與 \w 相同)。
[:xdigit:] | 十六進位數字。

相關

StringInStr, StringRegExpReplace

範例

;選項 1, 使用位移
$nOffset = 1
While 1
$array = StringRegExp('<測試>a</測試> <測試>b</測試> <測試>c</測試>', '<(?i)測試>(.*?)</(?i)測試>', 1, $nOffset)

If @error = 0 Then
$nOffset = @extended
Else
ExitLoop
EndIf
for $i = 0 to UBound($array) - 1
msgbox(0, "RegExp 以選項 1 測試結果 - " & $i, $array[$i])
Next
WEnd

;選項 2, 單獨返回, php/preg_match() 類型
$array = StringRegExp('<測試>a</測試> <測試>b</測試> <測試>c</測試>', '<(?i)測試>(.*?)</(?i)測試>', 2)
for $i = 0 to UBound($array) - 1
msgbox(0, "RegExp 以選項 2 測試結果 - " & $i, $array[$i])
Next

;選項 3, 全域返回, 舊的 AutoIt 類型
$array = StringRegExp('<測試>a</測試> <測試>b</測試> <測試>c</測試>', '<(?i)測試>(.*?)</(?i)測試>', 3)

for $i = 0 to UBound($array) - 1
msgbox(0, "RegExp 以選項 3 測試結果 - " & $i, $array[$i])
Next

;選項 4, 全域返回, php/preg_match_all() 類型
$array = StringRegExp('F1oF2oF3o', '(F.o)*?', 4)

for $i = 0 to UBound($array) - 1

$match = $array[$i]
for $j = 0 to UBound($match) - 1
msgbox(0, "cRegExp 以選項 4 測試結果 - " & $i & ',' & $j, $match[$j])
Next
Next


Function StringRegExpReplace

函數說明（Function Reference）

StringRegExpReplace

在邏輯運算式中以某個字串取代文字。

StringRegExpReplace ( "測試", "範本規則(pattern)", "取代", [ 計數 ] )

參數

測試 | 要檢查的字串。
範本規則(pattern) | 比對用的規則陳述式，請檢視：StringRegExp 對 pattern 的字元定義說明。
取代 | 跟規則陳述式符合字串替換的文字，要插入比對的群組文字，可將 \0 - \9 (或 $0 - $9) 做為後方參照 (back-references) 使用。
計數 | [選擇性參數] 執行字串取代替換的次數，預設值為 0，使用 0 取代全域字串。

返回值

@Error | 含意說明：
0 | 執行正確無誤，為執行替換數量檢查巨集 @Extended。
2 | 範本規則(pattern) 無效，@Extended = 範本規則 (pattern) 內位移錯誤。

附註

要跟當前 (已取代) 數量和後方參照 (back-references) 做區隔，請以大括弧括住，如："${1}5"。

相關

StringReplace, StringRegExp

範例

MsgBox(0, "規則陳述式替換測試：", StringRegExpReplace("某處的花兒已經凋零，很久前的事對不對？", "[某的對]", "@"))


Function StringReplace

函數說明（Function Reference）

StringReplace

置換字串中的指定子字串。

StringReplace ( "字串", "搜尋字串" 或起始位置, "取代字串" [, 計數 [, 區分大小寫]] )

參數

字串 | 要求取的字串。
搜尋字串 | 要搜尋的子字串或開始替換取代的字元位置。
取代字串 | 取代的字串。
計數 | [選擇性參數] 替換搜尋字串的次數： 0 = 所有搜尋到的字串將被取代 (預設)
區分大小寫 | [選擇性參數] 該旗標為設定是否要區分大小寫： 0 = 不區分大小寫，使用電腦的當前模式 (預設) 1 = 區分大小寫 2 = 不區分大小寫，使用基本/較快的比對模式

返回值

返回新的字串，並將執行取代的數量儲存於巨集 @extended。

附註

搜尋/取代將從左至右執行，因此 StringReplace("aaa", "aa", "bb") 將返回 "bba"。

如使用起始的方式，則 "計數" 和 "區分大小寫" 參數將被忽略。如取代時無法進行儲存，則返回一個空白字串並設定 @error 為 1。

相關

String, StringLeft, StringLen, StringLower, StringMid, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$text = StringReplace("這 是 一 行 文 字 。", " ", "-")
$numreplacements = @extended
MsgBox(0, "新字串是：", $text)
MsgBox(0, "完成取代動作的數量是：---", $numreplacements)


Function StringRight

函數說明（Function Reference）

StringRight

返回字串中從右開始指定數量的字元。

StringRight ( "字串", 計數 )

參數

字串 | 要求取的字串。
計數 | 設定字元數量。

返回值

返回一個字串，該內容包括 最右方 起算設定數量的字元。

附註

若 計數 超過字串長度，返回整個字串。
若 計數 是一個負值，返回空白字串。

相關

String, StringInStr, StringLeft, StringLen, StringLower, StringMid, StringTrimLeft, StringTrimRight, StringUpper

範例

$var = StringRight("我是一個字串。", 3)
MsgBox(0, "從右邊起 3 個字元是： ---", $var)


Function StringSplit

函數說明（Function Reference）

StringSplit

以指定分隔符號把字串分割成若干子字串。

StringSplit ( "字串", "分隔符號" [, 旗標 ] )

參數

字串 | 要求取的字串。
分隔符號 | 一個或數個用來分隔的符號 (區分大小寫)。
旗標 | [選擇性參數] 變更字串分割的方式，可依照需要將數個組合使用： 旗標 = 0, 以分隔符號的每個字元標記分隔字串的位置 (預設) 旗標 = 1, 以整個分隔符號字串來標記分隔 旗標 = 2, 關閉第一組類別的計算返回次數 - 可以有效建立群組(array)，以 0 為基準 (此情況必須使用 UBound() 取得大小)。

返回值

返回一個群組，預設第一個類別 ($array[0]) 包括返回的字串數量，其餘的類別如 ($array[1], $array[2], 等) 包括了以分隔符號分隔的字串。如旗標 = 2 則計算不會返回第一個類別。
如沒有找到分隔符號則設定 @error 為 1，計算為 1 ($array[0]) 並返回整個字串 ($array[1])。

附註

如您使用空白字串 "" 做為分隔符號，則每個字元將以類別返回。

如您希望分隔符號是一個子字串而不是單一字元，請見下面範例。

StringSplit 用來替換 StringInStr 函數是非常有用的，一樣表示建立一個群組。

請注意您在使用 @CRLF 巨集的時候，因為會參照到 2 參數，所以會使它額外產生數個空白行。

相關

String, StringInStr, StringLeft, StringLen, StringLower, StringMid, StringReplace, StringRight, StringTrimLeft, StringTrimRight, StringUpper

範例

$days = StringSplit("星期日,星期一,星期二,星期三,星期四,星期五,星期六", ",")
;$days[1] 的值是 "星期日" ... $days[7] 的值是 "星期六"

$text = "This\nline\ncontains\nC-style breaks."
$array = StringSplit($text, '\n', 1)


Function StringStripCR

函數說明（Function Reference）

StringStripCR

移除字串中的所有ENTER ( Chr(13) ) 。

StringStripCR ( "字串" )

參數

字串 要轉換的字串。

返回值

返回移除所有 @CR 字元 (Chr(13)) 物件 (instances) 的字串。

附註

無。

相關

StringAddCR, StringStripWS, StringIsSpace

範例

$result = StringStripCR("我是一個字串。" & Chr(13) & Chr(10))
MsgBox(0, "截去所有 CR 字元符號後的字串：", $result)


Function StringStripWS

函數說明（Function Reference）

StringStripWS

除去字串中的所有「空白符號」。

StringStripWS ( "字串", 旗標 )

參數

字串 | 要截去的字串。
旗標 | 此旗標係表示字串的截去類型 (可依照需要將數個組合使用)： 1 = 截去開頭的空格 2 = 截去結尾的空格 4 = 截去文字間兩個 (或以上) 的空格 8 = 截去所有空格 (覆寫其它旗標)

返回值

返回要求截去空格的新字串。

附註

空白符號係包括 Chr(9) 到 Chr(13) 的所有字元像：水平表格符號(HorizontalTab)、換行符號(LineFeed)、垂直表格符號(VerticalTab)、換頁符號(FormFeed), 和 ENTER 換行符號(CarriageReturn)。
空白符號還包括 null 為空字串 ( Chr(0) ) 和標準空格符號 ( Chr(32) )。

要一個個截去文字間的空格，請使用 StringReplace 函數。

相關

StringStripCR, StringIsSpace, StringReplace

範例

$text = StringStripWS(" 這 是 一 行 文 字 ", 3)
MsgBox(0, "截去首尾兩端空格的結果為： ---", $text)


Function StringToASCIIArray

函數說明（Function Reference）

StringToASCIIArray

覆寫某個字串為每個字元都內含 ASCII 碼的群組。

StringToASCIIArray( "字串", [ 開始 [, 結束 [, 編碼 ] ] ] )

參數

"字串" | 要轉換 ASCII 碼群組的字串。
開始 | [選擇性參數] 要開始處理的來源位置，以 0 為基準值 (預設：0)。
結束 | [選擇性參數] 要結束處理的位置，以 0 為基準值 (預設：StringLen("字串"))。
編碼 | [選擇性參數] 包含指定字元集數值的返回群組： 0 - UTF-16 (預設) 1 - ANSI 2 - UTF-8

返回值

成功 - 返回一個群組，內含的每個類別在符合位置皆是以 UNICODE 編碼的字元。
失敗 - 返回一個空白字串。

附註

返回的字串可能內含崁入的 Chr(0)，這些將會出現在已返回的群組和所有已完成的資料。此函數只會在到達字串結尾或使用者終止時停止。

相關

StringFromASCIIArray

範例

#include <Array.au3> ; 給 _ArrayDisplay() 群組

Local $a = StringToASCIIArray("abc")
_ArrayDisplay($a)


Function StringTrimLeft

函數說明（Function Reference）

StringTrimLeft

移除字串中從左開始指定數量的字元。

StringTrimLeft ( "字串", 計數 )

參數

字串 | 要求取的字串。
計數 | 要截去的字元數量。

返回值

經 計數 參數從左方截去字元後返回字串。

附註

如 計數 越界，返回一個空白字串。
StringTrimLeft($str, $n) 的作用與 StringRight($str, StringLen($str) - $n) 函數相同。

相關

String, StringInStr, StringLeft, StringLen, StringLower, StringMid, StringRight, StringTrimRight, StringUpper

範例

$result = StringTrimLeft("我是一個字串。", 3)
MsgBox(0, "從左邊截去 3 個字元後的結果：", $result)


Function StringTrimRight

函數說明（Function Reference）

StringTrimRight

移除字串中從右開始指定數量的字元。

StringTrimRight ( "字串", 計數 )

參數

字串 | 要求取的字串。
計數 | 要截去的字元數量。

返回值

經 計數 參數從右方截去字元後返回字串。

附註

如 計數 越界，返回一個空白字串。
StringTrimRight($str, $n) 的作用與 StringLeft($str, StringLen($str) - $n) 函數相同。

相關

String, StringInStr, StringLeft, StringLen, StringLower, StringMid, StringRight, StringTrimLeft, StringUpper

範例

$result = StringTrimRight("我是一個字串。", 3)
MsgBox(0, "從右邊截去 3 個字元後的結果：", $result)


Function StringUpper

函數說明（Function Reference）

StringUpper

轉換字串為大寫字母。

StringUpper ( "字串" )

參數

字串 要轉換的字串。

返回值

返回轉換為大寫的字串。

附註

無。

相關

StringIsLower, StringIsUpper, String, StringInStr, StringLeft, StringLen, StringLower, StringMid, StringRight, StringTrimLeft, StringTrimRight

範例

$result = StringUpper("I am 4-word string")
MsgBox(0, "轉換為大寫後的字串：", $result)


Function Sleep

函數說明（Function Reference）

Sleep

使腳本暫停指定時間段。

Sleep ( 延遲 )

參數

延遲 暫停執行的時間長度 (以毫秒為單位)。

返回值

無。

附註

休眠的最長時間為 2147483647 毫秒 (24 天)。

相關

無。

範例

Sleep(5000) ;五秒


Function TimerInit

函數說明（Function Reference）

TimerInit

返回當前時間戳記 (以毫秒為單位) 。

TimerInit ( )

參數

無。

返回值

返回一個時間戳記值 (以毫秒為單位)。

附註

無。

相關

TimerDiff

範例

$begin = TimerInit()
sleep(3000)
$dif = TimerDiff($begin)
MsgBox(0,"時間戳記差異",$dif)


Function TimerDiff

函數說明（Function Reference）

TimerDiff

從前一個呼叫至 TimerInit() 即時返回差異。

TimerDiff ( 時間戳記 )

參數

時間戳記 從前一個呼叫 TimerInit() 函數取得時間戳記。

返回值

從前一個呼叫 TimerInit() 函數取得並返回時間差異 (以毫秒為單位)。

附註

無。

相關

TimerInit

範例

$begin = TimerInit()
sleep(3000)
$dif = TimerDiff($begin)
MsgBox(0,"時間差異",$dif)


Function TrayCreateItem

函數說明（Function Reference）

TrayCreateItem

建立在常駐區的選單項目 (menuitem) 控制項。

TrayCreateItem ( 文字 [, 選單ID [, 選單物件(menuentry) [, 單選項目選單(menuradioitem)]]] )

參數

文字 | 控制項的文字。
選單ID | 讓您可以在相關選單上建立一個子選單，如等於 -1 它將被新增在最近建立的項目 '後面' (預設設定)。
選單物件(menuentry) | [選擇性參數] 讓您定義要建立的物件 (entry) 數量。物件的編號從 0 開始，如值等於 -1 它將被新增在最近建立的物件 '後面' (預設設定)。
單選項目選單(menuradioitem) | [選擇性參數] 0 (預設) = 建立一個普通選單, 1 = 建立一個單選項目選單(menuradioitem)。

返回值

成功： | 返回新彈出選單的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

如 '文字' 參數是一個空白字串 "" 則建立一個分隔線。

預設值上，普通的右鍵選單 (不是單選項目選單) 會自動在您選擇時自動取消選取！
要關閉這樣的動作請使用 TrayMenuMode 函數的參數 '2'。

選單項目會自動被群組化分類，而且這些群組會被分隔線或非單選物件的普通物件分隔。
預設值上，點選單選項目物件會自動將它選取，而在同一群組內的其它單選項目會被取消選取！
要關閉這樣的動作請使用 TrayMenuMode 函數的參數 '8'。

相關

TrayItemSetState, TrayItemSetText

範例

; ****************
; * 第一個範例 *
; ****************

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$prefsitem = TrayCreateItem("我的偏好設定")
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $prefsitem
Msgbox(64, "偏好設定：", "系統：" & @OSVersion)
Case $msg = $aboutitem
Msgbox(64, "關於：", "AutoIt3-右鍵選單範本")
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit

; *****************
; * 第二個範例 *
; *****************

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

; 我們來建立 2 個單選項目群組
$radio1 = TrayCreateItem("單選 1", -1, -1, 1)
TrayItemSetState(-1, $TRAY_CHECKED)
$radio2 = TrayCreateItem("單選 2", -1, -1, 1)
$radio3 = TrayCreateItem("單選 3", -1, -1, 1)

TrayCreateItem("") ; 單選項目群組會被分隔線或其它一般選單物件隔開

$radio4 = TrayCreateItem("單選 4", -1, -1, 1)
$radio5 = TrayCreateItem("單選 5", -1, -1, 1)
TrayItemSetState(-1, $TRAY_CHECKED)
$radio6 = TrayCreateItem("單選 6", -1, -1, 1)

TrayCreateItem("")

$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $aboutitem
Msgbox(64, "關於：", "AutoIt3-帶單選項目群組選單範例")
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TrayCreateMenu

函數說明（Function Reference）

TrayCreateMenu

建立在常駐區的選單 (menu) 控制項。

TrayCreateMenu ( "子選單/選單文字" [, 選單ID [, 選單物件(menuentry)]] )

參數

子選單/選單文字 | 子選單/選單的文字
選單ID | [選擇性參數] 若設定則讓您可以在相關選單內建立一個子選單，如值等於 -1 則使用第一層選單。
選單物件(menuentry) | [選擇性參數] 讓您定義要建立的物件 (entry) 數量。物件的編號從 0 開始。

返回值

成功： | 返回新彈出選單的識別碼 (控制項ID)。
失敗： | 返回值 0。

附註

無。

相關

TrayItemSetState, TrayItemSetText

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$settingsitem = TrayCreateMenu("設定")
$displayitem = TrayCreateItem("顯示", $settingsitem)
$printeritem = TrayCreateItem("印表機", $settingsitem)
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $aboutitem
Msgbox(64,"關於：","AutoIt3-右鍵選單範本")
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TrayItemDelete

函數說明（Function Reference）

TrayItemDelete

從右鍵選單移除選單/項目控制項。

TrayItemDelete ( 控制項ID )

參數

控制項ID 以 TrayCreateItem 或 TrayCreateMenu 函數返回的控制項識別碼 (控制項ID)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

TrayCreateItem, TrayCreateMenu

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$delitem = TrayCreateItem("刪除")
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $aboutitem
Msgbox(64,"關於：","AutoIt3-右鍵選單範本")
Case $msg = $delitem
TrayItemDelete($delitem)
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TrayItemGetHandle

函數說明（Function Reference）

TrayItemGetHandle

返回右鍵選單的控制瑪。

TrayItemGetHandle ( 控制項ID )

參數

控制項ID 以 TrayCreateItem 或 TrayCreateMenu 函數返回的控制項識別碼 (控制項ID)。

返回值

成功： | 返回欲取得控制項 ID 的控制碼。
失敗： | 返回值 0。

附註

要取得右鍵選單內容本身的控制碼，請將 '0' 做控制項ID 使用。

相關

TrayItemGetState, TrayItemGetText

範例

#include <Constants.au3>

Opt("TrayMenuMode", 1) ;預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

Global Const $MIM_APPLYTOSUBMENUS = 0x80000000
Global Const $MIM_BACKGROUND = 0x00000002

TraySetIcon("shell32.dll", 21)
TraySetToolTip("這個只是一個簡單示範彩色選單的小小範本。" & @LF & "在 Windows 2000 及更高版本上可能更加容易！")

$OptionsMenu = TrayCreateMenu("選項")
$OnTopItem = TrayCreateItem("始終置頂", $OptionsMenu)
TrayItemSetState(-1, $TRAY_CHECKED)
$RepeatItem = TrayCreateItem("始終重覆", $OptionsMenu)
TrayCreateItem("")
$AboutItem = TrayCreateItem("關於")
TrayCreateItem("")
$ExitItem = TrayCreateItem("結束範本")

SetMenuColor(0, 0xEEBB99) ; BGR 色域值, '0' 表示右鍵選單本身的控制碼
SetMenuColor($OptionsMenu, 0x66BB99); BGR 色域值

While 1
$Msg = TrayGetMsg()

Switch $Msg
Case $ExitItem
ExitLoop

Case $AboutItem
Msgbox(64, "關於...", "這是彩色選單範例")
EndSwitch
WEnd

Exit

; 將色彩套用在選單上
Func SetMenuColor($nMenuID, $nColor)
$hMenu = TrayItemGetHandle($nMenuID) ; 取得內部選單控制碼

$hBrush = DllCall("gdi32.dll", "hwnd", "CreateSolidBrush", "int", $nColor)
$hBrush = $hBrush[0]

Local $stMenuInfo = DllStructCreate("dword;dword;dword;uint;dword;dword;ptr")
DllStructSetData($stMenuInfo, 1, DllStructGetSize($stMenuInfo))
DllStructSetData($stMenuInfo, 2, BitOr($MIM_APPLYTOSUBMENUS, $MIM_BACKGROUND))
DllStructSetData($stMenuInfo, 5, $hBrush)

DllCall("user32.dll", "int", "SetMenuInfo", "hwnd", $hMenu, "ptr", DllStructGetPtr($stMenuInfo))
EndFunc


Function TrayItemGetState

函數說明（Function Reference）

TrayItemGetState

取得指定控制項的當前狀態。

TrayItemGetState ( [控制項ID] )

參數

控制項ID [選擇性參數] 以 TrayCreateItem 或 TrayCreateMenu 函數返回的控制項識別碼 (控制項ID)。

返回值

返回狀態，請檢視：TrayItemSetState 相關數值。

附註

無。

相關

TrayItemSetState

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$getitem = TrayCreateItem("取得狀態")
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $getitem
Msgbox(64,"狀態",TrayItemGetState($aboutitem))
Case $msg = $aboutitem
Msgbox(64,"關於：","AutoIt3-右鍵選單範本")
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TrayItemGetText

函數說明（Function Reference）

TrayItemGetText

取得某個選單/項目控制項的 itemtext 文字。

TrayItemGetText ( 控制項ID )

參數

控制項ID 參數 TrayCreateItem 或 TrayCreateMenu 函數返回的控制項識別碼 (控制項ID)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

TrayItemSetText

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$getitem = TrayCreateItem("取得文字")
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $getitem
Msgbox(64,"狀態",TrayItemGetText($aboutitem))
Case $msg = $aboutitem
Msgbox(64,"關於：","AutoIt3-右鍵選單範本")
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TrayItemSetOnEvent

函數說明（Function Reference）

TrayItemSetOnEvent

定義一個當右鍵選單項目被選擇時，呼叫的使用定義函數。

TrayItemSetOnEvent ( 項目ID, "函數" )

參數

項目ID | 以 TrayCreateItem 函數返回的項目識別碼 (項目ID)。
函數 | 要呼叫的使用者函數名稱。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

OnEvent 函數只在選項 TrayOnEventMode 設定為 1 時才能被呼叫 - 此模式下 TrayGetMsg 函數是「完全無法使用」的。

在使用者函數的呼叫範圍內，項目識別碼可以利用 @TRAY_ID 取得。

如函數為一個空白字串 "" 則關閉前一個使用者定義的參數。

相關

TrayCreateItem, TrayGetMsg, TrayOnEventMode (Option), TraySetOnEvent

範例

#include <Constants.au3>
#NoTrayIcon

Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

TraySetClick(16) ; 只有第二個滑鼠按鈕才會在右鍵選單上出現

$infoitem = TrayCreateItem("資訊")
TrayItemSetOnEvent(-1,"ShowInfo")

TrayCreateItem("")

$exititem = TrayCreateItem("結束")
TrayItemSetOnEvent(-1,"ExitScript")

TraySetState()

While 1
Sleep(10) ; 閒置迴圈
WEnd

Exit

; Func 設定
Func ShowInfo()
Msgbox(0,"訊息","右鍵選單的 OnEvent 展示範例")
EndFunc

Func ExitScript()
Exit
EndFunc


Function TrayItemSetState

函數說明（Function Reference）

TrayItemSetState

設定選單/項目控制項的狀態。

TrayItemSetState ( 控制項ID, 狀態 )

參數

控制項ID | 以 TrayCreateItem 或 TrayCreateMenu 函數返回的控制項識別碼 (控制項ID)。
狀態 | 請見下面的：狀態表(State table)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

狀態表(State table)
狀態 | 數值 | 註解說明
不變更 | 0
$TRAY_CHECKED | 1 | 選單將被選取。
$TRAY_UNCHECKED | 4 | 選單將不被選取。
$TRAY_ENABLE | 64 | 選單將被開啟。
$TRAY_DISABLE | 128 | 選單為灰色禁用狀態。
$TRAY_FOCUS | 256 | 選單將被選擇。註：跟將游標移至上面效果類似
$TRAY_DEFAULT | 512 | 選單將被設定為預設選單。

狀態值可以層層累加使用，如範例：$TRAY_CHECKED + $TRAY_DEFAULT 將選單狀態設定為已選取並為預設值。

要重設/刪除選單的 $TRAY_DEFAULT- 狀態，只要在該項目上使用此函數搭配其它狀態即可，例如：$TRAY_ENABLE。

相關

TrayItemGetState

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$chkitem = TrayCreateItem("選取此項")
TrayCreateItem("")
$checkeditem = TrayCreateItem("已被選取")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $chkitem
TrayItemSetState($checkeditem,$TRAY_CHECKED)
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TrayItemSetText

函數說明（Function Reference）

TrayItemSetText

設定選單/項目控制項的 itemtext 文字。

TrayItemSetText ( 控制項ID, 文字 )

參數

控制項ID | 以 TrayCreateItem 或 TrayCreateMenu 函數返回的控制項識別碼 (控制項ID)。
文字 | 選單/項目控制項的新文字。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

要修改預設的常駐圖示選單項目 (腳本的暫停/結束)，請將常數 $TRAY_ITEM_EXIT 和 $TRAY_ITEM_PAUSE 做為 控制項ID 使用。

相關

TrayItemGetText

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayAutoPause",0) ; 點選常駐圖示時腳本將不會出現預設暫停選項

$valitem = TrayCreateItem("數值")
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")

TraySetState()

TrayItemSetText($TRAY_ITEM_EXIT,"結束程式")
TrayItemSetText($TRAY_ITEM_PAUSE,"暫停程式")

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $valitem
TrayItemSetText($valitem,"數值" & Int(Random(1,10,1)))
Case $msg = $aboutitem
Msgbox(64,"關於：","AutoIt3-右鍵選單範本")
EndSelect
WEnd

Exit


Function TrayGetMsg

函數說明（Function Reference）

TrayGetMsg

若發生事件彈出提示供檢視。

TrayGetMsg ( )

參數

無。

返回值

返回一個事件。
返回的 "事件" 是控制項傳送訊息的控制項 ID、或是特別的事件 (像滑鼠在常駐圖示的點選動作)，若無訊息出現，表示事件為 0：

事件 ID
0 | 無事件。
控制項 ID | 傳送訊息的控制項 ID。
$TRAY_EVENT_PRIMARYDOWN | 按下主要滑鼠按鈕。
$TRAY_EVENT_PRIMARYUP | 放開主要滑鼠按鈕。
$TRAY_EVENT_SECONDARYDOWN | 按下第二個滑鼠按鈕。
$TRAY_EVENT_SECONDARYUP | 放開第二個滑鼠按鈕。
$TRAY_EVENT_PRIMARYDOUBLE | 點選兩下主要滑鼠按鈕。
$TRAY_EVENT_SECONDARYDOUBLE | 點選兩下第二個滑鼠按鈕。

附註

此函數在執行時會依需要自動閒置 CPU，因此您可以放心在複雜的迴圈中使用它，而不會導致整台電腦當機。

相關

TrayCreateItem, TrayCreateMenu

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$settingsitem = TrayCreateMenu("設定")
$displayitem = TrayCreateItem("顯示", $settingsitem)
$printeritem = TrayCreateItem("印表機", $settingsitem)
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $aboutitem
Msgbox(64,"關於：","AutoIt3-右鍵選單範本")
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TraySetClick

函數說明（Function Reference）

TraySetClick

設定右鍵圖示的選擇模式以何種模式彈出右鍵選單。

TraySetClick ( 旗標 )

參數

旗標 0 = 右鍵選單始終不會因滑鼠點選彈出顯示。
1 = 按下主要滑鼠按鈕。
2 = 放開主要滑鼠按鈕。
4 = 點選兩下主要滑鼠按鈕。
8 = 按下第二個滑鼠按鈕。
16 = 放開第二個滑鼠按鈕。
32 = 點選兩下第二個滑鼠按鈕。
64 = 放開或按下任一滑鼠按鈕。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

這些旗標是「不會」彈出事件數值的！
預設值為 "9" - 按下主要按鈕或第二個滑鼠按鈕時均彈出右鍵選單。

相關

無。

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$settingsitem = TrayCreateMenu("設定")
$displayitem = TrayCreateItem("顯示", $settingsitem)
$printeritem = TrayCreateItem("印表機", $settingsitem)
TrayCreateItem("")
$aboutitem = TrayCreateItem("關於")
TrayCreateItem("")
$exititem = TrayCreateItem("結束")

TraySetState()
TraySetClick(16)

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
ContinueLoop
Case $msg = $aboutitem
Msgbox(64,"關於：","AutoIt3-右鍵選單範本")
Case $msg = $exititem
ExitLoop
EndSelect
WEnd

Exit


Function TraySetIcon

函數說明（Function Reference）

TraySetIcon

入/設定一個指定的常駐圖示。

TraySetIcon ( [圖示檔 [, 圖示ID] )

參數

檔案名稱 | [選擇性參數] 在常駐區上顯示的圖示檔名稱。
圖示ID | [選擇性參數] 如該檔內含多組圖示則為圖示識別碼。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

要重設圖示為預設值，請不帶任何參數使用此函數，例如：
TraySetIcon()

依 + 編號順序排列可參照到與圖示名稱相同的字串。
依 - 編號順序排列就會出現以 1 為基準值的 "索引" 動作，某些 DLL 檔含有可擷取的圖示，這類就正好就是負值編號。

檔案名稱參數可以設為："blank"(無), "info"(訊息), "question"(問題), "stop"(停止) 或 "warning"(警告) 選擇相對應的標準圖示。

相關

TraySetPauseIcon

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$exititem = TrayCreateItem("結束")

TraySetState()

$start = 0
While 1
$msg = TrayGetMsg()
If $msg = $exititem Then ExitLoop
$diff = TimerDiff($start)
If $diff > 1000 Then
$num = -Random(0,100,1) ; 負值代表照編號順序輪流使用圖示
ToolTip("#icon=" & $num)
TraySetIcon("Shell32.dll",$num)
$start = TimerInit()
EndIF
WEnd

Exit


Function TraySetOnEvent

函數說明（Function Reference）

TraySetOnEvent

定義一個當特殊常駐提示動作發生時，呼叫的使用定義函數。

TraySetOnEvent ( 特別ID, "函數" )

參數

特別ID | 請見下面的：特別 ID 表(Special ID table)。
函數 | 要呼叫的使用者函數名稱。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

OnEvent 函數只在選項 TrayOnEventMode 設定為 1 時才能被呼叫 - 此模式下 TrayGetMsg 函數是「完全無法使用」的。

特別 ID 表(Special ID table)
特別 ID | 數值 | 註解說明
$TRAY_EVENT_SHOWICON | -3 | 常駐圖示將被顯示。
$TRAY_EVENT_HIDEICON | -4 | 常駐圖示將被隱藏。
$TRAY_EVENT_FLASHICON | -5 | 使用者將常駐圖示改為閃爍狀態。
$TRAY_EVENT_NOFLASHICON | -6 | 使用者將常駐圖示的閃爍狀態關閉。
$TRAY_EVENT_PRIMARYDOWN | -7 | 在常駐圖示上按下主要滑鼠按鈕。
$TRAY_EVENT_PRIMARYUP | -8 | 在常駐圖示上放開主要滑鼠按鈕。
$TRAY_EVENT_SECONDARYDOWN | -9 | 在常駐圖示上按下第二個滑鼠按鈕。
$TRAY_EVENT_SECONDARYUP | -10 | 在常駐圖示上放開第二個滑鼠按鈕。
$TRAY_EVENT_MOUSEOVER | -11 | 滑鼠經過常駐圖示上空。
$TRAY_EVENT_PRIMARYDOUBLE | -13 | 在常駐圖示上點選兩下主要滑鼠按鈕。
$TRAY_EVENT_SECONDARYDOUBLE | -14 | 在常駐圖示上點選兩下第二個滑鼠按鈕。

如函數為一個空白字串 "" 則關閉前一個使用者定義的參數。

相關

TrayOnEventMode (Option), TrayItemSetOnEvent, TraySetClick

範例

#include <Constants.au3>
#NoTrayIcon

Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$exit = TrayCreateItem("結束")
TrayItemSetOnEvent(-1,"ExitEvent")

TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE,"SpecialEvent")
TraySetOnEvent($TRAY_EVENT_SECONDARYUP,"SpecialEvent")

TraySetState()

While 1
Sleep(10) ; 閒置迴圈
WEnd

Exit

; Functions
Func SpecialEvent()
Select
Case @TRAY_ID = $TRAY_EVENT_PRIMARYDOUBLE
Msgbox(64,"SpecialEvent- 訊息","已點選兩下主要滑鼠按鈕。")
Case @TRAY_ID = $TRAY_EVENT_SECONDARYUP
Msgbox(64,"SpecialEvent- 訊息","已按下第二個滑鼠按鈕。")
EndSelect
EndFunc

Func ExitEvent()
Exit
EndFunc


Function TraySetPauseIcon

函數說明（Function Reference）

TraySetPauseIcon

載入/設定一個指定的常駐暫停圖示。

TraySetPauseIcon ( [圖示檔 [, 圖示ID] )

參數

檔案名稱 | [選擇性參數] 在常駐區上以暫停圖示出現的圖示檔名稱。
圖示ID | [選擇性參數] 如該檔內含多組圖示則為圖示識別碼。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

要重設暫停圖示為預設值 (紅色叉叉)，請不帶任何參數使用此函數，例如：
TraySetPauseIcon()

依 + 編號順序排列可參照到與圖示名稱相同的字串。
依 - 編號順序排列就會出現以 1 為基準值的 "索引" 動作，某些 DLL 檔含有可擷取的圖示，這類就正好就是負值編號。

相關

TraySetIcon

範例

#Include <Constants.au3>
#NoTrayIcon

TraySetPauseIcon("shell32.dll",12)
TraySetState()

While 1
$msg = TrayGetMsg()
WEnd

Exit


Function TraySetState

函數說明（Function Reference）

TraySetState

設定常駐圖示的狀態。

TraySetState ( [ 旗標 ] )

參數

旗標 [選擇性參數]
可組合搭配的參數如下：
1 = 顯示常駐圖示 (預設)
2 = 銷毀/隱藏 常駐圖示
4 = 閃爍常駐圖示
8 = 停止常駐圖示的閃爍狀態
16 = 重設圖示為預設值 (不閃爍、預設提示文字)

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

此函數會覆寫 "TrayIconHide"-選項和 "#NoTrayIcon"-設定。
一般項目及暫停圖示是「無法用此函數」重設的！

相關

TrayItemSetState, TraySetIcon, TraySetPauseIcon

範例

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1) ; 預設的常駐圖示選單項目 (腳本的暫停/結束) 將不會顯示

$exititem = TrayCreateItem("結束")

TraySetIcon("警告")
TraySetToolTip("緊急(SOS)！")

TraySetState() ; 顯示常駐圖示

$toggle = 0

While 1
$msg = TrayGetMsg()
Select
Case $msg = 0
Sleep(1000)
If $toggle = 0 Then
TraySetState() ; 顯示常駐圖示
$toggle = 1
Else
TraySetState(2) ; 隱藏常駐圖示
$toggle = 0
EndIF
Case $msg = $exititem
ExitLoop
EndSelect

WEnd

Exit


Function TraySetToolTip

函數說明（Function Reference）

TraySetToolTip

(重覆)設定工具列圖示區中的快顯提示。

TraySetToolTip ( [文字] )

參數

文字 [選擇性參數] 要顯示為工具提示的新文字。長度是有限制的 - 請見附註。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

在 Windows 2000 及更高版本下，工具提示的長度上限為 128 字元。

要重設工具提示為預設值，請不帶任何參數使用此函數，例如：
TraySetToolTip()

工具提示只在常駐圖示為可見狀態時才能修改！

相關

TrayTip

範例

#Include <Constants.au3>
#NoTrayIcon

TraySetState()
TraySetToolTip("這是我的新工具提示文字！")

While 1
Sleep(10) ; 閒置迴圈
WEnd

Exit


Function TrayTip

函數說明（Function Reference）

TrayTip

從 AutoIt 圖示上提示快顯 (僅 2000/XP)。

TrayTip ( "標題", "文字", 逾時 [, 選項] )

參數

標題 | 在水球提示上方以粗體顯示文字 (最大 63 字元)。
文字 | 水球提示出現的訊息 (最大 255 字元)
逾時 | 要水球提示大約於多久 (單位為秒) 後出現 (Windows 有約莫介於 10 - 30 秒的上下限，不過始終無法在該範圍中估得一個絕對正確的數值)。
選項 | [選擇性參數] 請見附註： 0=無圖示 (預設), 1=訊息圖示, 2=警告圖示, 3=錯誤圖示

返回值

無。

附註

TrayTip 只能在 Windows 2000/XP 或以上的版本執行。

如 AutoIt 常駐圖示消失則彈出提示也會一併被關閉，結果是，該工具提示在設定 AutoItSetOption("TrayIconHide", 1) 或使用者藉由登錄的方式將水球禁止後，TrayTip 函數可能會無法作用！

Windows XP 通常會在水球出現時播放一個音效，這個音效可以新增 選項 參數 "16"、或設定一個空白字串的方式關閉。

要移除出現的水球提示，以空白字串 (標題隨便) 呼叫另一個提示就可以關閉了。

相關

MsgBox, ToolTip, TrayIconHide (Option)

範例

TrayTip("我是一個標題", "我是訊息", 5, 1)
MsgBox(4096,"", "請按確定看看另一個提示")
TrayTip("清除所有提示","",0)
TrayTip("", "這是不同的彈出提示", 5)
Sleep(5000)


Function Asc

函數說明（Function Reference）

Asc

返回某字元的 ASCII 碼。

Asc ( "字元" )

參數

字元 要取得的 ASCII 碼字元，若此字元已被使用，則僅提供第一個字元的 ASCII 碼。

返回值

返回指定字元的 ASCII 碼。若傳遞到參數中的是一個數字則返回值為： -1。

附註

Asc("0") == 48, Asc("9") == 57, Asc("A") == 65, Asc("Z") == 90, Asc("a") == 97, Asc("z") == 122, ...等等。
請檢視 Appendix 中有關 ASCII 的完整清單。

相關

AscW, Chr, ChrW

範例

$code = Asc("A")
MsgBox(0, "A: 的 ASCII 碼", $code)


Function AscW

函數說明（Function Reference）

AscW

返回某字元的 Unicode 碼。

AscW ( "字元" )

參數

char 要取得的 Unicode 碼字元，若此字元已被使用，則僅提供第一個字元的 Unicode 碼。

返回值

返回指定字元的 Unicode 碼。若傳遞到參數中的是一個數字則返回值為： -1。

附註

請檢視關於 Appendix 的 ASCII 完整清單。

相關

Asc, Chr, ChrW

範例

$code = AscW("A")
MsgBox(0, "A: 的 Unicode 碼", $code)


Function Chr

函數說明（Function Reference）

Chr

返回指定ASCII碼所對應的字元。

Chr ( ASCII碼 )

參數

ASCII碼 介於 0-255 間的一個 ASCII 碼 (例如：65 返回大小字母 A)。

返回值

成功： | 返回一個含有所取得的 ASCII 碼字元。
失敗： | 若 ASCII碼 大於 255，返回一個空白的字串，並設定 @error 為 1。

附註

Chr(48) == "0", Chr(57) == "9", Chr(65) == "A", Chr(90) == "Z", Chr(97) == "a", Chr(122) = "z", ...等等。
請檢視 Appendix 中有關 ASCII 的完整清單。

相關

Asc, AscW, ChrW, String

範例

$text = ""
For $i = 65 to 90
$text = $text & Chr($i)
Next
MsgBox(0, "英文的全部大寫字母", $text)


Function ChrW

函數說明（Function Reference）

ChrW

返回指定Unicode碼所對應的字元。

ChrW ( UNICODE碼 )

參數

UNICODE碼 介於 0-65535 間的一個 UNICODE碼 (例如：65 返回大小字母 A)。

返回值

成功： | 返回一個含有所取得的 UNICODE 碼字元。
失敗： | 若 UNICODE碼 大於 65535，返回一個空白的字串，並設定 @error 為 1。

附註

請檢視 Appendix 中有關 ASCII 的完整清單。

相關

Asc, AscW, Chr, String

範例

$text = ""
For $i = 256 to 512
$text = $text & ChrW($i)
Next
MsgBox(0, "Unicode 字元 256 到 512", $text)


Function Assign

函數說明（Function Reference）

Assign

以數值資料名稱指定一個變數。

Assign ( "變數", "數值資料" [, 旗標] )

參數

變數 | 指定您要的變數名稱，它不能是群組。
資料 | 您欲指定給變數的數值資料。
旗標 | [選擇性參數] 控制指定變數的模式（可把所需選項對應數值相加）： 0 = (預設) 如有必要則建立變數 1 = 強制建立區域變數 2 = 強制建立全域變數 4 = 若目標變數不存在則表示失敗

返回值

成功： | 返回值 1。
失敗： | 若是無法建立/指定變數，則返回值 0。

附註

若是有需要使用 Assign() 建立/寫入變數，在大部份的情況下，必須用 Eval() 讀取變數，而 IsDeclared() 則用於檢查該變數是否存在。

相關

Eval, IsDeclared

範例

Global $variable
If Assign("variable", "您好") Then MsgBox(4096, "", $variable) ; 將列印 "您好"


Function Binary

函數說明（Function Reference）

Binary

返回二進位運算數值。

Binary ( 運算式 )

參數

運算式 轉換為二進位/位元資料的運算式。

返回值

返回二進位變數

附註

無。

相關

Int, Number, IsBinary

範例

$var = Binary("0x00204060")
;$var 變數是二進位類型
msgbox(0, "IsBinary", IsBinary($var))


Function BinaryLen

函數說明（Function Reference）

BinaryLen

在二進位變數返回某個位元組數值。

BinaryLen ( 二進位 )

參數

二進位 求得的二進位資料。

返回值

返回的二進位資料長度位元組。

附註

無。

相關

Binary, BinaryMid

範例

; 建立二進位資料 0x10203040
$binary = Binary("0x10203040")
MsgBox(0, "位元組長度：", BinaryLen($binary) )


Function BinaryMid

函數說明（Function Reference）

BinaryMid

在二進位變數擷取某個位元組數值。

BinaryMid ( 二進位, 啟始值 [, 數值] )

參數

二進位 | 求得的二進位資料。
啟始值 | 開始的位元位置(1 = 第一個位元)。
數值 | [選擇性參數] 擷取的位元組數值，預設為二進位資料的全部餘數。

返回值

返回取得的二進位資料。

附註

若 啟始值 超過範圍，將返回空白的二進位變數。反之若 啟始值 有效但是 "數值" 超出範圍，則返回二進位資料的全部餘數。

相關

Binary, BinaryLen

範例

; 建立二進位資料 0x10203040
$binary = Binary("0x10203040")
$extract = BinaryMid($binary, 2, 2)
MsgBox(0, "第二及第三位元是：", $extract)


Function BinaryToString

函數說明（Function Reference）

BinaryToString

將某個二進位變數轉換成字串。

BinaryToString ( 運算式 [, 旗標] )

參數

運算式 | 轉換為字串的運算式。
旗標 | [選擇性參數] 變更二進位資料轉換的模式： flag = 1 將取得的二進位資料轉換為 ANSI (預設) flag = 2, 將取得的二進位資料轉換為 UTF16 小尾碼 flag = 3, 將取得的二進位資料轉換為 UTF16 大尾碼 flag = 4, 將取得的二進位資料轉換為 UTF8

返回值

成功：已轉換的二進位資料字串陳述式。
失敗：一個空白字串。@error 依下列規則設定：
1 - 輸出的字串長度是零。
2 - 輸出的字串為奇數位元組，不過僅支援 UTF16 碼 (內含的位元必須是整數，才是有效的 UTF16)

附註

不同的 String() 字串會返回二進位資料的十六進位陳述式，此函數會先假設該二進位資料為字串值，並將它轉換適當的結果。

相關

Binary, IsBinary, String, StringToBinary

範例

; 二進位 ANSI 轉換為字串
$buffer = StringToBinary("您好 -這是文字")
MsgBox(4096, "String() 陳述式" , $buffer)
$buffer = BinaryToString($buffer)
MsgBox(4096, "BinaryToString() ANSI 陳述式" , $buffer)

; 二進位 UTF16-LE 轉換為字串
$buffer = StringToBinary("您好 -這是文字", 2)
MsgBox(4096, "String() 陳述式" , $buffer)
$buffer = BinaryToString($buffer, 2)
MsgBox(4096, "BinaryToString() UTF16-LE 陳述式" , $buffer)

; 二進位 UTF16-BE 轉換為字串
$buffer = StringToBinary("您好 -這是文字", 3)
MsgBox(4096, "String() 陳述式" , $buffer)
$buffer = BinaryToString($buffer, 3)
MsgBox(4096, "BinaryToString() UTF16-BE 陳述式" , $buffer)

; 二進位 UTF8 轉換為字串
$buffer = StringToBinary("您好 -這是文字", 4)
MsgBox(4096, "String() 陳述式" , $buffer)
$buffer = BinaryToString($buffer, 4)
MsgBox(4096, "BinaryToString() UTF8 陳述式" , $buffer)


Function Dec

函數說明（Function Reference）

Dec

返回某個十六進位字串的十進位值。

Dec ( "十六進位值" )

參數

十六進位值 要轉換的十六進位值。

返回值

成功： | 返回整數。
失敗： | 使用無效的十六進位字串或發生溢位，則返回 0 設定 @error 為 1。

附註

此函數只能執行 32 位元帶符號整數 (-2147483648 到 2147483647)。

相關

Hex

範例

$dec = Dec("FFFF") ;返回數值 65535


Function Eval

函數說明（Function Reference）

Eval

返回被字串定義變數的值。

Eval ( 字串 )

參數

字串 聲明變數名稱的字串。

返回值

成功： | 返回變數值。
失敗： | 返回 "" (空白字串) 並設定 @error 不為 0。

附註

若有須要使用 Eval() 讀取變數的話，大部份情況 Assign() 需用建立/寫入到變數中，且可能需要 IsDeclared() 來檢查該變數是否存在。

相關

IsDeclared, Assign, Execute

範例

Dim $a_b = 12
$s = Eval("a" & "_" & "b") ; $s 設定為 12

$s =Eval("c") ; $s = "" 和 @error = 1


Function Hex

函數說明（Function Reference）

Hex

返回一個整數字串值或某個被轉換為十六進位的二進位類型。

Hex ( 運算式 [, 長度] )

參數

運算式 | 要轉換的運算式。
長度 | [選擇性參數] 返回整數的字元數量 (最高 8 個)： 若長度太短則從左手端截短字元 二進位類型則轉換為全長

返回值

成功： | 返回 長度 字元的字串，若須要取整數則以 0 補值。
 | 返回轉換的二進位類型。
特殊： | 若長度小於 1 返回 "" (空白字串)。
失敗： | 若長度大於 8 返回 "" (空白字串) 並設定 @error 為 1。

附註

此函數只能執行 32 位元帶符號整數 (-2147483648 到 2147483647)。

若沒有足夠的數字以滿足需求時，此函數也會將 @error 設為 1 - 返回的字串在此情況下將返回最後一個有效數字。

相關

Dec

範例

$result = Hex(1033, 4) ;返回 "0409"


Function HWnd

函數說明（Function Reference）

HWnd

轉換某個運算子為 HWND 控制碼。

HWnd ( 運算式 )

參數

運算式 轉換為 HWND 控制碼的運算式。

返回值

成功 - 如該值可以轉換為HWND，則返回 HWND 陳述式。
失敗 - 如 HWND 無法表示一個有效視窗，則將返回一個 0 (NULL) HWND 並設定 @error 為 1。

附註

雙位元字串無法轉換為 HWND。
字母是無法轉換為 HWND 的，因為無法保證該視窗是否還能再次擁有相同的 HWND 字串。雖然沒有嚴格限制，不過由於它在程序上過於接近易被弄錯，還是盡量避免為佳。

相關

Int, String, Number

範例

Run("notepad.exe")
WinWait("[未命名 - 記事本]")
Local $hWnd = WinGetHandle("[未命名 - 記事本]")
Local $sHWND = String($hWnd) ; 轉換為字串
WinSetState(HWnd($sHWND), "", @SW_MINIMIZE)
Sleep(5000) ; 最好將記事本最小化
WinClose(HWnd($sHWND))


Function Int

函數說明（Function Reference）

Int

返回某個運算式的整數值。.

Int ( 運算式 )

參數

運算式 要轉換為整數的運算式。

返回值

成功： | 返回一個整數。
失敗： | 若不是整數、旗標、或字串則返回 0 並設定 @error 為 1。

附註

小數部分會被捨去，所以 Int(1.999999) 將返回 1。
若您覺的這樣很奇怪，可設定：Int(0/0) 返回 -9.22337203685478e+018。

相關

Number, String, Round, HWnd

範例

$var = Int(10.793) ;$var 整數為 10


Function IsAdmin

函數說明（Function Reference）

IsAdmin

檢查目前使用者是否有完整管理員權限。

IsAdmin ( )

參數

無。

返回值

成功： | 如目前使用者擁有管理員權限返回 1。
失敗： | 如使用者沒有管理員權限則返回 0。

附註

在 Windows Vista 系統下，只有以完整管理員權限執行時才會返回 1 (也就是說：您需使用 #RequireAdmin，或經由 UAC 互動提升權限)。

相關

#RequireAdmin

範例

If IsAdmin() Then MsgBox(0, "", "您的管理權限已確認無誤。")


Function IsArray

函數說明（Function Reference）

IsArray

檢查某個變數是否為群組類型。

IsArray ( 變數 )

參數

變數 要檢查的變數/運算式。

返回值

成功： | 返回值 1。
失敗： | 若參數不是一個群組變數返回 0。

附註

可以用於使用者定義函數讓 群組/非群組(Array) 參數生效。

相關

IsFloat, IsInt, IsString, IsNumber, IsBool, IsHWnd

範例

$pos = WinGetPos("未命名 -")
If IsArray($pos) Then
MsgBox(0, "視窗高度", $pos[3])
EndIf


Function IsBinary

函數說明（Function Reference）

IsBinary

檢查某個變數或運算式是否為二進位類型。

IsBinary ( 變數/運算式 )

參數

變數/運算式 要檢查的變數或運算式。

返回值

成功： | 返回值 1。
失敗： | 若運算式不是二進位類型返回 0。

附註

無。

相關

IsArray, IsFloat, IsInt, IsString, IsNumber, IsBool, IsHWnd

範例

$bin = Binary("0x00204060")
$str = "0x00204060"

msgbox(0, "IsBinary $bin", IsBinary($bin))
msgbox(0, "IsBinary $str", IsBinary($str))


Function IsBool

函數說明（Function Reference）

IsBool

檢查某個變數的主要類型是否為布林變數。

IsBool ( 變數 )

參數

變數 要檢查的變數或運算式。

返回值

成功： | 返回值 1。
失敗： | 若運算式不是布林變數類型返回 0。

附註

無。

相關

IsArray, IsFloat, IsInt, IsNumber, IsString, IsHWnd

範例

$b = true
If IsBool($b) Then Msgbox(0,"成功", "$b 是一個布林變數。")


Function IsDeclared

函數說明（Function Reference）

IsDeclared

檢查某個變數是否已聲明。

IsDeclared ( 運算式 )

參數

運算式 檢查變數的字串陳述式名稱。

返回值

成功： | 為全域變數或自外部函數聲明的變數則返回 1。
特殊： | 若為本地變數 -1。
失敗： | 當沒找到變數時返回 0。

附註

如有使用 IsDeclared() 函數檢查該變數是否存在的需要，大部份情況要使用 Assign() 建立/寫入變數，並且用 Eval() 從變數進行讀取。

相關

Assign, Eval

範例

If Not IsDeclared ("a") then
MsgBox(0,"", "$a 「尚未聲明」。") ; $a 不曾被指定過
EndIf

$a=1

If IsDeclared ("a") then
MsgBox(0,"", "$a 「已聲明」。" ) ; 因為先前指定了 $a=1
EndIf


Function IsDllStruct

函數說明（Function Reference）

IsDllStruct

檢查某個變數是否為 DllStruct 類型。

IsDllStruct ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 返回值 1。
失敗： | 若運算式不是由 DllStructCreate 返回的 DllStruct 類型則返回 0。

附註

無。

相關

DllStructCreate

範例

$struct = DllStructCreate("char[256]")
$x = IsDllStruct($struct)


Function IsFloat

函數說明（Function Reference）

IsFloat

檢查某個變數或運算式是否為浮點類型。

IsFloat ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 返回值 1。
失敗： | 若運算式的類型不是浮點返回 0。

附註

請見範例。

相關

IsArray, IsInt, IsString, IsNumber, IsBool, IsHWnd, StringIsFloat

範例

$1 = IsFloat(3.14159) ;返回 1
$2 = IsFloat(3.000) ;只要變數為 3 則返回 0
$3 = IsFloat(1/2 - 5) ;返回 1
$4 = IsFloat(1.5e3) ;只要 1.5e3 = 1500 則返回 0
$5 = IsFloat("12.345") ;只要為一個字串則返回 0
MsgBox(0,"", "數值結果分別為：" & $1 & "、" & $2 & "、" & $3 & "、" & $4 & "、" & $5)


Function IsHWnd

函數說明（Function Reference）

IsHWnd

檢查某個變數的主要類型是否為指標及視窗控制碼。

IsHWnd ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 若該運算式類型為指標「而且」是有效的視窗控制碼(HWnd)，則返回值 1。
失敗： | 若該運算式類型不是指標「或」不是有效的視窗控制碼(HWnd)，則返回值 0。

附註

無。

相關

IsArray, IsFloat, IsInt, IsPtr, IsString, IsNumber, IsBool

範例

Run("notepad.exe")
Local $hWnd = WinGetHandle("[未命名 - 記事本]")
If IsHWnd($hWnd) Then
MsgBox(4096, "", "它是一個 HWND(視窗控制碼)。")
Else
MsgBox(4096, "", "它不是一個 HWND(視窗控制碼)。")
EndIf


Function IsInt

函數說明（Function Reference）

IsInt

檢查某個變數或運算式是否為整數。

IsInt ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 返回值 1。
失敗： | 若運算式不是整數則返回 0。

附註

IsInt(7.5 - 2.5) 返回 1 (表示為真)。

相關

IsArray, IsFloat, IsString, IsNumber, IsBool, IsHWnd, StringIsInt

範例

$1 = IsInt(-12345) ;返回 1
$2 = IsInt(3.0000) ;返回 1
$3 = IsInt("5432") ;只要是一個字串則返回 0
$4 = IsInt(7.5 - 4.5) ;只要成功求得整數 3 則返回 1
MsgBox(0,"", "數值結果分別為：" & $1 & "、" & $2 & "、" & $3 & "、" & $4)


Function IsKeyword

函數說明（Function Reference）

IsKeyword

檢查某個變數是否為關鍵字 (例如：Default)。

IsKeyword ( 變數 )

參數

變數 要檢查的變數。

返回值

成功： | 若變數為一個關鍵字返回 1。
失敗： | 若變數不是一個關鍵字則返回 0。

附註

無。

相關

Default

範例

$a = default
If IsKeyword($a) Then MsgBox(0,"確定", "是的它是。")


Function IsNumber

函數說明（Function Reference）

IsNumber

檢查某個變數是否為數字類型資料。

IsNumber ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 返回值 1。
失敗： | 若運算式類型不是一個數字則返回 0。

附註

變數基本上可以為兩種類型：字串和數字。另外，數字可以整除(整數)也可以是小數/浮點。

相關

IsArray, IsFloat, IsInt, IsString, IsBool, IsHWnd

範例

IsNumber(42)


Function IsObj

函數說明（Function Reference）

IsObj

檢查某個變數或運算式是否為物件類型。

IsObj ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 若運算式是一個物件變數則返回 1。
失敗： | 若運算式不是一個物件變數則返回 0。

附註

無。

相關

ObjGet, ObjCreate

範例

$oShell = ObjCreate("shell.application")
if not IsObj($oShell) then
Msgbox(0,"錯誤","$oShell 不是一個物件。")
else
Msgbox(0,"已建立","已成功建立物件 $oShell 了。")
endif


Function IsPtr

函數說明（Function Reference）

IsPtr

檢查某個變數的主要類型是否為指標。

IsPtr ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 若運算式是一個指標類型則返回 1。
失敗： | 若運算式不是一個指標類型則返回 0。

附註

無。

相關

IsArray, IsFloat, IsHWnd, IsInt, IsString, IsNumber, IsBool, Ptr

範例

Run("notepad.exe")
Local $hWnd = WinGetHandle("[未命名 - 記事本]")
If IsPtr($hWnd) Then
MsgBox(4096, "", "它是一個有效指標(Ptr)。")
Else
MsgBox(4096, "", "它不是一個有效指標(Ptr)。")
EndIf


Function IsString

函數說明（Function Reference）

IsString

檢查某個變數是否字元類型資料。

IsString ( 變數/運算式 )

參數

變數/運算式 要檢查的變數/運算式。

返回值

成功： | 返回值 1。
失敗： | 若運算式不是字串類型則返回 0。

附註

無。

相關

IsArray, IsFloat, IsInt, IsNumber, IsBool, IsHWnd, IsBinary

範例

$x = IsString("foo")


Function Number

函數說明（Function Reference）

Number

返回某運算式的數值結果。

Number ( 運算式 )

參數

運算式 要轉換為數字的運算式。

返回值

返回一個數字。

附註

一個以字母為開頭的字串會被返回一個數字零；而以數字做開頭的字串，會將其非數字字元捨去。

相關

Int, String

範例

$w = Number(1+2+10) ;返回 13
$x = Number("3.14") ;返回 3.14
$y = Number("24/7") ;返回 24
$z = Number("tmp3") ;返回 0


Function Ptr

函數說明（Function Reference）

Ptr

轉換某個運算式為指標變數。

Ptr ( 運算式 )

參數

運算式 要轉換為指標變數的運算式。

返回值

返回運算的指標陳述式。

附註

無。

相關

HWnd, Int, IsPtr, String, Number

範例

譯註：...


Function String

函數說明（Function Reference）

String

返回某運算式的字串結果。

String ( 運算式 )

參數

運算式 一個要轉換為字串的運算式。

返回值

返回一個字串。

附註

最大長度為 2147483647 字元 (不過請記住該行在 AutoIt 腳本中是顯示不出來的，因為超過 4095 字元)。

相關

Int, Number, IsString, Chr

範例

$var = String(10)
;$var 字串為 "10"


Function StringToBinary

函數說明（Function Reference）

StringToBinary

將某個字串覆寫為二進位資料。

StringToBinary ( 運算式 [, 旗標] )

參數

運算式 | 要轉換為二進位資料的運算式。
旗標 | [選擇性參數] 變更字串儲存為二進位資料的模式： 旗標 = 1, 二進位資料為 ANSI (預設) 旗標 = 2, 二進位資料為 UTF16 小尾碼 旗標 = 3, 二進位資料為 UTF16 大尾碼 旗標 = 4, 二進位資料為 UTF8

返回值

返回二進位變數。

附註

無。

相關

Binary, BinaryToString, IsBinary, String

範例

; 轉換二進位 ANSI 為字串
$buffer = StringToBinary("您好 - 這是範例")
MsgBox(4096, "String() 表示原始字串： ------" , $buffer)
$buffer = BinaryToString($buffer)
MsgBox(4096, "BinaryToString() ANSI 轉換後的字串： ------" , $buffer)

; 轉換二進位 UTF16-LE 為字串
$buffer = StringToBinary("您好 - 這是範例", 2)
MsgBox(4096, "String() 表示原始字串： ------" , $buffer)
$buffer = BinaryToString($buffer, 2)
MsgBox(4096, "BinaryToString() UTF16-LE 轉換後的字串： ------" , $buffer)

; 轉換二進位 UTF16-BE 為字串
$buffer = StringToBinary("您好 - 這是範例", 3)
MsgBox(4096, "String() 表示原始字串： ------" , $buffer)
$buffer = BinaryToString($buffer, 3)
MsgBox(4096, "BinaryToString() UTF16-BE 轉換後的字串： ------" , $buffer)

; 轉換二進位 UTF8 為字串
$buffer = StringToBinary("您好 - 這是範例", 4)
MsgBox(4096, "String() 表示原始字串： ------" , $buffer)
$buffer = BinaryToString($buffer, 4)
MsgBox(4096, "BinaryToString() UTF8 轉換後的字串： ------" , $buffer)


Function UBound

函數說明（Function Reference）

UBound

返回 (多重範圍) 群組中各範圍的大小。

UBound ( 群組(Array) [, 範圍值(Dimension)] )

參數

群組(Array) | 被查詢的群組變數。
範圍值(Dimension) | [選擇性參數] 係為報告某個多重範圍群組(multi-dimensioned array) 範圍值(Dimension) 的大小。預設值為 1，表示第一個範圍；如這個參數為 0，則返回群組內的下標(subscript) 符號數量。 譯註：下標數量 (subscript) 係指 "[範圍]" 的數量。

返回值

成功： | 返回每個群組範圍的大小。
失敗： | 返回 0 並設定 @error：
 | 1 = 所給的群組不是一個群組。
 | 2 = 群組範圍是無效的。

附註

請記得由 UBound 函數所返回的數值，會比群組最後一個類別 (element) 的索引還大！

相關

Dim

範例

Dim $myArray[10][20] ;類別 0,0 到 9,19
$rows = UBound($myArray)
$cols = UBound($myArray, 2)
$dims = UBound($myArray, 0)

MsgBox(0, "群組的 " & $dims & " 個範圍各有：---", _
$rows & " 行、" & $cols & " 欄。")

;顯示 $myArray 的內容
$output = ""
For $r = 0 to UBound($myArray,1) - 1
$output = $output & @LF
For $c = 0 to UBound($myArray,2) - 1
$output = $output & $myArray[$r][$c] & "0"
Next
Next
MsgBox(4096,"群組內容：", $output)


Function ControlClick

函數說明（Function Reference）

ControlClick

向指定控制項傳送滑鼠點選指令。

ControlClick ( "標題", "文字", 控制項ID [, 按鈕 [, 點選 [, x [, y ]]]] )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。
按鈕 | [選擇性參數] 點選的按鈕："left(左)", "right(右)", "middle(中)", "main(主要按鈕)", "menu(選單)", "primary(第一個)", "secondary(第二個)"，預設是左鍵。
點選 | [選擇性參數] 滑鼠點選次數，預設為 1。
x | [選擇性參數] 控制項的點選 x 軸位置，預設為中心點。
y | [選擇性參數] 控制項的點選 y 軸位置，預設為中心點。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

某些控制項不允許點選動作除非為活動視窗。請在使用 ControlClick() 前用 WinActivate() 函數將視窗強制置頂。
使用點選參數 2 會傳送兩次點選訊號給控制項 - 這功能甚至還可以用在 explorer 瀏覽器控制項以執行程式！

若您已經在控制台中將左右鍵互換，那麼行為將會不同：
"Left" 和 "right" 始終都會點選該按鈕，不論它們是否已經互換過了。
"primary" 或 "main" 按鈕為主要的點選指令，則為相反不論如何都會互換。
"secondary" 或 "menu" 按鈕通常會呼叫內容選單，不論互換與否皆無影響。

按鈕指令 | 一般按鈕 | 互換
"" | 左 | 左
"left" | 左 | 左
"secondary" | 中 | 中
"right" | 右 | 右
"primary" | 左 | 右
"main" | 左 | 右
"secondary" | 右 | 左
"menu" | 右 | 左

相關

ControlCommand, MouseClick, WinActivate

範例

ControlClick("未命名 -", "", "MDIClient1")


Function ControlCommand

函數說明（Function Reference）

ControlCommand

向指定控制項傳送指令。

ControlCommand ( "標題", "文字", 控制項ID, "指令" [, "選項"] )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。
指令 | 傳送給控制項的指令。
選項 | [選擇性參數] 某些指令必要的額外參數。

返回值

依下面列出的指令說明所示，以避免發生錯誤 (像是無效的指令或視窗/控制項)，@error=1：
指令, 選項 | 返回值
"IsVisible", "" | 若控制項可見返回 1，否則為 0。
"IsEnabled", "" | 若控制項已開啟返回 1，否則為 0。
"ShowDropDown", "" | 彈出或顯示下拉式選單 (ComboBox)。
"HideDropDown", "" | 不彈出或顯示下拉式選單 (ComboBox)。
"AddString", '字串' | 在清單框(ListBox) 或下拉式選單(ComboBox) 內後方新增加入字串。
"DelString", 出現順序 | 在清單框(ListBox) 或下拉式選單(ComboBox) 內依出現順序移除字串。
"FindString", '字串' | 返回清單框(ListBox) 或下拉式選單(ComboBox) 內特定字串的仲裁順序。
"SetCurrentSelection", 出現順序 | 將清單框(ListBox) 或下拉式選單(ComboBox) 內的選擇項目，依仲裁順序設為指定的項目。
"SelectString", '字串' | 在清單框(ListBox) 或下拉式選單(ComboBox) 內，依字串設定選擇項目。
"IsChecked", "" | 若按鈕已選擇返回 1，否則為 0。
"Check", "" | 單選項目或選擇按鈕。
"UnCheck", "" | 不單選項目或選擇按鈕。
"GetCurrentLine", "" | 返回編輯區插入符號所在位置的行數 #。
"GetCurrentCol", "" | 返回編輯區插入符號所在位置的欄數 #。
"GetCurrentSelection", "" | 返回清單框(ListBox) 或下拉式選單(ComboBox) 內選擇項目的名稱。
"GetLineCount", "" | 返回編輯區行數 #。
"GetLine", 行數 # | 返回編輯區行數 # 上的文字。
"GetSelected", "" | 返回編輯區選擇的文字。
"EditPaste", '字串' | 在編輯區插入符號所在位置貼上 '字串'。
"CurrentTab", "" | 返回 SysTabControl32 目前顯示的籤頁。
"TabRight", "" | 往 SysTabControl32 籤頁右邊移到下一個籤頁。
"TabLeft", "" | 往 SysTabControl32 籤頁左邊移到下一個籤頁。

附註

某些控制項不允許點選動作除非為活動視窗。請在使用 ControlClick() 前用 WinActivate() 函數將視窗強制置頂。

有一些指令可以在一般 Combo 和 ListBoxes 上順利執行，但是對 "ComboLBox" 是不能正常動作的。

相關

ControlClick, ControlDisable, ControlEnable, ControlFocus, ControlGetPos, ControlGetText, ControlHide, ControlClick, ControlMove, ControlSetText, ControlShow, StatusbarGetText, WinActivate, WinMenuSelectItem, WinGetClassList

範例

Run("notepad.exe")
ControlCommand("[未命名 - 記事本]", "", "Edit1", "GetLineCount", "")


Function ControlDisable

函數說明（Function Reference）

ControlDisable

關閉或使某控制項變成灰色不可用狀態。

ControlDisable ( "標題", "文字", 控制項ID)

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

ControlEnable, ControlHide, ControlCommand

範例

ControlDisable("未命名 -", "", "MDIClient1")


Function ControlEnable

函數說明（Function Reference）

ControlEnable

使某控制項從灰色不可用狀態恢復成正常可用狀態。

ControlEnable ( "標題", "文字", 控制項ID )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

ControlDisable, ControlShow, ControlCommand

範例

ControlEnable("未命名 -", "", "MDIClient1")


Function ControlFocus

函數說明（Function Reference）

ControlFocus

設定輸入焦點到指定視窗的某個控制項上。

ControlFocus ( "標題", "文字", 控制項ID )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 返回值 1。
失敗： | 返回值 0。

附註

無。

相關

ControlCommand, WinActivate

範例

Run("notepad.exe")
ControlFocus("未命名 - 記事本", "", "Edit1")


Function ControlGetFocus

函數說明（Function Reference）

ControlGetFocus

返回指定視窗上鍵盤焦點所在的控制項的 ControlRef#。

ControlGetFocus ( "標題" [, "文字"] )

參數

標題 | 選擇的視窗標題。
文字 | [選擇性參數] 選擇的視窗文字。

返回值

成功： | 返回指定視窗上鍵盤焦點所在的控制項的 ClassNameNN。
失敗： | 若找不到視窗，返回 "" (空白字串) 並設定 @error 為 1。

附註

無。

相關

ControlFocus, ControlCommand, WinActive

範例

Run("notepad.exe")
$a = ControlGetFocus("[未命名 - 記事本]")


Function ControlGetHandle

函數說明（Function Reference）

ControlGetHandle

取得指定控制項的內部控制碼。

ControlGetHandle ( "標題", "文字", 控制項ID )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 返回控制碼 (HWND) 值。
失敗： | 若沒有符合要求的視窗，返回 "" (空白字串) 並設定 @error 為 1。

附註

此函數用於返回某個 HWND/Handle 值。

相關

無。

範例

Run("notepad.exe")
$handle = ControlGetHandle("[未命名 - 記事本]", "", "Edit1")


Function ControlGetPos

函數說明（Function Reference）

ControlGetPos

取得指定控制項相對其視窗的座標位置和大小等訊息。

ControlGetPos ( "標題", "文字", 控制項ID )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 返回包括大小的群組和相對於該用戶區視窗的控制項位置：
 | $array[0] = X 位置。
 | $array[1] = Y 位置。
 | $array[2] = 寬度。
 | $array[3] = 高度。
失敗： | 設定 @error 為 1。

附註

標題/文字跟主視窗是息息相關的，所以請留意帶 "" 的視窗，"" 該關聯到可能為沒內含「控制項ID」類別的活動視窗。

相關

ControlCommand, ControlMove, WinMove

範例

Run("notepad.exe")
$pos = ControlGetPos("[未命名 - 記事本]", "", "Edit1")
MsgBox(0, "視窗狀態：", "POS：" & $pos[0] & "," & $pos[1] & "大小：" & $pos[2] & "," & $pos[3] )


Function ControlGetText

函數說明（Function Reference）

ControlGetText

取得指定控制項上的文字。

ControlGetText ( "標題", "文字", 控制項ID )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 從某個控制項返回文字。
失敗： | 設定 @error 為 1 並返回一個 "" 空白字串。

附註

無。

相關

WinGetText, StatusbarGetText, ControlSetText, ControlCommand

範例

Run("notepad.exe")
$var = ControlGetText("[未命名 - 記事本]", "", "Edit1")


Function ControlHide

函數說明（Function Reference）

ControlHide

隱藏指定控制項。

ControlHide ( "標題", "文字", 控制項ID )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 返回值 1。
失敗： | 若視窗/控制項找不到，返回值 0。

附註

無。

相關

ControlShow, ControlCommand, WinSetState

範例

ControlHide("未命名 -", "", "MDIClient1")


Function ControlListView

函數說明（Function Reference）

ControlListView

向指定的 ListView32 控制項傳送指令。

ControlListView ( "標題", "文字", 控制項ID , "指令" [, 選項1 [, 選項2]] )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。
指令 | 傳送給控制項的指令 (請見下表)。
選項1 | [選擇性參數] 某些指令必要的額外參數。
選項2 | [選擇性參數] 某些指令必要的額外參數。

返回值

依下面列出的指令說明所示，以避免發生錯誤 (像是無效的指令或沒找到的視窗/控制項)，然後設定 @error=1：

指令, 選項1, 選項2 | 動作
"DeSelect", 來自 [, 到] | 取消選擇一個或多個項目。
"FindItem", "尋找的字串" [, 子項目] | 返回字串的索引位置，若沒找到字串則返回 -1。
"GetItemCount" | 返回清單項目數量。
"GetSelected" [, 選項] | 返回字串內含選擇項目的索引位置。若 選項=0 (預設) 僅返回第一個選擇的項目；若 選項=1 則所有的項目被以 | 符號分隔如："0|3|4|10" 全部返回；若沒有項目被選擇則返回 "" 空白字串。
"GetSelectedCount" | 返回選擇項目數量。
"GetSubItemCount" | 返回選擇子項目數量。
"GetText", 項目, 子項目 | 返回提供的項目/子項目文字。
"IsSelected", 項目 | 若選擇項目返回 1，否則返回 0。
"Select", 來自 [, 到] | 選擇一個或多個項目。
"SelectAll" | 全部選擇。
"SelectClear" | 全部取消選擇。
"SelectInvert" | 反轉目前選擇。
"ViewChange", "檢視" | 變更目前檢視。有效檢視為 "list(清單)", "details(詳細內容)", "smallicons(小圖示)", "largeicons(大圖示)"。

所有的項目/子項目基準值為 0。此意味在清單上，第一個項目/子項目為 0，第二個為 1，依此類推。
在 ListView32 控制項的 "details(詳細內容)" 檢視中，"項目" 您可以思考當成是 "列"、"子項目" 和 "欄位" 等。

附註

當在 64-位元 Windows 系統上運作時，因為牽涉到 64-位元的系統程式如 Explorer，而 AutoIt 本身是 32-位元 應用程式，可能某些指令無法執行。

相關

ControlCommand, ControlDisable, ControlEnable, ControlFocus, ControlGetPos, ControlGetText, ControlHide, ControlClick, ControlMove, ControlSetText, ControlShow, ControlTreeView, StatusbarGetText, WinMenuSelectItem, WinGetClassList

範例

ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "SelectAll")
ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "Deselect", 2, 5)
MsgBox(0, "", ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "GetText", 9, 0) )
MsgBox(0, "", ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "FindItem", "14 KB", 1) )
MsgBox(0, "", ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "GetSelected", 1) )


Function ControlMove

函數說明（Function Reference）

ControlMove

在視窗內移動控制項。

ControlMove ( "標題", "文字", 控制項ID, x, y [, 寬度 [, 高度]] )

參數

標題 | 要移動的視窗標題。
文字 | 要移動的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。
x | 相對於視窗用戶區的 X 座標軸。
y | 相對於視窗用戶區的 Y 座標軸。
寬度 | [選擇性參數] 新的視窗寬度。
高度 | [選擇性參數] 新的視窗高度。

返回值

成功： | 返回值 1。
失敗： | 若視窗/控制項找不到，返回值 0。

附註

若 x 座標與 y 軸同為 預設關鍵字(Default) 將不會移動，只是調整大小。

相關

ControlCommand, WinMove

範例

ControlMove("未命名 -", "", "MDIClient1", 0, 0, 200, 200)


Function ControlSend

函數說明（Function Reference）

ControlSend

向指定的控制項傳送字串。

ControlSend ( "標題", "文字", 控制項ID, "文字" [, 旗標] )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。
文字 | 傳送至控制項的文字字元。
旗標 | [選擇性參數] 變更 "按鍵" 處理的模式： 旗標 = 0 ,內含特殊字元的文字，像 + 視為 SHIFT 而 {LEFT} 則視為左箭頭 (預設) 旗標 = 1 ,按鍵照原定動作傳送

返回值

成功： | 返回值 1。
失敗： | 若視窗/控制項找不到，返回值 0。

附註

ControlSend 的運作原理與 Send 類似，不過它還可以直接將按鍵指令傳送給視窗/控制項，不會僅限於活動的視窗。

但是 ControlSend 對於指令提示字元而言並不怎麼方便，因為指令列的執行模式與普通視窗不同 (似乎是檢查實體狀態而不接受敲擊按鍵傳送的訊號)。而在普通視窗上，ControlSend 比一般的 Send 指令還要好用的多 - 只要確認(YES) 便會傳送 shift, ctrl, alt 等等。

在 Send 說明中還提到，該指令有在 CAPS LOCK 開啟時可以傳送不同字元，但 Shift 鍵卻不能使用的情況，典型的範例如捷克語系鍵盤，而對於此問題最好的替代方案(workaround)就是使用 ControlSetText。

控制項首先可能須要利用 ControlFocus 指令提供焦點做追蹤，特別是牽涉到以腳本自行建立的 controlID 時便有這方面的需要。

Opt("SendKeyDelay",...) 修改敲擊按鍵的短暫延遲時間。
Opt("SendKeyDownDelay",...) 修改按住按鍵到放開，敲擊動作的短暫延遲時間。

相關

ControlCommand, Send, ControlSetText, ControlFocus, SendKeyDelay (Option), SendKeyDownDelay (Option)

範例

ControlSend("未命名", "", "Edit1", "這是記事本視窗的一行文字。")


Function ControlSetText

函數說明（Function Reference）

ControlSetText

修改指定控制項的文字。

ControlSetText ( "標題", "文字", 控制項ID, "新文字" [, 旗標] )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。
新文字 | 傳送給控制項的新文字。
旗標 | [選擇性參數] 當不等於 0 時，將強制把目標視窗重繪 (預設)。

返回值

成功： | 返回值 1。
失敗： | 若視窗/控制項找不到，返回值 0。

附註

無。

相關

ControlGetText, ControlCommand

範例

Run("notepad.exe")
WinWait("未命名 -")
ControlSetText("未命名 -", "", "Edit1", "這裡是新文字" )


Function ControlShow

函數說明（Function Reference）

ControlShow

把隱藏的控制項顯示出來。

ControlShow ( "標題", "文字", 控制項ID )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。

返回值

成功： | 返回值 1。
失敗： | 若視窗/控制項找不到，返回值 0。

附註

無。

相關

ControlHide, ControlEnable, ControlCommand

範例

ControlShow("未命名 -", "", "MDIClient1")


Function ControlTreeView

函數說明（Function Reference）

ControlTreeView

向 TreeView32 控制項傳送某個指令。

ControlTreeView ( "標題", "文字", 控制項ID, "指令" [, 選項1 [, 選項2]] )

參數

標題 | 存取的視窗標題。
文字 | 存取的視窗文字。
控制項ID | 互動的控制項，請檢視：控制項 (Controls)。
指令 | 傳送給控制項的指令 (請見下表)。
選項1 | [選擇性參數] 某些指令必要的額外參數。
選項2 | [選擇性參數] 某些指令必要的額外參數。

返回值

依下面列出的指令說明所示，以避免發生錯誤 (像是無效的指令或沒找到的視窗/控制項)，然後設定 @error=1：

指令, 選項1, 選項2 | 動作
"Check", "項目" | 選擇項目 (如該項目支援)。
"Collapse", "項目" | 關閉一個項目並隱藏子類別。
"Exists", "項目" | 如該項目存在返回 1，否則為 0。
"Expand", "項目" | 展開項目並開啟子類別。
"GetItemCount", "項目" | 返回所選擇項目的子類別數量。
"GetSelected" [, UseIndex] | 返回目前選擇的項目來使用項目文字關聯 (如 UseIndex 設為 1，則為索引關聯)。
"GetText", "項目" | 返回項目的文字。
"IsChecked" | 返回一個項目的狀態， 1：已選擇, 0：未選擇, -1：不是複選框。
"Select", "項目" | 選擇一個項目。
"Uncheck", "項目" | 不選擇項目 (如該項目支援)。

"項目" 是一個以文字為準的參數，係用來關聯至特定樹狀檢視 (treeview) 項目，方便使用文字和索引等組合。
索引的基準值是 0，如範例：

Heading1
----> H1SubItem1
----> H1SubItem2
----> H1SubItem3
----> ----> H1S1SubItem1
Heading2
Heading3

"每一層" 皆以 | 做分隔，索引需將 # 放在前面，如範例：

項目 | 項目關聯
Heading2 | "Heading2" 或 "#1"
H1SubItem2 | "Heading1|H1SubItem2" 或 "#0|#1"
H1S1SubItem1 | "Heading1|H1SubItem3|H1S1SubItem1" 或 "#0|#2|#0"

項目關聯也可以像 "Heading1|#1" 這樣混合使用。

附註

當在 64-位元 Windows 系統上運作時，因為牽涉到 64-位元的系統程式如 Explorer，而 AutoIt 本身是 32-位元 應用程式，可能某些指令無法執行。

相關

ControlCommand, ControlDisable, ControlEnable, ControlFocus, ControlGetPos, ControlGetText, ControlHide, ControlClick, ControlListView, ControlMove, ControlSetText, ControlShow, StatusbarGetText, WinMenuSelectItem, WinGetClassList

範例

; 作者：Zedna

#include <GUIConstantsEx.au3>
#include <TreeviewConstants.au3>
#include <WindowsConstants.au3>

$gui = GUICreate("ControlTreeview 函數測試", 212, 212)
$treeview = GUICtrlCreateTreeView(6, 6, 200, 160, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
$h_tree = ControlGetHandle($gui, "", $treeview)

$root = GUICtrlCreateTreeViewItem("根目錄", $treeview)
$item1 = GUICtrlCreateTreeViewItem("項目 1", $root)
$item2 = GUICtrlCreateTreeViewItem("項目 2", $root)
$item3 = GUICtrlCreateTreeViewItem("項目 3", $root)
$item4 = GUICtrlCreateTreeViewItem("項目 4", $root)
$item41 = GUICtrlCreateTreeViewItem("項目 41", $item4)
$item42 = GUICtrlCreateTreeViewItem("項目 42", $item4)
$item5 = GUICtrlCreateTreeViewItem("項目 5", $root)

GUISetState(@SW_SHOW)

; 一些範例
ControlTreeView ($gui, "", $h_tree, "Expand", "Root")

ControlTreeView ($gui, "", $h_tree, "Exists", "Root|Item 4")
ControlTreeView ($gui, "", $h_tree, "Check", "Root|Item 4")
ControlTreeView ($gui, "", $h_tree, "Select", "Root|Item 4")
ControlTreeView ($gui, "", $h_tree, "Expand", "Root|Item 4")

While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
WEnd


Function StatusbarGetText

函數說明（Function Reference）

StatusbarGetText

取得標準狀態列控制項的文字。

StatusbarGetText ( "標題" [, "文字" [, 分區]] )

參數

標題 | 選擇的視窗標題。
文字 | [選擇性參數] 選擇的視窗文字。
分區 | [選擇性參數] 讀取狀態列的 "分區" 數字 - 預設為 1。 1 是第一個可能的分區，通常該部份包括有用的訊息像："已就緒" "載入中..." 等等。

返回值

成功： | 返回讀取到的文字。
失敗： | 如文字不能讀取則返回 "" (空白字串) 並設定 @error 為 1。

附註

此函數會嘗試優先讀取視窗 (Microsoft 通用控制項：msctls_statusbar32) 上的第一個狀態列。某些參數會使用他們自身的狀態列或 MS 通用控制項的特殊版本 - 這些就是 StatusbarGetText 無法讀取的。例如，StatusbarText 在 TextPad 程式是不作用的； 不過，TextPad 狀態列的第一個區域可用：ControlGetText("TextPad", "", "HSStatusBar1") 讀取。
StatusbarGetText 對最小化視窗或甚至是隱藏的視窗都能順利執行。

相關

ControlGetText, ControlCommand

範例

AutoItSetOption("WinTitleMatchMode", 2)
$x = StatusbarGetText("Internet Explorer")
MsgBox(0, "Internet Explorer 的狀態列說明： ---", $x)


Function WinActivate

函數說明（Function Reference）

WinActivate

啟動指定的視窗 (使其成為活動視窗) 。

WinActivate ( "標題" [, "文字"] )

參數

標題 | 要使其活動的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要使其活動的視窗文字。

返回值

成功： | 返回值 1。
失敗： | 如未找到視窗或無法使其成為活動狀態返回 0。

附註

您可以使用 WinActive 函數檢查 WinActivate 是否成功執行。如有數個視窗與條件符合，則以最近開啟的視窗為活動對象。WinActivate 可以用來開啟最小化視窗，然而，一個 "始終置頂" 的視窗仍會覆蓋到您使其活動的視窗。

@extended 內包括有關已完成活動程序的額外資訊。

相關

WinClose, WinSetState, WinTitleMatchMode (Option)

範例

WinActivate("未命名 - 記事本", "")


Function WinActive

函數說明（Function Reference）

WinActive

檢查指定的視窗是否存在且當前被啟動。

WinActive ( "標題" [, "文字"] )

參數

標題 | 檢查活動的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要檢查的視窗文字。

返回值

成功： | 返回值 1。
失敗： | 一律返回 0。

附註

無。

相關

WinExists, WinWait, WinWaitActive, WinWaitClose, WinWaitNotActive, WinTitleMatchMode (Option)

範例

If WinActive("未命名 -") Then
MsgBox(0, "", "視窗已啟動。")
EndIf


Function WinClose

函數說明（Function Reference）

WinClose

關閉指定視窗。

WinClose ( "標題" [, "文字"] )

參數

標題 | 要關閉的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要關閉的視窗文字。

返回值

成功： | 返回值 1。
失敗： | 如未找到視窗返回 0。

附註

此函數會傳送一個關閉訊息給視窗，其結果會依視窗而有不同 (它可能會詢問您是否儲存資料...等)。要強制關閉視窗，請使用 WinKill 函數，如有數個符合條件的視窗，則以最近開啟的視窗將其關閉。

相關

WinActivate, WinExists, WinKill, WinSetState, WinTitleMatchMode (Option)

範例

WinClose("未命名 - 記事本", "")


Function WinExists

函數說明（Function Reference）

WinExists

檢查指定的視窗是否存在。

WinExists ( "標題" [, "文字"] )

參數

標題 | 檢查活動的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要檢查的視窗文字。

返回值

成功： | 如視窗存在返回 1。
失敗： | 一律返回 0。

附註

WinExists 將返回 1 即使是隱藏視窗亦然。

相關

WinActive, WinWait, WinWaitActive, WinWaitClose, WinWaitNotActive, WinTitleMatchMode (Option)

範例

If WinExists("未命名 -") Then
MsgBox(0, "", "視窗已存在。")
EndIf


Function WinFlash

函數說明（Function Reference）

WinFlash

將工作列的某個視窗以閃爍提示。

WinFlash ( "標題" [,"文字" [,閃爍 [,延遲 ]]])

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。
閃爍 | [選擇性參數] 視窗閃爍提示的次數，預設 4。
延遲 | [選擇性參數] 每個彈出視窗延遲等待的毫秒數值，預設 500 毫秒。

返回值

無。

附註

此函數用來抓住使用者眼光可是非常地有用！

相關

WinSetState

範例

; 視窗以間隔 1/2 秒延遲閃爍 4 次
WinFlash("未命名 - 記事本","", 4, 500)


Function WinGetCaretPos

函數說明（Function Reference）

WinGetCaretPos

返回頂層視窗的插入符號的座標位置。

WinGetCaretPos ( )

參數

無。

返回值

成功： | 返回以 2 組類別(element) 包括下列資訊的群組(array)：
 | $array[0] = X 座標
 | $array[1] = Y 座標
失敗： | 設定@error 為 1。

附註

如設定了 CaretCoordMode 函數使用絕對位置，對於多文件介面 (Multiple Document Interface - MDI) WinGetCaretPos 可能無法取得精確的數值。請見範例相關替代方案，請注意：某些應用程式只會回報固定座標，它們不會分辨插入位置在哪！

相關

CaretCoordMode (Option)

範例

$a = WinGetCaretPos()
If Not @error Then ToolTip("第一個方法取得的座標", $a[0], $a[1])
sleep(2000)

$b = _CaretPos()
If Not @error Then ToolTip("第二個方法取得的座標", $b[0], $b[1])
sleep(2000)

; 要取得具有多文件界面 (MDI) 文字編輯器的游標位置，請參考下面這個更可靠的方法
Func _CaretPos()
Local $x_adjust = 5
Local $y_adjust = 40

Opt("CaretCoordMode", 0) ; 相對模式
Local $c = WinGetCaretPos() ; 遊標相對座標
Local $w = WinGetPos("") ;視窗的座標
Local $f = ControlGetFocus("","") ; 文字區域的 "控制碼"
Local $e = ControlGetPos("", "", $f) ; 文字區域的座標

Local $t[2]
If IsArray($c) and IsArray($w) and IsArray($e) Then
$t[0] = $c[0] + $w[0] + $e[0] + $x_adjust
$t[1] = $c[1] + $w[1] + $e[1] + $y_adjust
Return $t ;游標在螢幕上的絕對位置
Else
SetError(1)
EndIf
EndFunc


Function WinGetClassList

函數說明（Function Reference）

WinGetClassList

取得指定視窗的所有控制項類別清單。

WinGetClassList ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 以字串形式返回內含讀取到的視窗類別。
失敗： | 如沒有符合需要的視窗則返回 "" 並設定 @error 為 1。

附註

類別名稱皆以 linefeed (@LF) 換行符號分開。WinGetClassList 對最小化及隱藏視窗都能夠運作，最多可取得 64KB 的文字。如有數個符合條件的視窗，則讀取最近開啟的視窗類別。

相關

WinGetText, ControlCommand

範例

$text = WinGetClassList("未命名 -", "")
MsgBox(0, "讀取到的文字：", $text)


Function WinGetClientSize

函數說明（Function Reference）

WinGetClientSize

取得指定視窗用戶區的大小訊息。

WinGetClientSize ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 返回以 2 組類別(element) 包括下列資訊的群組(array)：
 | $array[0] = 視窗用戶區的寬度。
 | $array[1] = 視窗用戶區的高度。
失敗： | 如視窗未找到返回 0 並設定 @error 為 1。

附註

若目標視窗被最小化，則返回的寬度和高度數值都是零。WinGetClientSize 可以正確地在 (非最小化) 隱藏視窗上執行。如使用了視窗標題 "Program Manager"，則此函數將返回桌面的大小。如有數個符合條件的視窗，則以最近開啟使用的視窗為主。

相關

WinGetPos, WinMove

範例

$size = WinGetClientSize("[active]")
MsgBox(0, "活動視窗的用戶區大小(寬度,高度)是：---", $size[0] & "、" & $size[1])


Function WinGetHandle

函數說明（Function Reference）

WinGetHandle

取得指定視窗的內部控制碼。

WinGetHandle ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 返回視窗的控制碼。
失敗： | 如沒有符合條件的視窗返回 "" (空白字串) 並設定 @error 為 1。

附註

此函數讓您可以不需要視窗 "標題" 和 "文字"，使用控制碼便可以指定視窗。
一但您取得控制碼，您就可以隨意存取需要的視窗，即使視窗標題改變了也是一樣。

相關

WinSetTitle

範例

; 發現一個內含文字 "這是一" 的記事本視窗，並取得其控制碼
; 修改為視窗標題符合模式(WinTitleMatchMode)，使其支援類別名稱和控制碼
AutoItSetOption("WinTitleMatchMode", 4)

; 取得內含文字 "這是一" 記事本視窗的控制碼
$handle = WinGetHandle("classname=Notepad", "這是一")
If @error Then
MsgBox(4096, "錯誤", "無法找到該視窗。")
Else
; 直接傳送一些文字到該視窗的編輯區
ControlSend($handle, "", "Edit1", "AbCdE")
EndIf


Function WinGetPos

函數說明（Function Reference）

WinGetPos

取得指定視窗的座標位置和大小等屬性。

WinGetPos ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 返回以 4 組類別(element) 包括下列資訊的群組(array)：
 | $array[0] = X 座標
 | $array[1] = Y 座標
 | $array[2] = 寬度
 | $array[3] = 高度
失敗： | 如視窗未找到則返回 0 並設定 @error 為 1。

附註

對於最小化視窗 WinGetPos 會返回負數如：-32000，不過可以正確地在 (非最小化) 隱藏視窗上執行。
如使用了視窗標題 "Program Manager"，則此函數將返回桌面的大小。如有數個符合條件的視窗，則以最近開啟使用的視窗為主。

相關

WinGetClientSize, WinMove

範例

$size = WinGetPos("[active]")
MsgBox(0, "活動視窗的狀態 (x,y,寬度,高度) 是：---", $size[0] & "、" & $size[1] & "、" & $size[2] & "、" & $size[3])


Function WinGetProcess

函數說明（Function Reference）

WinGetProcess

取得指定視窗的相關程序 ID (PID) 。

WinGetProcess ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 返回處理程序 ID (PID) 數字。
失敗： | 返回值 -1。

附註

無。

相關

ProcessWait, ProcessWaitClose, ProcessList

範例

Run("notepad.exe")
$pid = WinGetProcess("未命名 - 記事本")
MsgBox(4096, "PID 碼為：", $pid)


Function WinGetState

函數說明（Function Reference）

WinGetState

取得指定視窗的狀態。

WinGetState ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 返回一個指示視窗狀態的數值。它們是好幾個數值加在一起的，所以您可使用 BitAND() 函數仔細檢查(examine) 某個您感興趣的地方：
 | 1 = 視窗存在。
 | 2 = 視窗為可見狀態。
 | 4 = 視窗已開啟。
 | 8 = 視窗為活動狀態。
 | 16 = 視窗已最小化。
 | 32 = 視窗已最大化。
失敗： | 如視窗未找到則返回 0 並設定 @error 為 1。

附註

無。

相關

BitAND, WinGetPos

範例

; 檢查新視窗是否已最小化
$state = WinGetState("未命名", "")

; 檢查是否已設定 "最小化" ？
If BitAnd($state, 16) Then
MsgBox(0, "範本", "視窗已最小化。")
EndIf


Function WinGetText

函數說明（Function Reference）

WinGetText

取得指定視窗中的文字。

WinGetText ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 返回一個內含讀取到的視窗文字字串。
失敗： | 如無符合標題返回值 0。

附註

此函數最多能取得 64KB 的視窗文字。WinGetText 可以在最小化視窗上執行，不過若您設定了 AutoItSetOption("WinDetectHiddenText", 1) 則僅限用於隱藏的視窗。
如有數個與 WinGetText 條件符合的視窗，則返回最近開啟的視窗訊息。
請使用 WinGetText("[active]") 取得活動視窗的文字。

相關

WinGetTitle, ControlGetText

範例

$text = WinGetText("未命名 -", "")
MsgBox(0, "讀取到的文字為：", $text)


Function WinGetTitle

函數說明（Function Reference）

WinGetTitle

取得指定視窗的完整標題名稱。

WinGetTitle ( "標題" [, "文字"] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

成功： | 返回一個內含完整視窗標題的字串。
失敗： | 如無符合標題返回值 0。

附註

WinGetTitle("[active]") 會返回活動視窗的標題。WinGetTitle 在最小化及隱藏視窗上都能執行，如有數個符合條件的視窗，則以最近開啟使用的視窗為主。

相關

AutoItWinGetTitle, WinGetText, WinSetTitle, WinTitleMatchMode (Option)

範例

$title = WinGetTitle("未命名 -", "")
MsgBox(0, "讀取到的完整標題是：", $title)


Function WinKill

函數說明（Function Reference）

WinKill

強行關閉指定視窗。

WinKill ( "標題" [, "文字"] )

參數

標題 | 要關閉的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要關閉的視窗文字。

返回值

無 (不論成功與否始終返回 1)。

附註

WinKill 與此函數和 WinClose 的不同之處在於，若它未能迅速地關閉視窗時，會強制將該視窗結束終止。因此，使用者可能沒有機會對提示使用者儲存資料的對話框作出反應。雖然 WinKill 能在最小化或隱藏視窗上順利運作，不過某些視窗 (尤其是 Explorer 檔案管理員) 只能用 WinClose 才能將它關閉。

相關

WinActivate, WinClose, WinSetState, ProcessClose

範例

WinKill("未命名 - ", "")


Function WinList

函數說明（Function Reference）

WinList

取得視窗清單。

WinList ( ["標題" [, "文字"]] )

參數

標題 | [選擇性參數] 要讀取的視窗標題。
文字 | [選擇性參數] 要讀取的視窗文字。

返回值

返回一個符合視窗標題與控制碼的群組 (Array)。

附註

若沒有給予視窗標題及文字，則將上層所有視窗返回。

返回的群組是以 2 個範圍 (dimensional) 並依下表組成：
$array[0][0] = 返回的視窗數量
$array[1][0] = 第 1 個視窗的標題
$array[1][1] = 第 1 個視窗的控制碼 (HWND)
$array[2][0] = 第 2 個視窗的標題
$array[2][1] = 第 2 個視窗的控制碼 (HWND)
...
$array[n][0] = 第 N 個視窗的標題
$array[n][1] = 第 N 個視窗的控制碼 (HWND)

相關

WinGetHandle

範例

$var = WinList()

For $i = 1 to $var[0][0]
; 只顯示帶標題的可見視窗
If $var[$i][0] <> "" AND IsVisible($var[$i][1]) Then
MsgBox(0, "內容", "標題 = " & $var[$i][0] & @LF & "控制碼 = " & $var[$i][1])
EndIf
Next

Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf

EndFunc


Function WinMenuSelectItem

函數說明（Function Reference）

WinMenuSelectItem

呼叫視窗中的某個選單項目。

WinMenuSelectItem ( "標題", "文字", "項目" [, "項目" [, "項目" [, "項目" [, "項目" [, "項目" [, "項目"]]]]]] )

參數

標題 | 要讀取的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | 要讀取的視窗文字。
項目 | 選單項目的文字。
項目 | [選擇性參數] 子選單項目的文字。
項目 | [選擇性參數] 子選單項目的文字。
項目 | [選擇性參數] 子選單項目的文字。
項目 | [選擇性參數] 子選單項目的文字。
項目 | [選擇性參數] 子選單項目的文字。
項目 | [選擇性參數] 子選單項目的文字。

返回值

成功： | 返回值 1。
失敗： | 如選單未找到返回 0。

附註

您須要注意的是含有底線的選單項目皆是由一個 & 符號指定為底線。因此，選單項目 File 需設定的文字為 "&File"，而 Convert 則為 "Con&vert"。您可以存取的項目深度可達六層選單；而且指定的視窗可以是：活動狀態/最小化、甚至隱藏視窗都可以。

WinMenuSelectItem 只對標準選單有作用。不幸的是，目前有很多的選單實際上都是程式師自己寫的、或是用工具列 "假裝" 成選單。對於現實 Microsoft 的應用程式來說多數都是如此。

相關

ControlCommand, Send

範例

; 將選擇記事本功能表 >> 檔案(&F)、設定列印格式(&U)
WinMenuSelectItem("未命名 - ", "", "檔案(&F)", "設定列印格式(&U)..." )


Function WinMinimizeAll

函數說明（Function Reference）

WinMinimizeAll

最小化全部視窗。

WinMinimizeAll ( )

參數

無。

返回值

無。

附註

Send("#m") 也是一種可行辦法。

相關

WinMinimizeAllUndo, WinSetState

範例

WinMinimizeAll()


Function WinMinimizeAllUndo

函數說明（Function Reference）

WinMinimizeAllUndo

取消之前 WinMinimizeAll 的效果。

WinMinimizeAllUndo ( )

參數

無。

返回值

無。

附註

Send("#+m") 也是一種可行辦法。

相關

WinMinimizeAll, WinSetState

範例

WinMinimizeAllUndo()


Function WinMove

函數說明（Function Reference）

WinMove

移動指定的視窗或調整視窗的大小。

WinMove ( "標題", "文字", x, y [, 寬度 [, 高度[, 速度]]] )

參數

標題 | 要移動、調整大小的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | 要移動、調整大小的視窗文字。
x | 要移動到的 X 目標座標。
y | 要移動到的 Y 目標座標。
寬度 | [選擇性參數] 視窗的新寬度。
高度 | [選擇性參數] 視窗的新高度。
速度 | [選擇性參數] 移動視窗的速度，範圍 1 (最快) 到 100 (最慢)。如未定義則立即移動。

返回值

成功： | 返回值 1。
失敗： | 如視窗未找到返回 0。

附註

WinMove 對最小化視窗是沒影響的，不過對隱藏視窗可順利執行。
如設定的寬度和高度過小 (或為負)，則視窗不會小於 112 x 27 像素。若寬度和高度過大，該視窗不會大於約 [12+@DesktopWidth] x [12+@DesktopHeight] 像素的範圍。
X 和 Y 座標可以使用負數表示。事實上，您還可以把視窗移出螢幕；如該程式視窗是一個「能記住上次位置」的視窗，則下一次您執行時，它會在螢幕的角落出現 (不過是全螢幕)。
如有數個符合條件的視窗，則以最近開啟的視窗為主。

如 x 與 y 座標皆為：預設關鍵字 (Default keyword)，則不會有任何移動動作，只能調整大小。

在使用了速度參數的情況，則一次完成移動跟大小調整。

相關

WinActivate, WinClose, WinGetClientSize, WinGetPos, WinSetState, Default

範例

WinMove("未命名 -", "", 0, 0, 200, 200)


Function WinSetOnTop

函數說明（Function Reference）

WinSetOnTop

設定指定視窗的「始終在頂層」屬性。

WinSetOnTop ( "標題", "文字", 旗標 )

參數

標題 | 要套用效果的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要套用效果的視窗文字。
旗標 | 設定決定該視窗擁有 "置頂(TOPMOST)" 的旗標模式： 1= 設為置頂旗標, 0 = 移除置頂旗標

返回值

成功： | 返回值 1。
失敗： | 如視窗未找到返回 0。

附註

某些已加入一個 "始終置頂" 右鍵選單的第三方程式，可能不會同步更新選單內容以對應 AutoIt 在 "置頂(TOPMOST)" 狀態內的變動修改。

相關

WinSetState

範例

WinSetOnTop("未命名 -", "", 1)


Function WinSetState

函數說明（Function Reference）

WinSetState

顯示、隱藏、最小化、最大化或復原某個視窗。

WinSetState ( "標題", "文字", 旗標 )

參數

標題 | 要顯示的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要顯示的視窗文字。
旗標 | 被執行程式的 "顯示" 旗標： @SW_HIDE = 隱藏視窗 @SW_SHOW = 顯示前一個隱藏的視窗 @SW_MINIMIZE = 最小化視窗 @SW_MAXIMIZE = 最大化視窗 @SW_RESTORE = 取消視窗最小化或最大化 @SW_DISABLE = 關閉視窗禁用 @SW_ENABLE = 開啟視窗

返回值

成功： | 返回值 1。
失敗： | 如視窗未找到返回 0。

附註

如有數個符合條件的視窗，則以最近開啟的視窗為主。
@SW_MINIMIZE 和 @SW_MAXIMIZE 甚至在強制回應對話框 (modal dialog) 視窗上都能執行。

相關

WinActivate, WinClose

範例

WinSetState("未命名 -", "", @SW_HIDE)
Sleep(3000)
WinSetState("未命名 -", "", @SW_SHOW)


Function WinSetTitle

函數說明（Function Reference）

WinSetTitle

修改指定視窗的標題。

WinSetTitle ( "標題", "文字", "新標題" )

參數

標題 | 要修改的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | 要修改的視窗文字。
新標題 | 給視窗的新標題。

返回值

成功： | 返回值 1。
失敗： | 如視窗未找到返回 0。

附註

如有數個符合標題條件的視窗，則以最近開啟的視窗做修改。

相關

AutoItWinSetTitle, WinGetTitle, WinTitleMatchMode (Option)

範例

WinSetTitle("未命名 - ", "", "- 我的新記事本 -")


Function WinSetTrans

函數說明（Function Reference）

WinSetTrans

設定指定視窗的透明度 (僅支援Windows 2000/XP或更高版本) 。

WinSetTrans ( "標題", "文字", 透明度 )

參數

標題 | 要修改的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | 要修改的視窗文字。
透明度 | 範圍介於 0 到 255 之間的數值。數值越小，則透明度越高： 255 = 不透明 (Solid), 0 = 隱藏 (Invisible)。

返回值

成功： | 返回非零值。
失敗： | 若此函數不被系統支援，則返回值 0、@error 將被設為 1。

附註

此函數需要 Windows 2000/XP 或以上的版本方能執行，螢幕色彩範圍必須大於或等於 16-位元。

相關

無。

範例

Opt("WinTitleMatchMode", 2) ; 與子字串符合
WinSetTrans("記事本", "", 170) ; 使記事本視窗變為半透明 (semi-transparent)


Function WinWait

函數說明（Function Reference）

WinWait

暫停腳本的執行直至指定視窗存在 (出現) 為止。

WinWait ( "標題" [, "文字" [, 逾時]] )

參數

標題 | 要檢查的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要檢查的視窗文字。
逾時 | [選擇性參數] 以秒為單位的時間延遲。

返回值

成功： | 返回值 1。
失敗： | 如逾時則返回 0。

附註

無。

相關

WinActive, WinExists, WinWaitActive, WinWaitClose, WinWaitNotActive, WinWaitDelay (Option)

範例

;等待 "未命名" 視窗出現

Run("notepad")
WinWait("未命名")

;等待最多 5 秒直到 "未命名" 視窗出現
WinWait("未命名", "", 5)


Function WinWaitActive

函數說明（Function Reference）

WinWaitActive

暫停腳本的執行直至指定視窗被啟動 (成為可活動狀態) 為止。

WinWaitActive ( "標題" [, "文字" [, 逾時]] )

參數

標題 | 要檢查的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要檢查的視窗文字。
逾時 | [選擇性參數] 以秒為單位的時間延遲。

返回值

成功： | 返回值 1。
失敗： | 如逾時則返回 0。

附註

無。

相關

WinActive, WinExists, WinWait, WinWaitClose, WinWaitNotActive, WinWaitDelay (Option)

範例

;等待 "未命名" 視窗出現並為活動狀態
WinWaitActive("未命名")

;等待最多 5 秒直到 "未命名" 視窗出現並為活動狀態
WinWaitActive("未命名", "", 5)


Function WinWaitClose

函數說明（Function Reference）

WinWaitClose

暫停腳本的執行直至所指定視窗不再存在 (被關閉或其它) 為止。

WinWaitClose ( "標題" [, "文字" [, 逾時]] )

參數

標題 | 要檢查的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要檢查的視窗文字。
逾時 | [選擇性參數] 以秒為單位的時間延遲。

返回值

成功： | 返回值 1。
失敗： | 如逾時則返回 0。

附註

若此函數呼叫時該視窗已不存在則立即返回 1，約每隔 250 毫秒檢查視窗一次。

相關

WinActive, WinExists, WinWait, WinWaitActive, WinWaitNotActive, WinWaitDelay (Option)

範例

;等待 "未命名" 視窗直至不存在為止
WinWaitClose("未命名")

;等待最多 5 秒直到 "未命名" 視窗被關閉
WinWaitClose("未命名", "", 5)


Function WinWaitNotActive

函數說明（Function Reference）

WinWaitNotActive

暫停腳本的執行直至指定視窗不是啟動狀態為止。

WinWaitNotActive ( "標題" [, "文字" [, 逾時]] )

參數

標題 | 要檢查的視窗標題，請檢視：視窗標題特別定義 (Title special definition)。
文字 | [選擇性參數] 要檢查的視窗文字。
逾時 | [選擇性參數] 以秒為單位的時間延遲。

返回值

成功： | 返回值 1。
失敗： | 如逾時則返回 0。

附註

腳本會約每隔 250 毫秒自行檢查是否有符合視窗。

相關

WinActive, WinExists, WinWait, WinWaitActive, WinWaitClose, WinWaitDelay (Option)

範例

;等待 "未命名" 視窗直到為非活動狀態為止
WinWaitNotActive("未命名")

;等待最多 5 秒直到 "未命名" 視窗為非活動狀態為止
WinWaitNotActive("未命名", "", 5)


附錄參照

附錄參照 (Appendix Reference)

  • AutoIt3 的限制/預設值
  • ASCII 字元編碼表
  • 特殊資料夾的 CLSID
  • GUI 控制項類型
  • 任意指定...字型
  • @OSLang 各國語言碼
  • Send 按鍵清單
  • 視窗訊息碼


AutoIt3 的限制/預設值

AutoIt3 的限制 | 數值 | 詳細說明
MAX_LINESIZE | 4095 | 腳本的最大行數。
MAX_ENVSIZE | 32767 | ENV 變數的最大值。
WINTEXTBUFFER | 32767 | GetWindowText fails 在 95 系統下若 >65535 會失敗；WM_GETTEXT 若 >32767 會不定期失敗。
MAXCALLRECURSE | 5100 | Call() 函數的循環最大值。
MAXEXECUTERECURSE | 5100 | Execute() 函數的循環最大值。
GUI_MAXCONTROLS | 65532 | GUI 視窗控制項的數量最大值。
GUI_MAXPOINTS | 256 | 圖形資訊頁的點數最大值。
COM_MAXEVENT | 64 | COM 事件的緩衝最大值。
VAR_SUBSCRIPT_MAX | 64 | 單一群組的下標最大值。
MAIN_TIMER_DELAY | 750 ms | 常駐圖示只能在每 750ms 時間內檢查進行「隱藏/閃爍/重繪」。
CMDLINEPARAM_MAXLEN | 4096 | 每個參數可擁有的字元數。
TRAY_MAXITEMS | 505 | 右鍵選單的項目最大值。
TRAY_MAXEVENT | 32 | 事件的緩衝最大值。
TRAY_TOOLTIPWIDTH | 64 | 可自動提示顯示的字元最大值。

預設值 | 數值 | 詳細說明
ADLIB delay | 250 ms | 預設延遲的 ADLIB 毫秒(ms) 觸發值。可在該項目中定義：AdlibEnable()。
 |  | 下列中的預設值可以修改：Opt()。
MouseClickDelay | 10 ms | 滑鼠每次點選的延遲時間。
MouseClickDownDelay | 10 ms | 點選按下的延遲時間。
MouseClickDragDelay | 250 ms | 拖曳動作開始到結束的延遲時間。
TCPTimeout | 100 ms | TCP 函數終止後的延遲時間。


ASCII 字元編碼表

這個清單對 Asc 和 Chr 函數的使用比較有詳細說明，此表從 ASCII 字元集 取得。

控制符號（通常不可列印，黃色高亮顯示的是其中最常用的）

字元... | 十進位 | 十六進位 | 詳細說明
NUL | 0 | 00 | 空白字元 (Null)
SOH | 1 | 01 | 標題開頭 = 控制台中斷 (Start of heading)
STX | 2 | 02 | 文字開頭，HP 控制台的主模式 (Start of text)
ETX | 3 | 03 | 文字結尾 (End of text)
EOT | 4 | 04 | 傳送結尾，與 ETB 不同 (End of transmission)
ENQ | 5 | 05 | 詢問，以 ACK 詢問，舊的 HP 流量控制 (Enquiry)
ACK | 6 | 06 | 收到確認 (Acknowledge)，清除 ENQ 登入傳遞
BEL | 7 | 07 | 警報 (Bell)，蜂鳴聲（播放 Windows 的預設蜂鳴聲）
BS | 8 | 08 | 退後，用在 HP 終端機/電腦 (Backspace)
HT | 9 | 09 | 水平表格符號，移到下一個表格 (Horizontal tab)
LF | 10 | 0a | 換行 (Line Feed)
VT | 11 | 0b | 垂直表格符號 (Vertical tab)
FF | 12 | 0c | 頁面換行 (FormFeed)，退出頁面
CR | 13 | 0d | ENTER 換行 (Carriage Return)
SO | 14 | 0e | 往外平移，交換符號表(Shift Out)
SI | 15 | 0f | 往內平移，復原預設符號表 (Shift In)
DLE | 16 | 10 | 空格 (Data link escape)
DC1 | 17 | 11 | XON，與 XOFF 用來暫停表單列出："確定好傳送" (Device Control 1)
DC2 | 18 | 12 | 裝置控制 2，資料段模式流量控制 (Device Control 2)
DC3 | 19 | 13 | XOFF，與 XON 皆以 TERM=18 做流量控制 (Device Control 3)
DC4 | 20 | 14 | 裝置控制 4 (Device Control 4)
NAK | 21 | 15 | 否決 acknowledge 回應
SYN | 22 | 16 | 空白轉同步 (Synchronous idle)
ETB | 23 | 17 | 結束傳送資料段，與 EOT不同 (End transmission block)
CAN | 24 | 18 | 取消該行，回應 MPE (Cancel line)
EM | 25 | 19 | 媒體結尾，Ctrl-Y 中斷 (End of medium)
SUB | 26 | 1a | 置換 (Substitute)
ESC | 27 | 1b | Esc，換碼，不回應下個字元
FS | 28 | 1c | 檔案分隔符號 (File separator)
GS | 29 | 1d | 群組分隔符號 (Group separator)
RS | 30 | 1e | 記錄分隔符號，終止資料段模式 (Record separator)
US | 31 | 1f | 單元分隔符號 (Unit separator)

可列印字元（標準字元）

字元 ... | 十進位 | 十六進位 | 詳細說明
 | 32 | 20 | 空格
! | 33 | 21 | 驚歎號
" | 34 | 22 | 雙引號（HTML中的 &quot）
# | 35 | 23 | 井號（編號符號）
$ | 36 | 24 | 美元符號
% | 37 | 25 | 百分比符號
& | 38 | 26 | 連結符號
` | 39 | 27 | 右單引號（省略符號，如：I'll 代表 I will）
( | 40 | 28 | 左括號
) | 41 | 29 | 右括號
* | 42 | 2a | 星號（相乘）
+ | 43 | 2b | 加號
- | 45 | 2d | 連字元號，破折號，減號
. | 46 | 2e | 句點
/ | 47 | 2f | 斜線（左斜線，相除）
0 | 48 | 30 | 零
1 | 49 | 31 | 一
2 | 50 | 32 | 二
3 | 51 | 33 | 三
4 | 52 | 34 | 四
5 | 53 | 35 | 五
6 | 54 | 36 | 六
7 | 55 | 37 | 七
8 | 56 | 38 | 八
9 | 57 | 39 | 九
: | 58 | 3a | 冒號
; | 59 | 3b | 分號
< | 60 | 3c | 小於
= | 61 | 3d | 等於
> | 62 | 3e | 大於
? | 63 | 3f | 問號
@ | 64 | 40 | 標示隱藏、信件區隔符號
A | 65 | 41 | 大寫的 A
B | 66 | 42 | 大寫的 B
C | 67 | 43 | 大寫的 C
D | 68 | 44 | 大寫的 D
E | 69 | 45 | 大寫的 E
F | 70 | 46 | 大寫的 F
G | 71 | 47 | 大寫的 G
H | 72 | 48 | 大寫的 H
I | 73 | 49 | 大寫的 I
J | 74 | 4a | 大寫的 J
K | 75 | 4b | 大寫的 K
L | 76 | 4c | 大寫的 L
M | 77 | 4d | 大寫的 M
N | 78 | 4e | 大寫的 N
O | 79 | 4f | 大寫的 O
P | 80 | 50 | 大寫的 P
Q | 81 | 51 | 大寫的 Q
R | 82 | 52 | 大寫的 R
S | 83 | 53 | 大寫的 S
T | 84 | 54 | 大寫的 T
U | 85 | 55 | 大寫的 U
V | 86 | 56 | 大寫的 V
W | 87 | 57 | 大寫的 W
X | 88 | 58 | 大寫的 X
Y | 89 | 59 | 大寫的 Y
Z | 90 | 5a | 大寫的 Z
[ | 91 | 5b | 左中括弧
\ | 92 | 5c | 右斜線（反斜線）
] | 93 | 5d | 右中括弧
^ | 94 | 5e | 插入，脫節符號（曲折號）
_ | 95 | 5f | 底線
` | 96 | 60 | 左單引號
a | 97 | 61 | 小寫的 a
b | 98 | 62 | 小寫的 b
c | 99 | 63 | 小寫的 c
d | 100 | 64 | 小寫的 d
e | 101 | 65 | 小寫的 e
f | 102 | 66 | 小寫的 f
g | 103 | 67 | 小寫的 g
h | 104 | 68 | 小寫的 h
i | 105 | 69 | 小寫的 i
j | 106 | 6a | 小寫的 j
k | 107 | 6b | 小寫的 k
l | 108 | 6c | 小寫的 l
m | 109 | 6d | 小寫的 m
n | 110 | 6e | 小寫的 n
o | 111 | 6f | 小寫的 o
p | 112 | 70 | 小寫的 p
q | 113 | 71 | 小寫的 q
r | 114 | 72 | 小寫的 r
s | 115 | 73 | 小寫的 s
t | 116 | 74 | 小寫的 t
u | 117 | 75 | 小寫的 u
v | 118 | 76 | 小寫的 v
w | 119 | 77 | 小寫的 w
x | 120 | 78 | 小寫的 x
y | 121 | 79 | 小寫的 y
z | 122 | 7a | 小寫的 z
{ | 123 | 7b | 左大括弧
| | 124 | 7c | 垂直線
} | 125 | 7d | 右大括弧
~ | 126 | 7e | 波浪號（大約值符號）
 | 127 | 7f | 移除（去除），叉叉符號

延伸字元集 (ANSI)

字元 ... | 十進位 | 十六進位 | 詳細說明
� | 128 | 80 |
 | 129 | 81 | 注意： 這個在已編譯的 html 說明檔案中無法顯示該符號
‚ | 130 | 82 |
ƒ | 131 | 83 |
„ | 132 | 84 |
… | 133 | 85 |
† | 134 | 86 |
‡ | 135 | 87 |
ˆ | 136 | 88 |
‰ | 137 | 89 |
Š | 138 | 8A |
‹ | 139 | 8B |
Œ | 140 | 8C |
 | 141 | 8D | 注意： 這個在已編譯的 html 說明檔案中無法顯示該符號
Ž | 142 | 8E |
 | 143 | 8F | 注意： 這個在已編譯的 html 說明檔案中無法顯示該符號
� | 144 | 90 |
『 | 145 | 91 |
』 | 146 | 92 |
「 | 147 | 93 |
」 | 148 | 94 |
• | 149 | 95 |
– | 150 | 96 |
— | 151 | 97 |
˜ | 152 | 98 |
™ | 153 | 99 |
š | 154 | 9A |
› | 155 | 9B |
œ | 156 | 9C |
 | 157 | 9D | 注意： 這個在已編譯的 html 說明檔案中無法顯示該符號
ž | 158 | 9E |
Ÿ | 159 | 9F |
 | 160 | A0 | 注意： 這個在已編譯的 html 說明檔案中無法顯示該符號
¡ | 161 | A1 |
¢ | 162 | A2 |
£ | 163 | A3 |
¤ | 164 | A4 |
¥ | 165 | A5 |
¦ | 166 | A6 |
§ | 167 | A7 |
¨ | 168 | A8 |
© | 169 | A9 |
ª | 170 | AA |
« | 171 | AB |
¬ | 172 | AC |
 | 173 | AD | 注意： 這個在已編譯的 html 說明檔案中無法顯示該符號
® | 174 | AE |
¯ | 175 | AF |
° | 176 | B0 |
± | 177 | B1 |
² | 178 | B2 |
³ | 179 | B3 |
´ | 180 | B4 |
µ | 181 | B5 |
¶ | 182 | B6 |
· | 183 | B7 |
¸ | 184 | B8 |
¹ | 185 | B9 |
º | 186 | BA |
» | 187 | BB |
¼ | 188 | BC |
½ | 189 | BD |
¾ | 190 | BE |
¿ | 191 | BF |
À | 192 | C0 |
Á | 193 | C1 |
Â | 194 | C2 |
Ã | 195 | C3 |
Ä | 196 | C4 |
Å | 197 | C5 |
Æ | 198 | C6 |
Ç | 199 | C7 |
È | 200 | C8 |
É | 201 | C9 |
Ê | 202 | CA |
Ë | 203 | CB |
Ì | 204 | CC |
Í | 205 | CD |
Î | 206 | CE |
Ï | 207 | CF |
Ð | 208 | D0 |
Ñ | 209 | D1 |
Ò | 210 | D2 |
Ó | 211 | D3 |
Ô | 212 | D4 |
Õ | 213 | D5 |
Ö | 214 | D6 |
× | 215 | D7 |
Ø | 216 | D8 |
Ù | 217 | D9 |
Ú | 218 | DA |
Û | 219 | DB |
Ü | 220 | DC |
Ý | 221 | DD |
Þ | 222 | DE |
ß | 223 | DF |
à | 224 | E0 |
á | 225 | E1 |
â | 226 | E2 |
ã | 227 | E3 |
ä | 228 | E4 |
å | 229 | E5 |
æ | 230 | E6 |
ç | 231 | E7 |
è | 232 | E8 |
é | 233 | E9 |
ê | 234 | EA |
ë | 235 | EB |
ì | 236 | EC |
í | 237 | ED |
î | 238 | EE |
ï | 239 | EF |
ð | 240 | F0 |
ñ | 241 | F1 |
ò | 242 | F2 |
ó | 243 | F3 |
ô | 244 | F4 |
õ | 245 | F5 |
ö | 246 | F6 |
÷ | 247 | F7 |
ø | 248 | F8 |
ù | 249 | F9 |
ú | 250 | FA |
û | 251 | FB |
ü | 252 | FC |
ý | 253 | FD |
þ | 254 | FE |
ÿ | 255 | FF |


CLSID 清單

特殊資料夾的 CLSID 清單

可用於 FileOpenDialog、FileSaveDialog 或 FileSelectFolder 等函數。

此表的資料來自 Online Security > Windows Tips & Tricks

注意：這些值並非都能適用於上面提到的 AutoIt 函數。

範例： FileSelectFolder ("請選擇一個資料夾", "::{00000000-1080-F9E5-6311-4162E05A6BEE}", 1)

資料夾 | 參數
系統管理工具 | "::{D20EA4E1-3957-11d2-A40B-0C5020524153}"
公事包 | "::{85BBD92O-42A0-1O69-A2E4-08002B30309D}"
控制台 | "::{21EC2O2O-3AEA-1O69-A2DD-08002b30309d}"
字型 | "::{D20EA4E1-3957-11d2-A40B-0C5020524152}"
歷史 | "::{FF393560-C2A7-11CF-BFF4-444553540000}"
收件匣 | "::{00020D75-0000-0000-C000-000000000046}"
Microsoft Network | "::{00028B00-0000-0000-C000-000000000046}"
我的電腦 | "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
我的檔案 | "::{450D8FBA-AD25-11D0-98A8-0800361B1103}"
網路芳鄰 | "::{208D2C60-3AEA-1069-A2D7-08002B30309D}"
網路電腦 (搜尋) | "::{1f4de370-d627-11d1-ba4f-00a0c91eedba}"
網際網路 | "::{7007ACC7-3202-11D1-AAD2-00805FC1270E}"
印表機和傳真 | "::{2227A280-3AEA-1069-A2DE-08002B30309D}"
可執行資料夾 | "::{7be9d83c-a729-4d97-b5a7-1b7313c39e0a}"
資源回收筒 | "::{645FF040-5081-101B-9F08-00AA002F954E}"
掃瞄器和數位相機 | "::{E211B736-43FD-11D1-9EFB-0000F8757FCD}"
排定的工作 | "::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}"
開始選單資料夾 | "::{48e7caab-b918-4e58-a94d-505519c795dc}"
IE 或網路暫存資料夾 | "::{7BD29E00-76C1-11CF-9DD0-00A0C9034933}"
Web 資料夾 | "::{BDEADF00-C265-11d0-BCED-00A0C90AB50F}"


GUI 控制項類型

本頁列出所有用於視窗的通用及進階類型，同時還列出了用於控制項的類型。這些能作為「類型 (style)」和/或「進階類型 (exStyle)」參數用於大部分的 GUI 函數中。要使用這些值，必須在每個資料段最頂端使用 #include 把檔案包含到您的腳本中。

注意：下表給的「數值」僅供參考，為了使腳本的閱讀性更好您應該盡量使用這些類型的「名稱」。

通用類型 | 數值 | 詳細說明
預設/強制建立 GUI |  | $GUI_SS_DEFAULT_GUI 請檢視：GUICreate 函數部份。
$WS_BORDER | 0x00800000 | 建立一個細邊框視窗。
$WS_POPUP | 0x80000000 | 建立一個彈出式視窗。此類型不能和 WS_CHILD 同時使用。
$WS_CAPTION | 0x00C00000 | 建立一個有標題欄的視窗（內含 WS_BORDER 類型） 。/td>
$WS_CLIPCHILDREN | 0x02000000 | 當在主視窗內繪圖時，排除次視窗區域。在建立主視窗時將使用此類型。
$WS_CLIPSIBLINGS | 0x04000000 | 使視窗排除次視窗之間的相對區域；也就是說，當某個特定的次視窗接受到 WM_PAINT 訊息時，有 WS_CLIPSIBLINGS 類型的視窗將別住所有重疊的次視窗超過區域的部分一起更新。如果沒有使用 WS_CLIPSIBLINGS 並與次視窗重疊，當在一個次視窗的用戶區繪圖時，可能會繪圖到鄰近的次視窗用戶區。只能與 WS_CHILD 一起使用。
$WS_DISABLED | 0x08000000 | 建立一個起始狀態為不可用的視窗。
$WS_DLGFRAME | 0x00400000 | 建立一個有邊框的視窗。
$WS_HSCROLL | 0x00100000 | 建立一個有水平捲軸的視窗。
$WS_MAXIMIZE | 0x01000000 | 建立一個起始狀態為最大化的視窗。
$WS_MAXIMIZEBOX | 0x00010000 | 建立一個有最大化按鈕的視窗。不能和 WS_EX_CONTEXTHELP 同時使用。而且必須新增 WS_SYSMENU 類型。
$WS_MINIMIZE | 0x20000000 | 建立一個起始狀態為最小化的視窗。
$WS_MINIMIZEBOX | 0x00020000 | 建立一個有最小化按鈕的視窗。不能和 WS_EX_CONTEXTHELP 同時使用。而且必須新增 WS_SYSMENU 類型。
$WS_OVERLAPPED | 0x00000000 | 建立一個重疊的視窗。重疊的視窗有標題欄和邊框。和 WS_TILED 類型相同。
$WS_OVERLAPPEDWINDOW | 0x00CF0000 | 建立一個有 WS_OVERLAPPED、WS_CAPTION、WS_SYSMENU、WS_THICKFRAME、WS_MINIMIZEBOX 以及WS_MAXIMIZEBOX 等類型的重疊視窗。和 WS_TILEDWINDOW 類型相同。
$WS_POPUPWINDOW | 0x80880000 | 建立一個有 WS_BORDER、WS_POPUP 以及 WS_SYSMENU 類型的彈出式視窗。為使視窗的選單可見必須新增 WS_CAPTION 和 WS_POPUPWINDOW 類型。
$WS_SIZEBOX | 0x00040000 | 建立一個可調整邊框的視窗。和 WS_THICKFRAME 類型相同。
$WS_SYSMENU | 0x00080000 | 建立一個標題欄上有視窗選單的視窗。必須指定 WS_CAPTION 類型。
$WS_THICKFRAME | 0x00040000 | 建立一個可調整邊框的視窗。和 WS_SIZEBOX 類型相同。
$WS_VSCROLL | 0x00200000 | 建立一個有垂直捲軸的視窗。
$WS_VISIBLE | 0x10000000 | 建立一個起始狀態為可見的視窗。
$WS_CHILD | 0x40000000 | 建立一個次視窗。有此類型的視窗不能有選單欄。此類型不能和 WS_POPUP 類型同時使用。
$WS_GROUP | 0x00020000 | 指定控制項群組的第一個控制項。控制項群組由第一個控制項和其後定義的所有控制項組成，一直到下一個控制項有 WS_GROUP 類型為止。/td>
$WS_TABSTOP | 0x00010000 | 使控制項具有 tabstop，讓使用者能按下 Tab 鍵在對話框的各個（具有 tabstop 的）控制項間切換（以選擇控制項）。
$DS_MODALFRAME | 0x00000080 | 建立一個有模式對話框框架的視窗，在指定了 WS_CAPTION 和 WS_SYSMENU 類型後還可以讓視窗有標題欄和視窗選單 。
$DS_SETFOREGROUND | 0x00000200 | 此類型對模式對話框比較有用，它能讓使用者立即注意到此對話框，而不管它的主屬視窗是否活動（當前）視窗。
$DS_CONTEXTHELP | 0x00002000 | 使對話框的標題欄上顯示一個問號按鈕。此類型不能和 WS_MAXIMIZEBOX 或 WS_MINIMIZEBOX 類型同時使用。和WS_EX_CONTEXTHELP 進階類型相同。

通用進階類型 | 數值 | 詳細說明
 |  | #include <WindowsConstants.au3>
$WS_EX_ACCEPTFILES | 0x00000010 | 允許（使用者）利用拖放讓被建立的 GUI 視窗中的編輯框/輸入控制項接受檔案名稱。該控制項也必須具有 $GUI_ACCEPTFILES 狀態（由 GUICtrlSetState 設定）。
$WS_EX_APPWINDOW | 0x00040000 | 當視窗可見時將一個頂層視窗放到工作列上。
$WS_EX_CLIENTEDGE | 0x00000200 | 使視窗有凹陷邊框。
$WS_EX_CONTEXTHELP | 0x00000400 | 使視窗標題欄有一個問號，不能和 WS_MAXIMIZEBOX 或 WS_MINIMIZEBOX 同時使用。
$WS_EX_DLGMODALFRAME | 0x00000001 | 建立一個有雙層邊框的視窗；對這種視窗還可以在建立時利用在類型參數中指定 WS_CAPTION 類型使其有標題欄（可選）。
$WS_EX_MDICHILD | 0x00000040 | 建立一個可由主視窗移除的次視窗（模擬一個沒被模擬出最大化/最小化的 MDI 多檔案界面）。
$WS_EX_OVERLAPPEDWINDOW | 0x00000300 | 相當於 WS_EX_CLIENTEDGE 和 WS_EX_WINDOWEDGE 類型的組合。
$WS_EX_STATICEDGE | 0x00020000 | 建立一個有 3D 邊框類型的視窗，一般用於不接受使用者輸入的項目。
$WS_EX_TOPMOST | 0x00000008 | 使有此類型的視窗放置在所有非頂層視窗之上，而且即使在該視窗失去啟動狀態時還總是保持在它們之上。
$WS_EX_TRANSPARENT | 0x00000020 | 該視窗將透明顯示，因為在它下方的同屬視窗已被重繪。
$WS_EX_TOOLWINDOW | 0x00000080 | 建立一個工具視窗；也即，一個一般用作浮動工具列的視窗。工具視窗的標題欄比普通標題欄要短，而且它的視窗標題使用更小的字型。工具視窗在工作列上不顯示按鈕，使用者按下快速鍵 Alt+Tab 後在彈出的對話框中也不會顯示它的圖示。如果一個工具視窗擁有系統選單，那麼它的圖示不會在其標題欄上顯示出來。不過，您可以按下快速鍵 Alt+空格 來顯示它的系統選單。
$WS_EX_WINDOWEDGE | 0x00000100 | 使視窗有凸起邊框。
$WS_EX_LAYERED | 0x00080000 | 建立一個分層視窗。注意，此類型不能用於次視窗。
$GUI_WS_EX_PARENTDRAG | 0x00100000 | 選擇某項時該項及其所有子項目將被高亮顯示。

複選框類型 (Checkbox) | 數值 | 詳細說明
 |  | #include <ButtonConstants.au3>
Default/forced |  | 請檢視：GUICtrlCreateCheckbox 函數部份。
$BS_3STATE | 0x0005 | 建立一個內可同時選取及取消勾選項目的複選框，選擇項目在不能使用時將顯示為灰色不可選狀態。
$BS_AUTO3STATE | 0x0006 | 建立一個有三種狀態的複選框，使用者每次點選會在選擇、不可用、取消勾選狀態間循環切換。
$BS_AUTOCHECKBOX | 0x0003 | 建立一個可勾選、不勾選兩種狀態的複選框，當使用者每次點選會於兩種狀態中切換。
$BS_CHECKBOX | 0x0002 | 建立一個小型、空白、並於右方顯示籤頁的複選框，框體左方的顯示文字可以跟 BS_RIGHTBUTTON 類型與此旗標組合使用。
$BS_LEFT | 0x0100 | 在複選框右方建立文字靠左對齊的長方形按鈕。
$BS_PUSHLIKE | 0x1000 | 建立一個按鈕 (如一般複選框、三種狀態複選框、或單選按鈕)。外觀及動作與普通按鈕無異，當未按下時該按鈕會凸起，若按下後則凹下。
$BS_RIGHT | 0x0200 | 在複選框右方建立文字靠右對齊的長方形按鈕。
$BS_RIGHTBUTTON | 0x0020 | 在矩形按鈕右方，放置一個長方形複選框。
$BS_GROUPBOX | 0x0007 | 建立一個矩形區域並群組化其它按鈕。任何在此矩形區域內被相關的文字，均於左上方顯示。
$BS_AUTORADIOBUTTON | 0x0009 | 如同一個單選按鈕，差別在於 ─ 當有使用者選擇時此按鈕時會自動高亮顯示，而同群組區域的其它按鈕則會移除其選取狀態。

按鈕類型 (Push Button) | 數值 | 詳細說明
 |  | #include <ButtonConstants.au3>
Default/forced |  | 請檢視：GUICtrlCreateButton, GUICtrlCreateCheckbox, GUICtrlCreateRadio 函數部份。
$BS_BOTTOM | 0x0800 | 在矩形按鈕底下放置文字。
$BS_CENTER | 0x0300 | 將矩形按鈕的文字水平置中對齊。
$BS_DEFPUSHBUTTON | 0x0001 | 建立一個黑邊框按鈕，若該按鈕在對話框中，使用者可以用 ENTER 鍵按下選擇的按鈕，該事件發生條件為該按鈕不能有輸入焦點。此類型讓使用者可以快速選取大部份選項或預設按鈕。
$BS_MULTILINE | 0x2000 | 當矩形按鈕內的文字過長超過單行所能容納的範圍，則換行顯示並自動調整適當大小。
$BS_TOP | 0x0400 | 在矩形按鈕頂端放置文字。
$BS_VCENTER | 0x0C00 | 將矩形按鈕內的文字垂直置中。
$BS_ICON | 0x0040 | 指定按鈕顯示為一個圖示。
$BS_BITMAP | 0x0080 | 指定按鈕顯示為一個點陣圖。
$BS_FLAT | 0x8000 | 指定按鈕以 2D 顯示，它不能使用預設的陰影遮罩來建立一個 3D 影像。
$BS_NOTIFY | 0x4000 | 開啟一個傳送 BN_KILLFOCUS 和 BN_SETFOCUS 通知訊息給主視窗的按鈕。請注意按鈕基本上，不論它是否具備該類型都會傳送 BN_CLICKED 訊息的；若要取得 BN_DBLCLK 訊息，該按鈕須有 BS_RADIOBUTTON 或 BS_OWNERDRAW 的類型。

下拉式選單類型 (Combo) | 數值 | 詳細說明
 |  | #include <ComboConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_COMBO 請檢視：GUICtrlCreateCombo 函數部份。
$CBS_AUTOHSCROLL | 0x0040 | 當使用者在編輯區內輸入字元，自動將捲軸朝右捲動。若此類型未設定，其文字只能在區域範圍內輸入。
$CBS_DISABLENOSCROLL | 0x0800 | 當清單顯示框無足夠的空間以顯示內容時，則自動啟用垂直捲軸。若無設定此類型，當清單內容空間不足則捲軸仍然是隱藏的。
$CBS_DROPDOWN | 0x0002 | 預設只會顯示於編輯控制項上面，使用者可以選擇某圖示到下個編輯區，以顯示清單顯示框。
$CBS_DROPDOWNLIST | 0x0003 | 顯示目前清單框內可見的文字選擇範圍。
$CBS_LOWERCASE | 0x4000 | 將下拉式選單編輯控制框內輸入的小寫文字轉換為大寫。
$CBS_NOINTEGRALHEIGHT | 0x0400 | 指定當建立下拉式選單時，讓程式將它調整至設立的適當大小。通常 Windows CE 會調整下拉式選單大小讓部份項目不會顯示出來。
$CBS_OEMCONVERT | 0x0080 | 將下拉式選單編輯框內的輸入文字從 Windows CE 字元集轉換為 OEM 字元集，然後返回 Windows CE 字集。此類型對於內含檔案名稱的下拉式選單是最有用的，但它只能套用在以 CBS_DROPDOWN 類型建立的選擇項目中。
$CBS_SIMPLE | 0x0001 | 全部顯示清單內的內容。當前選擇的清單內容會於編輯區內顯示。
$CBS_SORT | 0x0100 | 照順序排序清單框內輸入的文字。
$CBS_UPPERCASE | 0x2000 | 將下拉式選單編輯控制框內輸入的大寫文字轉換為小寫。

清單類型 (List) | 數值 | 詳細說明
 |  | #include <ListboxConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_LIST 請檢視：GUICtrlCreateList 函數部份。
$LBS_DISABLENOSCROLL | 0x1000 | 當清單顯示框無足夠的空間以顯示內容時，則自動啟用垂直捲軸。若無設定此類型，當清單內容空間不足則捲軸仍然是隱藏的。
$LBS_NOINTEGRALHEIGHT | 0x0100 | 指定當建立清單框時，讓程式將它調整至設立的適當大小。
$LBS_NOSEL | 0x4000 | 設定讓使用可以檢視清單字串但不允許選取項目。
$LBS_NOTIFY | 0x0001 | 當使用者點選或點按兩下清單內的某個字串時，通知主視窗。
$LBS_SORT | 0x0002 | 照字母順序排序清單內的文字。
$LBS_STANDARD | 0xA00003 | 照字母順序排序清單內的文字。當使用者點選或點按兩下某個字串時，主視窗會收到輸入訊息，而且所有的清單視窗都是有邊緣的。 (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
$LBS_USETABSTOPS | 0x0080 | 讓清單框在展開字串時，啟用識別並延伸展開籤頁字元。預設籤頁位置是 32 個對話框單位，而一個對話框單位就是目前對話框原始寬度的１／４大小。

編輯/輸入類型 (Edit/Input) | 數值 | 詳細說明
 |  | #include <EditConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_EDIT, $GUI_SS_DEFAULT_INPUT 請檢視：GUICtrlCreateEdit 或 GUICtrlCreateInput 函數部份。
$ES_AUTOHSCROLL | 0x0080 | 當使用者在最後一行輸入字元時，自動以 10 個字元長度向右捲動文字。而在使用者按下 ENTER 鍵分段後，控制捲軸內的文字會自動返回第一行。
$ES_AUTOVSCROLL | 0x0040 | 當使用者在最後一行按下 ENTER 鍵後，自動往上捲動一頁文字。
$ES_CENTER | 0x0001 | 將多行編輯區內的文字置中。
$ES_LOWERCASE | 0x0010 | 當他們於編輯區內輸入文字時，自動轉換所有字元為小寫。
$ES_NOHIDESEL | 0x0100 | 反向編輯區內的預設動作。預設動作是控制項無輸入焦點時隱藏選取區域，而當控制項收到輸入焦點後則反向選取區域。若您指定了 ES_NOHIDESEL，那麼選取的文字將會被反向顯示，即使該控制項沒有焦點也是一樣。
$ES_NUMBER | 0x2000 | 僅允許在編輯區內輸入數字。
$ES_OEMCONVERT | 0x0400 | 此類型對內含檔名的編輯控制項最好用。
$ES_MULTILINE | 0x0004 | 指定用一個多行編輯控制區。預設是單行編輯控制。
$ES_PASSWORD | 0x0020 | 讓編輯區內輸入的每個字母皆以星號 (*) 顯示。
$ES_READONLY | 0x0800 | 防止使用者輸入或修改編輯區內的文字。
$ES_RIGHT | 0x0002 | 將編輯區內多行文字靠右對齊。
$ES_UPPERCASE | 0x0008 | 當他們於編輯區內輸入文字時，自動轉換所有字元為大寫。
$ES_WANTRETURN | 0x1000 | 設定當使用者在對話框多行文字編輯區內，按下 ENTER 鍵打算輸入時，將游標返回插入狀態。若您未指用此類型，則於對話框上按 ENTER 鍵後的動作是預設直接按下按鈕，此類型對單行編輯控制項是無效的。

進度列類型 (Progress Bar) | 數值 | 詳細說明
 |  | #include <ProgressConstants.au3>
$PBS_SMOOTH | 0x01 | 將進度列以漸層進度顯示，取代傳統的分段模式。
$PBS_VERTICAL | 0x04 | 顯示從下往上跑的垂直進度列。

調整控制類型 (Up-down) | 數值 | 詳細說明
 |  | #include <UpdownConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_UPDOWN 請檢視：GUICtrlCreateUpdown 函數部份。
$UDS_ALIGNLEFT | 0x08 | 於次視窗邊緣 (buddy window)左側放置調整控制項(Up-down 與捲軸不同)。次視窗會被移至右側且縮短寬度，以騰出空間來容納調整控制項寬度。
$UDS_ALIGNRIGHT | 0x04 | 於次視窗邊緣右側放置調整控制項。次視窗會被縮短寬度，以騰出空間來容納調整控制項寬度。
$UDS_ARROWKEYS | 0x20 | 讓調整控制項能處理鍵盤的 UP ARROW 和 DOWN ARROW 上下鍵訊號。
$UDS_HORZ | 0x40 | 將調整控制項方向改為左、右，取代上、下的方向。
$UDS_NOTHOUSANDS | 0x80 | 禁止在每三個小數點之間插入一個萬用字元。
$UDS_WRAP | 0x01 | 讓控制項能不受開始或結束的範圍限制，任意增加或減少調整大小。

標籤/靜態視窗類型 (Label/Static) | 數值 | 詳細說明
 |  | #include <StaticConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_LABEL, $GUI_SS_DEFAULT_ICON, $GUI_SS_DEFAULT_PIC 請檢視：GUICtrlCreateLabel, GUICtrlCreateIcon, GUICtrlCreatePic 函數部份。
$SS_BLACKFRAME | 0x07 | 設定某個框體色彩與視窗方框相同的視窗，此色彩預設模式是黑色的。
$SS_BLACKRECT | 0x04 | 設定以目前視窗邊框色彩填滿矩形區域，此色彩預設模式是黑色的。
$SS_CENTER | 0x01 | 設定一個簡單，且將錯誤值文字置中的矩形區域。控制項會自動將最後一行的文字換行，並置中啟始於下一段的第一個位置。
$SS_CENTERIMAGE | 0x0200 | 設定一個有 SS_BITMAP 類型的靜態視窗元件於正中央位置，且會記住您控制項的調整大小。視窗的四個角落會做調整以容納新的點陣圖，若點陣圖尺寸小於控制用戶區，則會在點陣圖左上角補插點，以填滿剩餘的部份。此類型可用於僅帶一行文字的靜態視窗。 Microsoft Windows XP：在某情況下，不會讓部份未用到的控制區域，被系統以點陣圖或圖示左上角之像素色彩給填滿，部份未用到的控制項會保持背景色。
$SS_ETCHEDFRAME | 0x12 | 使用 EDGE_ETCHED 方框類型來描繪靜態視窗。
$SS_ETCHEDHORZ | 0x10 | 使用 EDGE_ETCHED 邊框類型來描繪靜態視窗上下邊框。
$SS_ETCHEDVERT | 0x11 | 使用 EDGE_ETCHED 邊框類型來描繪靜態視窗左右邊框。
$SS_GRAYFRAME | 0x08 | 設定一個色彩與螢幕背景色 (桌面) 相同的方框，此色彩預設模式是灰色的。
$SS_GRAYRECT | 0x05 | 設定一個以目前螢幕背景色填滿的矩形區域，此色彩預設模式是灰色的。
$SS_LEFT | 0x0000 | 設定在區域內建立一個簡單且文字靠左對齊的矩形區塊。該文字在顯示前已做過排版，行尾會自動換行到下一段靠左對齊的新行。至於長度超過控制項寬度的文字將會被截短。
$SS_LEFTNOWORDWRAP | 0x0C | 設定在區域內建立一個文字靠左對齊的矩形區塊。籤頁可以延伸調整但文字不能換行，行尾超出的部份將會被省略。
$SS_NOPREFIX | 0x80 | 禁止在控制文字內以任何連結符號 (&) 解譯，以加速行首字元。 一個應用程式可以跟其它類型，以 bitwise OR (|) 運算子組合 SS_NOPREFIX 使用。當檔案名稱或其它字串可能內含連結符號 (&)，且它又必須在一個無靜態視窗的對話框上顯示時，這個類型可是相當有用的。
$SS_NOTIFY | 0x0100 | 當使用者點選了控制項則傳送 STN_CLICKED 訊息給主視窗。
$SS_RIGHT | 0x0002 | 設定在區域內建立一個文字靠右對齊的矩形區塊。
$SS_RIGHTJUST | 0x0400 | 設定當 SS_BITMAP 或 SS_ICON 類型靜態視窗右下角若調整過大小，則記住固定之。只有頂端和左邊可以調整，以容納新點陣圖或圖示。
$SS_SIMPLE | 0x0B | 設定一個簡單，且顯示單行、文字靠左對齊的矩形區域。該文字行無法以任何模式修改或縮短，同樣地，若控制項已關閉，該文字也不會以灰色顯示。
$SS_SUNKEN | 0x1000 | 在靜態視窗四周邊緣描繪出半凹陷的樣式。
$SS_WHITEFRAME | 0x09 | 設定一個框體與視窗背景相同的方框，此色彩預設模式是白色的。
$SS_WHITERECT | 0x06 | 設定一個以視窗背景色填滿的矩形區域，此色彩預設模式是白色的。

籤頁類型 (Tab) | 數值 | 詳細說明
 |  | #include <TabConstants.au3>
Default/forced |  | 請檢視：GUICtrlCreateTab 函數部份。
$TCS_SCROLLOPPOSITE | 0x0001 | 當選取某個籤頁時，用不到的籤頁會捲動至控制項另一側。
$TCS_BOTTOM | 0x0002 | 籤頁於控制項下方顯示。此數值等於 TCS_RIGHT，若您使用的是 ComCtl32.dll V6 版，則該類型不能被支援。
$TCS_RIGHT | 0x0002 | 籤頁於控制項右側垂直顯示，該元件使用 TCS_VERTICAL 類型。此數值等於 TCS_BOTTOM，若您使用視覺化元件類型，則該類型不能被支援。
$TCS_MULTISELECT | 0x0004 | 當點選時可以利用按下 CTRL 鍵一次點選數個標籤頁。此類型必須與 TCS_BUTTONS 類型一同使用。
$TCS_FLATBUTTONS | 0x0008 | 選取的籤頁會以類似縮進背景的模式突顯，此時其它籤頁看起來就跟背景於同一個水平位置上。此類型對 TCS_BUTTONS 類型籤頁控制項才有效果。
$TCS_FORCEICONLEFT | 0x0010 | 圖示會與每個固定寬度籤頁靠左對齊並排顯示。此類型必須與 TCS_FIXEDWIDTH 類型一同使用。
$TCS_FORCELABELLEFT | 0x0020 | 標籤會與每個固定寬度籤頁靠左對齊並排顯示；這也是說，標籤會立即顯示於圖示右邊而不是置中。 此類型必須與 TCS_FIXEDWIDTH 類型一同使用，而且該類型裡頭還內含了 TCS_FORCEICONLEFT 類型。
$TCS_HOTTRACK | 0x0040 | 游標下的項目會自動以高亮顯示。
$TCS_VERTICAL | 0x0080 | 籤頁於控制項左側出現，且將其文字垂直顯示。此類型只在當使用 TCS_MULTILINE 類型才會有效。要讓它出現於控制項右側，一樣要使用 TCS_RIGHT 類型。若您使用的是 ComCtl32.dll V6 版，則該類型不能被支援。
$TCS_TABS | 0x0000 | 籤頁以原始形式出現，且會在顯示區四周描繪邊框，此類型為預設值。
$TCS_BUTTONS | 0x0100 | 籤頁以按鈕顯示，且在顯示區四周沒有邊框。
$TCS_SINGLELINE | 0x0000 | 僅顯示一行籤頁。使用者若有需要可以捲動檢視其它籤頁，此類型為預設值。
$TCS_MULTILINE | 0x0200 | 顯示數行籤頁，也就是一次顯示所有的籤頁。
$TCS_RIGHTJUSTIFY | 0x0000 | 每個籤頁寬度被減短，若是可以則每行籤頁會以整個寬度顯示。 此視窗類型會被忽略直到 TCS_MULTILINE 也被指定為止。
$TCS_FIXEDWIDTH | 0x0400 | 所有籤頁寬度相同，此類型不能與 TCS_RIGHTJUSTIFY 組合使用。
$TCS_RAGGEDRIGHT | 0x0800 | 籤頁行將不會自動延伸以填滿整個控制項寬度，此類型為預設值。
$TCS_FOCUSONBUTTONDOWN | 0x1000 | 籤頁在當被點選時會收到輸入焦點。
$TCS_OWNERDRAWFIXED | 0x2000 | 將描繪籤頁任務給主視窗處理。
$TCS_TOOLTIPS | 0x4000 | 有一個相關提示的籤頁控制項。
$TCS_FOCUSNEVER | 0x8000 | 籤頁在當被點選時不會收到輸入焦點。

AVI 崁入類型 (Avi Clip) | 數值 | 詳細說明
 |  | #include <AVIConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_AVI 請檢視：GUICtrlCreateAvi 函數部份。
$ACS_AUTOPLAY | 0x04 | 當 AVI 崁入元件開啟後不久，便立即播放動畫。
$ACS_CENTER | 0x01 | 將動畫元件視窗內的動畫置中。
$ACS_TRANSPARENT | 0x02 | 允許您將動畫背景與下方視窗色彩融合搭配，它會建立一個 "透明的" 背景 (預設值)。
$ACS_NONTRANSPARENT | 0x10 | 覆寫預設的 ACS_TRANSPARENT。

日期類型 (Date) | 數值 | 詳細說明
 |  | #include <DateTimeConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_DATE 請檢視：GUICtrlCreateDate 函數部份。
$DTS_UPDOWN | 0x01 | 在 DTP 控制項右邊放一個調整元件 (up-down) 以修改時間數值。該類型可以用來取代下拉式選單的月曆，此為預設類型。
$DTS_SHOWNONE | 0x02 | 開啟控制項允許「無日期」 將它當做有效日期。
$DTS_LONGDATEFORMAT | 0x04 | 以較長格式顯示日期。此類型預設的字串格式係依照 LOCALE_SLONGDATEFORMAT 定義決定，該格式會顯示輸出樣式像：「2009年 4月16日」。
$DTS_TIMEFORMAT | 0x09 | 顯示時間。此類型預設的字串格式係依照 LOCALE_STIMEFORMAT 定義決定，該格式會顯示輸出樣式像：「5:31:42 PM」。
$DTS_RIGHTALIGN | 0x20 | 靠右對齊的下拉式選單月曆替代靠左對齊，此為預設值。
$DTS_SHORTDATEFORMAT | 0x00 | 以較短格式顯示日期。此類型預設的字串格式係依照LOCALE_SSHORTDATE 定義決定，該格式會顯示輸出樣式像："4/19/96"。

月曆類型 (MonthCal) | 數值 | 詳細說明
 |  | #include <DateTimeConstants.au3>
Default/forced |  | 請檢視： GUICtrlCreateMonthCal 函數部份。
$MCS_NOTODAY | 0x10 | 月曆控制項將不會顯示 "今天" 日期於下方元件上。
$MCS_NOTODAYCIRCLE | 0x08 | 月曆控制項將不會轉動 "今天" 日期。
$MCS_WEEKNUMBERS | 0x04 | 月曆控制項將會顯示星期週數 (1-52) 於每個日期清單左側。「一週」的定義是第一週至少四天。

樹狀檢視類型 (TreeView) | 數值 | 詳細說明
 |  | #include <TreeviewConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_TREEVIEW 請檢視： GUICtrlCreateTreeView 函數部份。
$TVS_HASBUTTONS | 0x0001 | 在來源項目上顯示加號 (+) 和 減號 (-) 。使用者可以點選按鈕展開或關閉清單下的子項目，要在樹狀檢視清單根目錄上內含該顯示項目的按鈕，必須指用 TVS_LINESATROOT 類型。
$TVS_HASLINES | 0x0002 | 顯示使用者於該項目的層次及行列位置。
$TVS_LINESATROOT | 0x0004 | 連結至樹狀檢視清單根目錄的使用者所在行列項目。此數值在當 TVS_HASLINES 未被指定時會被忽略。
$TVS_DISABLEDRAGDROP | 0x0010 | 禁止樹狀檢視控制項傳送 TVN_BEGINDRAG 通知訊息。
$TVS_SHOWSELALWAYS | 0x0020 | 讓樹狀檢視控制項在無焦點時，亦保留所選項目的選擇狀態。
$TVS_RTLREADING | 0x0040 | 一般上視窗顯示的文字為靠左對齊 (LTR)。視窗可以被 映射 以顯示從右至左 (RTL) 閱讀的語言如 Hebrew 或 Arabic (希伯來文或阿拉伯文)，通常樹狀檢視文字的方向與主視窗是一致的。若設定了 TVS_RTLREADING，則於主視窗內的樹狀檢視文字會以相反方向列出供人閱讀。
$TVS_NOTOOLTIPS | 0x0080 | 不支援提示的樹狀檢視控制項。
$TVS_CHECKBOXES | 0x0100 |
$TVS_TRACKSELECT | 0x0200 | 開啟樹狀檢視控制項內的「熱點追蹤 (Hot track)」功能。
$TVS_SINGLEEXPAND | 0x0400 | 當此類型開啟時，會變更樹狀檢視的選取狀態，項目在選擇時會展開，反之未選取則會自動關閉收起。若使用滑鼠單選選擇的項目且該目標已關閉，它會自行展開。而若使用者按住 CTRL 鍵選擇某個項目，之後即使該目標不在選擇狀態，也不會被關閉。
$TVS_FULLROWSELECT | 0x1000 | 開啟樹狀檢視內的整行選擇功能。被整行選擇的項目會被高亮突顯，且在該行任意位置上點選都會將它選取。此類型不能與 TVS_HASLINES 類型結合一併使用。
$TVS_NOSCROLL | 0x2000 | 關閉控制項的水平捲軸，此控制項將不會顯示任何水平捲軸列。
$TVS_NONEVENHEIGHT | 0x4000 | 可以設定該項目高度為帶 TVM_SETITEMHEIGHT 訊號的奇數高度。預設值上，該項目的高度必須為偶數。

滑動軸類型 (Slider) | 數值 | 詳細說明
 |  | #include <SliderConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_SLIDER 請檢視： GUICtrlCreateSlider 函數部份。
$TBS_AUTOTICKS | 0x0001 | 利用 TBM_SETRANGE 訊號，新增追蹤列滑桿 (TrackBar) 範圍的刻度標記。
$TBS_BOTH | 0x0008 | 在追蹤列滑桿 (TrackBar) 兩側置入刻度標記。
$TBS_BOTTOM | 0x0000 | 在某個水平追蹤列滑桿 (TrackBar) 置入刻度標記。
$TBS_HORZ | 0x0000 | 設定一個水平追蹤列滑桿 (TrackBar) ，此為預設值。
$TBS_VERT | 0x0002 | 在垂直追蹤列滑桿 (TrackBar) 左側置入刻度標記。
$TBS_NOTHUMB | 0x0080 | 設定 TrackBar 無滑動軸 (slider)。
$TBS_NOTICKS | 0x0010 | 設定無刻度標記的追蹤列滑桿 (TrackBar)。
$TBS_LEFT | 0x0004 | 在垂直追蹤列滑桿 (TrackBar) 左側置入刻度標記。
$TBS_RIGHT | 0x0000 | 在垂直追蹤列滑桿 (TrackBar) 右側置入刻度標記。
$TBS_TOP | 0x0004 | 在水平追蹤列滑桿 (TrackBar) 頂端置入刻度標記。

檢視清單類型 (ListView) | 數值 | 詳細說明
 |  | #include <ListviewConstants.au3>
Default/forced |  | $GUI_SS_DEFAULT_LISTVIEW 請檢視： GUICtrlCreateListView 函數部份。
$LVS_ICON | 0x0000 | 此類型可設定圖示檢視。
$LVS_REPORT | 0x0001 | 此類型可設定報告檢視。
$LVS_SMALLICON | 0x0002 | 此類型可設定小圖示檢視。
$LVS_LIST | 0x0003 | 此類型可設定清單檢視。
$LVS_EDITLABELS | 0x0200 | 項目文字可以立即編輯。
$LVS_NOCOLUMNHEADER | 0x4000 | 欄位標題不會於報告檢視區中顯示。預設值上，欄位會在報告檢視區上顯示標題。
$LVS_NOSORTHEADER | 0x8000 | 欄位標題不具備按鈕功能。此類型可以用在報告檢視區中，當選取某欄位標題不會有任何動作，例如排序。
$LVS_SINGLESEL | 0x0004 | 每次只能選取一個項目。
$LVS_SHOWSELALWAYS | 0x0008 | 此選擇類型若有設定的話，不論如何都一定會顯示出來，即使控制項無焦點亦然。
$LVS_SORTASCENDING | 0x0010 | 依字母遞增排序項目內的索引。
$LVS_SORTDESCENDING | 0x0020 | 依字母遞減排序項目內的索引。
$LVS_NOLABELWRAP | 0x0080 | 項目文字會於圖示檢視區單行上顯示。預設值上，圖示檢視區內的項目文字是可以換行的。

進階檢視清單類型 (ListView Extended) | 數值 | 詳細說明
 |  | #include <ListviewConstants.au3>
$LVS_EX_FULLROWSELECT | 0x00000020 | 當選擇了某個項目，該項目及其下的子項目會一同被高亮。
$LVS_EX_GRIDLINES | 0x00000001 | 顯示項目及子項目的格線。
$LVS_EX_HEADERDRAGDROP | 0x00000010 | 開啟即時拖曳到檢視清單內便重新排序欄位功能。
$LVS_EX_TRACKSELECT | 0x00000008 | 開啟在檢視清單內「熱點追蹤選取」(Hot track selection) 的功能。「熱點追蹤選取」意指當滑鼠移至該項目上面停留一段時間後，便自動選取它們。
$LVS_EX_CHECKBOXES | 0x00000004 | 開啟在檢視清單內檢查方框項目的功能。
$LVS_EX_BORDERSELECT | 0x00008000 | 若此類型被設定，則當選擇了某項目時，會以該項目鄰近色彩突顯而不是高亮顯示。
$LVS_EX_DOUBLEBUFFER | 0x00010000 |
$LVS_EX_FLATSB | 0x00000100 | 開啟檢視清單的水平捲軸。
$LVS_EX_MULTIWORKAREAS | 0x00002000 |
$LVS_EX_SNAPTOGRID | 0x00080000 |
$LVS_EX_SUBITEMIMAGES | 0x00000002 | 允許影像為子項目做顯示。


視窗標準字型

標準視窗字型

標準清單取得頁面：Standard Windows fonts

黃色高亮顯示的是建議字型

字型名稱 | Win95 | WinNT | Win98 | Win2000 | WinMe | WinXP | Vista
Abadi MT Condensed Light |  |  | x |  |  |  |
Arial | x | x | x | x | x | x | x
Arial Alternative Regular |  |  |  |  | x |  |
Arial Alternative Symbol |  |  |  |  | x |  |
Arial Black |  |  | x | x | x | x | x
Book Antiqua |  |  | x |  |  | x | x
Calibri |  |  |  |  |  |  | x
Calisto MT |  |  | x |  |  |  |
Cambria |  |  |  |  |  |  | x
Candara |  |  |  |  |  |  | x
Century Gothic |  |  | x |  |  |  |
Comic Sans MS |  |  | x | x | x |  |
Consolas |  |  |  |  |  |  | x
Constantias |  |  |  |  |  |  | x
Copperplate Gothic Bold |  |  | x |  |  |  |
Copperplate Gothic Light |  |  | x |  |  |  |
Corbel |  |  |  |  |  |  | x
Courier | x | x | x | x | x | x | x
Courier New | x | x | x | x | x | x | x
Estrangelo Edessa |  |  |  |  |  | x | x
Franklin Gothic Medium |  |  |  |  |  | x | x
Gautami |  |  |  |  |  | x | x
Georgia |  |  |  | x |  | x | x
Georgia Italic Impact |  |  |  |  |  | x |
Impact |  |  | x | x | x | x | x
Latha |  |  |  |  |  | x | x
Lucida Console |  | x | x | x | x | x | x
Lucida Handwriting Italic |  |  | x |  |  |  |
Lucida Sans Console |  |  |  |  |  | x | x
Lucida Sans Italic |  |  | x |  |  |  |
Lucida Sans Unicode |  |  | x | x |  | x | x
Marlett |  |  | x |  | x |  | x
Matisse ITC |  |  | x |  |  |  |
Modern | x | x | x | x |  |  |
Modern MS Sans Serif |  |  |  |  |  | x |
MS Sans Serif | x | x | x | x | x | x | x
MS Serif | x | x | x | x | x | x | x
Mv Boli |  |  |  |  |  | x | x
News Gothic MT |  |  | x |  |  |  |
OCR A Extended |  |  | x |  |  |  |
Palatino Linotype |  |  |  | x |  | x | x
Roman |  | x |  | x |  | x | x
Script |  | x |  | x |  | x | x
Sego Print |  |  |  |  |  |  | x
Sego Script |  |  |  |  |  |  | x
Sego UI |  |  |  |  |  |  | x
Small Fonts |  | x |  | x |  | x | x
Smallfonts | x |  | x |  | x |  |
Symbol | x | x | x | x | x | x | x
Tahoma |  |  | x | x | x | x | x
Tempus Sans ITC |  |  | x | x |  |  |
Times New Roman | x | x | x | x | x | x | x
Trebuchet |  |  |  | x | x | x | x
Tunga |  |  |  |  |  | x | x
Verdana |  |  | x | x | x | x | x
Webdings |  |  | x | x | x | x | x
Westminster |  |  | x |  | x | x |
Wingdings | x | x |  | x |  | x | x
WST_Czech |  |  |  |  |  | x |
WST_Engl |  |  |  |  |  | x |
WST_Fren |  |  |  |  |  | x |
WST_Germ |  |  |  |  |  | x |
WST_Ital |  |  |  |  |  | x |
WST_Span |  |  |  |  |  | x |
WST_Swed |  |  |  |  |  | x |


@OSLang 各國語言碼

這裡列出的是 @OSLang 取得的可能返回值（或字串）。

此表的資料從此頁面取得： Windows 2000 - List of Locale IDs and Language Groups。

注意：編碼中如有字母則這些字母可能是大寫的 (可見出處原文)

編碼 | 代表語言
0436 | 南非荷蘭語
041c | 阿爾巴尼亞語
0401 | 阿拉伯語（沙烏地阿拉伯）
0801 | 阿拉伯語（伊拉克）
0c01 | 阿拉伯語（埃及）
1001 | 阿拉伯語（利比亞）
1401 | 阿拉伯語（阿爾及利亞）
1801 | 阿拉伯語（摩洛哥）
1c01 | 阿拉伯語（突尼西亞）
2001 | 阿拉伯語（阿曼）
2401 | 阿拉伯語（葉門）
2801 | 阿拉伯語（敘利亞）
2c01 | 阿拉伯語（約旦）
3001 | 阿拉伯語（黎巴嫩）
3401 | 阿拉伯語（科威特）
3801 | 阿拉伯語（阿拉伯聯合大公國）
3c01 | 阿拉伯語（巴林）
4001 | 阿拉伯語（卡達）
042b | 亞美尼亞語
042c | 阿茲裡語（拉丁文）
082c | 阿茲裡語（古代斯拉夫語）
042d | 巴斯克語
0423 | 白俄羅斯
0402 | 保加利亞語
0403 | 加泰羅尼亞語
0404 | 中文（台灣）
0804 | 中文（中國）
0c04 | 中文（香港特別行政區）
1004 | 中文（新加坡）
1404 | 中文（澳門特別行政區）
041a | 克羅埃西亞語
0405 | 捷克語
0406 | 丹麥語
0413 | 荷蘭（標準）
0813 | 荷蘭（比利時）
0409 | 英語（美國）
0809 | 英語（英國）
0c09 | 英語（澳大利亞）
1009 | 英語（加拿大）
1409 | 英語（紐西蘭）
1809 | 英語（愛爾蘭）
1c09 | 英語（南非）
2009 | 英語（牙買加）
2409 | 英語（加勒比）
2809 | 英語（貝裡斯）
2c09 | 英語（千裡達）
3009 | 英語（辛巴威）
3409 | 英語（菲律賓）
0425 | 愛沙尼亞語
0438 | 法羅語
0429 | 波斯語
040b | 芬蘭語
040c | 法語（標準）
080c | 法語（比利時）
0c0c | 法語（加拿大）
100c | 法語（瑞士）
140c | 法語（盧森堡）
180c | 法語（摩洛哥）
0437 | 喬治亞語
0407 | 德語（標準）
0807 | 德語（瑞士）
0c07 | 德語（奧地利）
1007 | 德語（盧森堡）
1407 | 德語（列支敦斯登）
408 | 希臘語
040d | 希伯來語
0439 | 印度語
040e | 匈牙利語
040f | 冰島語
0421 | 印度尼西亞語
0410 | 義大利語（標準）
0810 | 義大利語（瑞士）
0411 | 日語
043f | 哈薩克語
0457 | 剛果語
0412 | 朝鮮語/韓語
0426 | 拉脫維亞語
0427 | 立陶宛語
042f | 馬其頓語
043e | 馬來語（馬來西亞）
083e | 馬來人（汶萊達魯薩蘭）
044e | 馬拉地語
0414 | 挪威語（Bokmal ─書面挪威語）
0814 | 挪威語（Nynorsk ─新挪威語）
0415 | 波蘭語
0416 | 葡萄牙語（巴西）
0816 | 葡萄牙語（標準）
0418 | 羅馬尼亞語
0419 | 俄語
044f | 梵語
081a | 塞爾維亞語（拉丁文）
0c1a | 塞爾維亞語（古代斯拉夫語）
041b | 斯洛伐克語
0424 | 斯洛維尼亞語
040a | 西班牙語（傳統）
080a | 西班牙語（墨西哥）
0c0a | 西班牙語（國際）
100a | 西班牙語（瓜地馬拉）
140a | 西班牙語（哥斯大黎加）
180a | 西班牙語（巴拿馬）
1c0a | 西班牙語（多明尼加共和國）
200a | 西班牙語（委內瑞拉）
240a | 西班牙語（哥倫比亞）
280a | 西班牙語（秘魯）
2c0a | 西班牙語（阿根廷）
300a | 西班牙語（厄瓜多爾）
340a | 西班牙語（智利）
380a | 西班牙語（烏拉圭）
3c0a | 西班牙語（巴拉圭）
400a | 西班牙語（玻利維亞）
440a | 西班牙語（薩爾瓦多）
480a | 西班牙語（巨集都拉斯）
4c0a | 西班牙語（尼加拉瓜）
500a | 西班牙語（波多黎各）
0441 | 斯瓦希裡語
041d | 瑞典語
081d | 瑞典語（芬蘭）
0449 | 坦米爾語
0444 | 韃靼語 (塔塔爾語)
041e | 泰語
041f | 土耳其語
0422 | 烏克蘭語
0420 | 烏爾都語
0443 | 烏茲別克語（拉丁文）
0843 | 烏茲別克語（古代斯拉夫語）
042a | 越南語

範例：

MsgBox(0, "您的系統語言：", _Language())

Func _Language()
Select
Case StringInStr("0413 0813", @OSLang)
Return "Dutch"

Case StringInStr("0409 0809 0c09 1009 1409 1809 1c09 2009 2409 2809 2c09 3009 3409", @OSLang)
Return "English"

Case StringInStr("040c 080c 0c0c 100c 140c 180c", @OSLang)
Return "French"

Case StringInStr("0407 0807 0c07 1007 1407", @OSLang)
Return "German"

Case StringInStr("0410 0810", @OSLang)
Return "Italian"

Case StringInStr("0414 0814", @OSLang)
Return "Norwegian"

Case StringInStr("0415", @OSLang)
Return "Polish"

Case StringInStr("0416 0816", @OSLang)
Return "Portuguese"

Case StringInStr("040a 080a 0c0a 100a 140a 180a 1c0a 200a 240a 280a 2c0a 300a 340a 380a 3c0a 400a 440a 480a 4c0a 500a", @OSLang)
Return "Spanish"

Case StringInStr("041d 081d", @OSLang)
Return "Swedish"

Case StringInStr("0404", @OSLang)
Return "正體中文(台灣)"

Case Else
Return "其它(無法直接以 @OSLang 辨識的語系)"

EndSelect
EndFunc


Send 按鍵清單

快速了解 Send ( "按鍵" [, 旗標] ) 指令。 ^ Ctrl ! Alt + Shift # Win (視窗鍵)

AutoIt 可以傳送所有的 ASCII 和 延伸 ASCII 字元 (0-255)，對於傳送 UNICODE 字元我們須使用 "ASC" 選項和欲傳送的字元編碼 (請見下表底端的{ASC})。

如要傳送 ASCII 數值 A (與按下數字區的 ALT+065 相同)：

Send("{ASC 065}")

(當使用 2 位元數字的 ASCII 碼時，您須使用前置 0，否則將使用舊版的 437 字碼頁)。

要傳送 UNICODE 字元請輸入字碼 (十進位或十六進位)，例如這是傳送一個中國字元：

Send("{ASC 2709}")

單一按鍵可重覆傳送，例如：

Send("{DEL 4}") ;按下 DEL 鍵 4 次
Send("{S 30}") ;傳送 30 個 "S" 字元
Send("+{TAB 4}) ;按下 SHIFT+TAB 4 次

要按住按鍵不放的話 (通常只對遊戲有用)：

Send("{a down}") ;按住 A 鍵不放
Send("{a up}") ;放開 A 鍵

如您要使用一個變數來指定重複傳送的次數，則試試：

$n = 4
Send("+{TAB " & $n & "}")

如您要傳送 ASCII 數值 A 四次，則試試：

$x = Chr(65)
Send("{" & $x & " 4}")

大部份筆記型電腦鍵盤上都有一個特殊的 Fn 鍵，此鍵無法被模擬出來。

請注意，將旗標參數設為 1 的話則以上的 "特殊訊號" 將被關閉，這個是在您從一個變數傳送某些複製的文字，並且要求該文字照寫入內容原封不動傳送時才有用。

Send 是非常有用的一個函數/指令，因為我們可用它來隨心所欲地駕馭視窗而無需使用滑鼠。

例如，先開啟資料夾選項 (在系統控制台) 並嘗試下列方式：

Send("{TAB}") | 瀏覽下一個控制項 (按鈕, 複選框checkbox, 等等)
Send("+{TAB}") | 瀏覽前一個控制項
Send("^{TAB}") | 瀏覽下一個視窗籤頁 (在標籤頁對話視窗上)
Send("^+{TAB}") | 瀏覽前一個視窗籤頁
Send("{SPACE}") | 可以使用來切換複選框或點選按鈕
Send("{+}") | 通常是選取複選框項目 (如它 "真的是" 複選框的話)
Send("{-}") | 通常是取消選取複選框
Send("{NumPadMult}") | 將 SysTreeView32 控制項的資料夾整個還原展開

您可以用 Alt-組合鍵 存取選單項目，也可以開啟記事本並嘗試下列方式：

Send("!f") | 傳送 Alt+f，這是記事本檔案選單的快速鍵，您還可試試其它字母！
Send("{DOWN}") | 移到下一筆選單
Send("{UP}") | 移到上一筆選單
Send("{LEFT}") | 往左移到新選單或展開子選單
Send("{RIGHT}") | 往右移到新選單或關閉子選單

請檢視 Windows 的說明及支援--按下 Win+F1-- 快速鍵的完整清單，如您還不太了解 Alt+F4, PrintScreen, Ctrl+C 等等的重要性可按一下開啟它。

Send 指令 (如旗標為零) | 敲擊按鍵結果
{!} | !
{#} | #
{+} | +
{^} | ^
{{} | {
{}} | }
{SPACE} | 空白鍵
{ENTER} | 主鍵盤區的 ENTER 鍵
{ALT} | ALT
{BACKSPACE} or {BS} | BACKSPACE (後退鍵)
{DELETE} or {DEL} | DELETE (刪除鍵)
{UP} | 向上箭頭
{DOWN} | 向下箭頭
{LEFT} | 向左箭頭
{RIGHT} | 向右箭頭
{HOME} | HOME
{END} | END
{ESCAPE} or {ESC} | ESCAPE
{INSERT} or {INS} | INS
{PGUP} | PageUp
{PGDN} | PageDown
{F1} - {F12} | 功能鍵
{TAB} | TAB
{PRINTSCREEN} | Print Screen (擷取螢幕鍵)
{LWIN} | 左視窗鍵
{RWIN} | 右視窗鍵
{NUMLOCK on} | NUMLOCK (開/關/切換)
{CAPSLOCK off} | CAPSLOCK (開/關/切換)
{SCROLLLOCK toggle} | SCROLLLOCK (開/關/切換)
{BREAK} | 為 Ctrl+Break 鍵
{PAUSE} | PAUSE (暫停鍵)
{NUMPAD0} - {NUMPAD9} | 數字鍵區的數字 0 ~ 9
{NUMPADMULT} | 數字鍵區的乘法
{NUMPADADD} | 數字鍵區的加法
{NUMPADSUB} | 數字鍵區的減法
{NUMPADDIV} | 數字鍵區的除法
{NUMPADDOT} | 數字鍵區的 . 符號
{NUMPADENTER} | 數字鍵區的 Enter 鍵
{APPSKEY} | Windows 應用程式鍵
{LALT} | 左 ALT 鍵
{RALT} | 右 ALT 鍵
{LCTRL} | 左 CTRL 鍵
{RCTRL} | 右 CTRL 鍵
{LSHIFT} | 左 Shift 鍵
{RSHIFT} | 右 Shift 鍵
{SLEEP} | 電腦休眠鍵
{ALTDOWN} | 按住 ALT 鍵直到 {ALTUP} 傳送
{SHIFTDOWN} | 按住 SHIFT 鍵直到 {SHIFTUP} 傳送
{CTRLDOWN} | 按住 CTRL 鍵直到 {CTRLUP} 傳送
{LWINDOWN} | 按住左視窗鍵直到 {LWINUP} 傳送
{RWINDOWN} | 按住右視窗鍵直到 {RWINUP} 傳送
{ASC nnnn} | 傳送 ALT+nnnn 組合鍵
{BROWSER_BACK} | 僅限 2000/XP：按下瀏覽器中的 "下一頁" 鍵
{BROWSER_FORWARD} | 僅限 2000/XP：按下瀏覽器中的 "前一頁" 鍵
{BROWSER_REFRESH} | 僅限 2000/XP：按下瀏覽器中的 "重新整理" 鍵
{BROWSER_STOP} | 僅限 2000/XP：按下瀏覽器中的 "停止" 鍵
{BROWSER_SEARCH} | 僅限 2000/XP：按下瀏覽器中的 "搜尋" 鍵
{BROWSER_FAVORITES} | 僅限 2000/XP：按下瀏覽器中的 "我的最愛" 鍵
{BROWSER_HOME} | 僅限 2000/XP：執行瀏覽器並跳往首頁
{VOLUME_MUTE} | 僅限 2000/XP：靜音
{VOLUME_DOWN} | 僅限 2000/XP：調低音量
{VOLUME_UP} | 僅限 2000/XP：增加音量
{MEDIA_NEXT} | 僅限 2000/XP：前往 Media Player 的下一個音訊
{MEDIA_PREV} | 僅限 2000/XP：前往 Media Player 的前一個音訊
{MEDIA_STOP} | 僅限 2000/XP：停止 Media Player
{MEDIA_PLAY_PAUSE} | 僅限 2000/XP：播放/暫停 Media Player
{LAUNCH_MAIL} | 僅限 2000/XP：執行 E-Mail 程式
{LAUNCH_MEDIA} | 僅限 2000/XP：執行 Media Player
{LAUNCH_APP1} | 僅限 2000/XP：執行使用者程式 1 (我的電腦)
{LAUNCH_APP2} | 僅限 2000/XP：執行使用者程式 2 (計數器)


視窗訊息碼

依名稱排序： 依代碼排序：
訊息 | 代碼 | 代碼 | 訊息
WM_ACTIVATE | 0x0006 | 0x0000 | WM_NULL
WM_ACTIVATEAPP | 0x001C | 0x0001 | WM_CREATE
WM_AFXFIRST | 0x0360 | 0x0002 | WM_DESTROY
WM_AFXLAST | 0x037F | 0x0003 | WM_MOVE
WM_APP | 0x8000 | 0x0005 | WM_SIZE
WM_APPCOMMAND | 0x0319 | 0x0006 | WM_ACTIVATE
WM_ASKCBFORMATNAME | 0x030C | 0x0007 | WM_SETFOCUS
WM_CANCELJOURNAL | 0x004B | 0x0008 | WM_KILLFOCUS
WM_CANCELMODE | 0x001F | 0x000A | WM_ENABLE
WM_CAPTURECHANGED | 0x0215 | 0x000B | WM_SETREDRAW
WM_CHANGECBCHAIN | 0x030D | 0x000C | WM_SETTEXT
WM_CHANGEUISTATE | 0x0127 | 0x000D | WM_GETTEXT
WM_CHAR | 0x0102 | 0x000E | WM_GETTEXTLENGTH
WM_CHARTOITEM | 0x002F | 0x000F | WM_PAINT
WM_CHILDACTIVATE | 0x0022 | 0x0010 | WM_CLOSE
WM_CLEAR | 0x0303 | 0x0011 | WM_QUERYENDSESSION
WM_CLOSE | 0x0010 | 0x0013 | WM_QUERYOPEN
WM_COMMAND | 0x0111 | 0x0016 | WM_ENDSESSION
WM_COMMNOTIFY | 0x0044 | 0x0012 | WM_QUIT
WM_COMPACTING | 0x0041 | 0x0014 | WM_ERASEBKGND
WM_COMPAREITEM | 0x0039 | 0x0015 | WM_SYSCOLORCHANGE
WM_CONTEXTMENU | 0x007B | 0x0018 | WM_SHOWWINDOW
WM_COPY | 0x0301 | 0x001A | WM_WININICHANGE
WM_COPYDATA | 0x004A | 0x001A | WM_SETTINGCHANGE
WM_CREATE | 0x0001 | 0x001B | WM_DEVMODECHANGE
WM_CTLCOLORBTN | 0x0135 | 0x001C | WM_ACTIVATEAPP
WM_CTLCOLORDLG | 0x0136 | 0x001D | WM_FONTCHANGE
WM_CTLCOLOREDIT | 0x0133 | 0x001E | WM_TIMECHANGE
WM_CTLCOLORLISTBOX | 0x0134 | 0x001F | WM_CANCELMODE
WM_CTLCOLORMSGBOX | 0x0132 | 0x0020 | WM_SETCURSOR
WM_CTLCOLORSCROLLBAR | 0x0137 | 0x0021 | WM_MOUSEACTIVATE
WM_CTLCOLORSTATIC | 0x0138 | 0x0022 | WM_CHILDACTIVATE
WM_CUT | 0x0300 | 0x0023 | WM_QUEUESYNC
WM_DEADCHAR | 0x0103 | 0x0024 | WM_GETMINMAXINFO
WM_DELETEITEM | 0x002D | 0x0026 | WM_PAINTICON
WM_DESTROY | 0x0002 | 0x0027 | WM_ICONERASEBKGND
WM_DESTROYCLIPBOARD | 0x0307 | 0x0028 | WM_NEXTDLGCTL
WM_DEVICECHANGE | 0x0219 | 0x002A | WM_SPOOLERSTATUS
WM_DEVMODECHANGE | 0x001B | 0x002B | WM_DRAWITEM
WM_DISPLAYCHANGE | 0x007E | 0x002C | WM_MEASUREITEM
WM_DRAWCLIPBOARD | 0x0308 | 0x002D | WM_DELETEITEM
WM_DRAWITEM | 0x002B | 0x002E | WM_VKEYTOITEM
WM_DROPFILES | 0x0233 | 0x002F | WM_CHARTOITEM
WM_ENABLE | 0x000A | 0x0030 | WM_SETFONT
WM_ENDSESSION | 0x0016 | 0x0031 | WM_GETFONT
WM_ENTERIDLE | 0x0121 | 0x0032 | WM_SETHOTKEY
WM_ENTERMENULOOP | 0x0211 | 0x0033 | WM_GETHOTKEY
WM_ENTERSIZEMOVE | 0x0231 | 0x0037 | WM_QUERYDRAGICON
WM_ERASEBKGND | 0x0014 | 0x0039 | WM_COMPAREITEM
WM_EXITMENULOOP | 0x0212 | 0x003D | WM_GETOBJECT
WM_EXITSIZEMOVE | 0x0232 | 0x0041 | WM_COMPACTING
WM_FONTCHANGE | 0x001D | 0x0044 | WM_COMMNOTIFY
WM_GETDLGCODE | 0x0087 | 0x0046 | WM_WINDOWPOSCHANGING
WM_GETFONT | 0x0031 | 0x0047 | WM_WINDOWPOSCHANGED
WM_GETHOTKEY | 0x0033 | 0x0048 | WM_POWER
WM_GETICON | 0x007F | 0x004A | WM_COPYDATA
WM_GETMINMAXINFO | 0x0024 | 0x004B | WM_CANCELJOURNAL
WM_GETOBJECT | 0x003D | 0x004E | WM_NOTIFY
WM_GETTEXT | 0x000D | 0x0050 | WM_INPUTLANGCHANGEREQUEST
WM_GETTEXTLENGTH | 0x000E | 0x0051 | WM_INPUTLANGCHANGE
WM_HANDHELDFIRST | 0x0358 | 0x0052 | WM_TCARD
WM_HANDHELDLAST | 0x035F | 0x0053 | WM_HELP
WM_HELP | 0x0053 | 0x0054 | WM_USERCHANGED
WM_HOTKEY | 0x0312 | 0x0055 | WM_NOTIFYFORMAT
WM_HSCROLL | 0x0114 | 0x007B | WM_CONTEXTMENU
WM_HSCROLLCLIPBOARD | 0x030E | 0x007C | WM_STYLECHANGING
WM_ICONERASEBKGND | 0x0027 | 0x007D | WM_STYLECHANGED
WM_IME_CHAR | 0x0286 | 0x007E | WM_DISPLAYCHANGE
WM_IME_COMPOSITION | 0x010F | 0x007F | WM_GETICON
WM_IME_COMPOSITIONFULL | 0x0284 | 0x0080 | WM_SETICON
WM_IME_CONTROL | 0x0283 | 0x0081 | WM_NCCREATE
WM_IME_ENDCOMPOSITION | 0x010E | 0x0082 | WM_NCDESTROY
WM_IME_KEYDOWN | 0x0290 | 0x0083 | WM_NCCALCSIZE
WM_IME_KEYLAST | 0x010F | 0x0084 | WM_NCHITTEST
WM_IME_KEYUP | 0x0291 | 0x0085 | WM_NCPAINT
WM_IME_NOTIFY | 0x0282 | 0x0086 | WM_NCACTIVATE
WM_IME_REQUEST | 0x0288 | 0x0087 | WM_GETDLGCODE
WM_IME_SELECT | 0x0285 | 0x0088 | WM_SYNCPAINT
WM_IME_SETCONTEXT | 0x0281 | 0x00A0 | WM_NCMOUSEMOVE
WM_IME_STARTCOMPOSITION | 0x010D | 0x00A1 | WM_NCLBUTTONDOWN
WM_INITDIALOG | 0x0110 | 0x00A2 | WM_NCLBUTTONUP
WM_INITMENU | 0x0116 | 0x00A3 | WM_NCLBUTTONDBLCLK
WM_INITMENUPOPUP | 0x0117 | 0x00A4 | WM_NCRBUTTONDOWN
WM_INPUT | 0x00FF | 0x00A5 | WM_NCRBUTTONUP
WM_INPUTLANGCHANGE | 0x0051 | 0x00A6 | WM_NCRBUTTONDBLCLK
WM_INPUTLANGCHANGEREQUEST | 0x0050 | 0x00A7 | WM_NCMBUTTONDOWN
WM_KEYDOWN | 0x0100 | 0x00A8 | WM_NCMBUTTONUP
WM_KEYFIRST | 0x0100 | 0x00A9 | WM_NCMBUTTONDBLCLK
WM_KEYLAST | 0x0108 | 0x00AB | WM_NCXBUTTONDOWN
WM_KEYLAST | 0x0109 | 0x00AC | WM_NCXBUTTONUP
WM_KEYUP | 0x0101 | 0x00AD | WM_NCXBUTTONDBLCLK
WM_KILLFOCUS | 0x0008 | 0x00FF | WM_INPUT
WM_LBUTTONDBLCLK | 0x0203 | 0x0100 | WM_KEYFIRST
WM_LBUTTONDOWN | 0x0201 | 0x0100 | WM_KEYDOWN
WM_LBUTTONUP | 0x0202 | 0x0101 | WM_KEYUP
WM_MBUTTONDBLCLK | 0x0209 | 0x0102 | WM_CHAR
WM_MBUTTONDOWN | 0x0207 | 0x0103 | WM_DEADCHAR
WM_MBUTTONUP | 0x0208 | 0x0104 | WM_SYSKEYDOWN
WM_MDIACTIVATE | 0x0222 | 0x0105 | WM_SYSKEYUP
WM_MDICASCADE | 0x0227 | 0x0106 | WM_SYSCHAR
WM_MDICREATE | 0x0220 | 0x0107 | WM_SYSDEADCHAR
WM_MDIDESTROY | 0x0221 | 0x0109 | WM_UNICHAR
WM_MDIGETACTIVE | 0x0229 | 0x0109 | WM_KEYLAST
WM_MDIICONARRANGE | 0x0228 | 0x0108 | WM_KEYLAST
WM_MDIMAXIMIZE | 0x0225 | 0x010D | WM_IME_STARTCOMPOSITION
WM_MDINEXT | 0x0224 | 0x010E | WM_IME_ENDCOMPOSITION
WM_MDIREFRESHMENU | 0x0234 | 0x010F | WM_IME_COMPOSITION
WM_MDIRESTORE | 0x0223 | 0x010F | WM_IME_KEYLAST
WM_MDISETMENU | 0x0230 | 0x0110 | WM_INITDIALOG
WM_MDITILE | 0x0226 | 0x0111 | WM_COMMAND
WM_MEASUREITEM | 0x002C | 0x0112 | WM_SYSCOMMAND
WM_MENUCHAR | 0x0120 | 0x0113 | WM_TIMER
WM_MENUCOMMAND | 0x0126 | 0x0114 | WM_HSCROLL
WM_MENUDRAG | 0x0123 | 0x0115 | WM_VSCROLL
WM_MENUGETOBJECT | 0x0124 | 0x0116 | WM_INITMENU
WM_MENURBUTTONUP | 0x0122 | 0x0117 | WM_INITMENUPOPUP
WM_MENUSELECT | 0x011F | 0x011F | WM_MENUSELECT
WM_MOUSEACTIVATE | 0x0021 | 0x0120 | WM_MENUCHAR
WM_MOUSEFIRST | 0x0200 | 0x0121 | WM_ENTERIDLE
WM_MOUSEHOVER | 0x02A1 | 0x0122 | WM_MENURBUTTONUP
WM_MOUSELAST(2K,XP,2k3) | 0x020D | 0x0123 | WM_MENUDRAG
WM_MOUSELAST(95) | 0x0209 | 0x0124 | WM_MENUGETOBJECT
WM_MOUSELAST(NT4,98) | 0x020A | 0x0125 | WM_UNINITMENUPOPUP
WM_MOUSELEAVE | 0x02A3 | 0x0126 | WM_MENUCOMMAND
WM_MOUSEMOVE | 0x0200 | 0x0127 | WM_CHANGEUISTATE
WM_MOUSEWHEEL | 0x020A | 0x0128 | WM_UPDATEUISTATE
WM_MOVE | 0x0003 | 0x0129 | WM_QUERYUISTATE
WM_MOVING | 0x0216 | 0x0132 | WM_CTLCOLORMSGBOX
WM_NCACTIVATE | 0x0086 | 0x0133 | WM_CTLCOLOREDIT
WM_NCCALCSIZE | 0x0083 | 0x0134 | WM_CTLCOLORLISTBOX
WM_NCCREATE | 0x0081 | 0x0135 | WM_CTLCOLORBTN
WM_NCDESTROY | 0x0082 | 0x0136 | WM_CTLCOLORDLG
WM_NCHITTEST | 0x0084 | 0x0137 | WM_CTLCOLORSCROLLBAR
WM_NCLBUTTONDBLCLK | 0x00A3 | 0x0138 | WM_CTLCOLORSTATIC
WM_NCLBUTTONDOWN | 0x00A1 | 0x0200 | WM_MOUSEFIRST
WM_NCLBUTTONUP | 0x00A2 | 0x0200 | WM_MOUSEMOVE
WM_NCMBUTTONDBLCLK | 0x00A9 | 0x0201 | WM_LBUTTONDOWN
WM_NCMBUTTONDOWN | 0x00A7 | 0x0202 | WM_LBUTTONUP
WM_NCMBUTTONUP | 0x00A8 | 0x0203 | WM_LBUTTONDBLCLK
WM_NCMOUSEHOVER | 0x02A0 | 0x0204 | WM_RBUTTONDOWN
WM_NCMOUSELEAVE | 0x02A2 | 0x0205 | WM_RBUTTONUP
WM_NCMOUSEMOVE | 0x00A0 | 0x0206 | WM_RBUTTONDBLCLK
WM_NCPAINT | 0x0085 | 0x0207 | WM_MBUTTONDOWN
WM_NCRBUTTONDBLCLK | 0x00A6 | 0x0208 | WM_MBUTTONUP
WM_NCRBUTTONDOWN | 0x00A4 | 0x0209 | WM_MBUTTONDBLCLK
WM_NCRBUTTONUP | 0x00A5 | 0x0209 | WM_MOUSELAST(95)
WM_NCXBUTTONDBLCLK | 0x00AD | 0x020A | WM_MOUSEWHEEL
WM_NCXBUTTONDOWN | 0x00AB | 0x020A | WM_MOUSELAST(NT4,98)
WM_NCXBUTTONUP | 0x00AC | 0x020B | WM_XBUTTONDOWN
WM_NEXTDLGCTL | 0x0028 | 0x020C | WM_XBUTTONUP
WM_NEXTMENU | 0x0213 | 0x020D | WM_XBUTTONDBLCLK
WM_NOTIFY | 0x004E | 0x020D | WM_MOUSELAST(2K,XP,2k3)
WM_NOTIFYFORMAT | 0x0055 | 0x0210 | WM_PARENTNOTIFY
WM_NULL | 0x0000 | 0x0211 | WM_ENTERMENULOOP
WM_PAINT | 0x000F | 0x0212 | WM_EXITMENULOOP
WM_PAINTCLIPBOARD | 0x0309 | 0x0213 | WM_NEXTMENU
WM_PAINTICON | 0x0026 | 0x0214 | WM_SIZING
WM_PALETTECHANGED | 0x0311 | 0x0215 | WM_CAPTURECHANGED
WM_PALETTEISCHANGING | 0x0310 | 0x0216 | WM_MOVING
WM_PARENTNOTIFY | 0x0210 | 0x0218 | WM_POWERBROADCAST
WM_PASTE | 0x0302 | 0x0219 | WM_DEVICECHANGE
WM_PENWINFIRST | 0x0380 | 0x0220 | WM_MDICREATE
WM_PENWINLAST | 0x038F | 0x0221 | WM_MDIDESTROY
WM_POWER | 0x0048 | 0x0222 | WM_MDIACTIVATE
WM_POWERBROADCAST | 0x0218 | 0x0223 | WM_MDIRESTORE
WM_PRINT | 0x0317 | 0x0224 | WM_MDINEXT
WM_PRINTCLIENT | 0x0318 | 0x0225 | WM_MDIMAXIMIZE
WM_QUERYDRAGICON | 0x0037 | 0x0226 | WM_MDITILE
WM_QUERYENDSESSION | 0x0011 | 0x0227 | WM_MDICASCADE
WM_QUERYNEWPALETTE | 0x030F | 0x0228 | WM_MDIICONARRANGE
WM_QUERYOPEN | 0x0013 | 0x0229 | WM_MDIGETACTIVE
WM_QUERYUISTATE | 0x0129 | 0x0230 | WM_MDISETMENU
WM_QUEUESYNC | 0x0023 | 0x0231 | WM_ENTERSIZEMOVE
WM_QUIT | 0x0012 | 0x0232 | WM_EXITSIZEMOVE
WM_RBUTTONDBLCLK | 0x0206 | 0x0233 | WM_DROPFILES
WM_RBUTTONDOWN | 0x0204 | 0x0234 | WM_MDIREFRESHMENU
WM_RBUTTONUP | 0x0205 | 0x0281 | WM_IME_SETCONTEXT
WM_RENDERALLFORMATS | 0x0306 | 0x0282 | WM_IME_NOTIFY
WM_RENDERFORMAT | 0x0305 | 0x0283 | WM_IME_CONTROL
WM_SETCURSOR | 0x0020 | 0x0284 | WM_IME_COMPOSITIONFULL
WM_SETFOCUS | 0x0007 | 0x0285 | WM_IME_SELECT
WM_SETFONT | 0x0030 | 0x0286 | WM_IME_CHAR
WM_SETHOTKEY | 0x0032 | 0x0288 | WM_IME_REQUEST
WM_SETICON | 0x0080 | 0x0290 | WM_IME_KEYDOWN
WM_SETREDRAW | 0x000B | 0x0291 | WM_IME_KEYUP
WM_SETTEXT | 0x000C | 0x02A1 | WM_MOUSEHOVER
WM_SETTINGCHANGE | 0x001A | 0x02A3 | WM_MOUSELEAVE
WM_SHOWWINDOW | 0x0018 | 0x02A0 | WM_NCMOUSEHOVER
WM_SIZE | 0x0005 | 0x02A2 | WM_NCMOUSELEAVE
WM_SIZECLIPBOARD | 0x030B | 0x02B1 | WM_WTSSESSION_CHANGE
WM_SIZING | 0x0214 | 0x02C0 | WM_TABLET_FIRST
WM_SPOOLERSTATUS | 0x002A | 0x02DF | WM_TABLET_LAST
WM_STYLECHANGED | 0x007D | 0x0300 | WM_CUT
WM_STYLECHANGING | 0x007C | 0x0301 | WM_COPY
WM_SYNCPAINT | 0x0088 | 0x0302 | WM_PASTE
WM_SYSCHAR | 0x0106 | 0x0303 | WM_CLEAR
WM_SYSCOLORCHANGE | 0x0015 | 0x0304 | WM_UNDO
WM_SYSCOMMAND | 0x0112 | 0x0305 | WM_RENDERFORMAT
WM_SYSDEADCHAR | 0x0107 | 0x0306 | WM_RENDERALLFORMATS
WM_SYSKEYDOWN | 0x0104 | 0x0307 | WM_DESTROYCLIPBOARD
WM_SYSKEYUP | 0x0105 | 0x0308 | WM_DRAWCLIPBOARD
WM_TABLET_FIRST | 0x02C0 | 0x0309 | WM_PAINTCLIPBOARD
WM_TABLET_LAST | 0x02DF | 0x030A | WM_VSCROLLCLIPBOARD
WM_TCARD | 0x0052 | 0x030B | WM_SIZECLIPBOARD
WM_THEMECHANGED | 0x031A | 0x030C | WM_ASKCBFORMATNAME
WM_TIMECHANGE | 0x001E | 0x030D | WM_CHANGECBCHAIN
WM_TIMER | 0x0113 | 0x030E | WM_HSCROLLCLIPBOARD
WM_UNDO | 0x0304 | 0x030F | WM_QUERYNEWPALETTE
WM_UNICHAR | 0x0109 | 0x0310 | WM_PALETTEISCHANGING
WM_UNINITMENUPOPUP | 0x0125 | 0x0311 | WM_PALETTECHANGED
WM_UPDATEUISTATE | 0x0128 | 0x0312 | WM_HOTKEY
WM_USER | 0x0400 | 0x0317 | WM_PRINT
WM_USERCHANGED | 0x0054 | 0x0318 | WM_PRINTCLIENT
WM_VKEYTOITEM | 0x002E | 0x0319 | WM_APPCOMMAND
WM_VSCROLL | 0x0115 | 0x031A | WM_THEMECHANGED
WM_VSCROLLCLIPBOARD | 0x030A | 0x0358 | WM_HANDHELDFIRST
WM_WINDOWPOSCHANGED | 0x0047 | 0x035F | WM_HANDHELDLAST
WM_WINDOWPOSCHANGING | 0x0046 | 0x0360 | WM_AFXFIRST
WM_WININICHANGE | 0x001A | 0x037F | WM_AFXLAST
WM_WTSSESSION_CHANGE | 0x02B1 | 0x0380 | WM_PENWINFIRST
WM_XBUTTONDBLCLK | 0x020D | 0x038F | WM_PENWINLAST
WM_XBUTTONDOWN | 0x020B | 0x0400 | WM_USER
WM_XBUTTONUP | 0x020C | 0x8000 | WM_APP


AutoIt

榮譽名單

排名不分先後，非常感謝您們大家！(-Jon)

請 見此處 (原文) 檢視更詳細的原始碼協助撰寫名單。 (若您被漏掉不在名單上請 Email 給我)

AutoIt v3 原始碼編寫小組成員

自前排到第五個或第六個都是"《長久贊助》" 的榮譽貴賓會員 :)

  • Jonathan Bennett <jon at autoitscript com>
  • Larry Keys <larrydalooza at yahoo com>
  • David Nuttall <danuttall at rocketmail com>
  • J-Paul Mesnage <jpm at autoitscript com>
  • Jason Boggs <vampire dot valik at gmail com>
  • Jos van der Zande <jvdzande at yahoo com>
  • Tylo <tylo at start.no>
  • Holger <Holger.Kotsch at GMX de>
  • SvenP<論壇成員>
  • Dave Fulgham <DaveF at ditch.org>
  • Jeremy Landes <jlandes at landeserve com>
  • Philip "CyberSlug" Gump <cyberslug at autoitscript com>
  • Ejoc
  • layer <論壇成員>
  • /dev/null <論壇成員>
  • Garrett "The HardlyDeservesCreditFor20LinesOfCode" R. Mueller ;) <garrett at mailsnare.net>

AutoIt v3 說明檔

  • 以上大部分成員都有參與 ：P
  • Philip "CyberSlug" Gump <cyberslug at autoitscript com>（同時參與編寫腳本範例）
  • Jos van der Zande <jdeb at autoitscript com>（同時參與編寫腳本範例）
  • J-Paul Mesnage <jpm at autoitscript com>
  • ScriptKitty <scriptkitty at autoitscript com>

Scite4AutoIt

  • Jos van der Zande <jvdzande at yahoo com>

Au3Check

由 Tylo 建立。

  • Tylo <tylo at start.no>
  • Jos van der Zande <jvdzande at yahoo com>

AutoIt v3 標準 Includes

  • 在 include 檔案中已有作者的相關資訊。
  • Jos van der Zande <jdeb at autoitscript com>
  • Jeremy Landes <jlandes at landeserve com>
  • Brian Keene <brian_keene at juno com>
  • Gary Frost <gafrost at gmail com>

非常感謝以上人員對這些檔案的編譯/修改。

特別感謝

  • 所有一直在使用並支援 AutoIt 的人。
  • 同時還要感謝 UPX 的作者，使我們得以為 AutoIt 的程式加殼。


歷史 / 變更記錄

歷史 / 變更記錄 (History / ChangeLog)

重要：請見這裡 - 得知最近期版本 - 腳本修正補遺。

下面列出的是自 AutoIt v3 發佈以來各版本的更新歷史。

(關於完整的歷代技術更新請點選：這裡「原文檔案」；如需了解 包括測試版在內的所有更新 則點選： 這裡「測試版原文」。)

2008年12月24日 - v3.3.0.0

AutoIt:

  • Windows 9x 和 Windows NT 4.0 作業系統的支援已被正式移除。
  • 新增：新增 StringSplit() 旗標，不返回 element 0 類別的計算結果。
  • 新增 #328：StringToASCIIArray(), StringFromASCIIArray() 函數。
  • 新增：新增 Run()/RunAs() 旗標以修正問題 #415 (Constants.au3 新增包括:$STDIO_INHERIT_PARENT)。
  • 新增：針對所有執行函數新增旗標以支援更新的 CUI 相關元件 (Constants.au3 新增包括:$RUN_CREATE_NEW_CONSOLE)。
  • 新增 #481：在 SplashTextOn() 字串邊緣新增 11 像素。(請見 Vista UI 使用導覽)。
  • 新增 #468：新增 @MSec 巨集用以取得目前秒數為幾毫秒。
  • 新增 #277：@CPUArch 巨集用以返回處理器的架構模式。
  • 新增 #454：$FO_UTF8 允許 FileOpen() 以讀取模式讀取帶 BOM 標記的 UTF8 檔案。
  • 新增：$FO_UTF16_LE, $FO_UTF16_BE 允許 FileOpen() 以讀取模式讀取無 BOM 標記的 UTF16 檔案。
  • 新增 #407：For...In 迴圈為唯讀情況的文件說明。
  • 新增 #645：IniDelete() 現在支援為第三方參數設定 Default 關鍵字。
  • 修復：當使用 {ASC 0xNNNN} 格式時，Send() 會不正確地插入開頭零值。
  • 修復 #305：GUICtrlSetFont() 若使用在下拉式選單，會導致反白選取。
  • 修復 #318：GUICtrlSetTip() 在 TreeViewItem 必須返回 0 值。
  • 修復 #339：GUICtrlDelete() 出錯。
  • 修復 #345：@OSVersion 在 Windows 2008 下無效。
  • 修復 #366：AutoIt 遇到損壞語法的崩潰問題。
  • 修復 #380：@OSVersion 在 Windows XP 64-位元 下無效。
  • 修復 #346：FileOpenDialog()/FileSaveDialog() 篩選檔案類型的長度限制。
  • 修復 #387：DllClose() 和 DllCallbackFree() 當使用無效的控制碼會出錯。
  • 修復 #449：@SystemDir 在 X64 於 32-位元模式下無法返回 SysWOW64。
  • 修復 #440：當腳本以 EOF (0x1A) 結束會造成致命錯誤。
  • 修復 #464：GUICtrlCreateAvi() 的範例腳本不能於 Vista 下執行的問題。
  • 修復 #484：ObjGet() 在指定無效檔案下會出錯。
  • 修復 #501：ProcessGetStats() 當以其它使用者程式進行中(包括 SYSTEM) 會出錯。
  • 修復 #92：DllStruct 資料縮短為 char[]/wchar[]。
  • 修復：GuiCtrlSetState($graphic, $GUI_HIDE) 沒有隱藏。
  • 修復：GuiCtrlSetResizing($graphic, ) 沒有移動。
  • 修復：GuiCreate(...,Style without caption) 沒有正確地調整大小。
  • 修復：GuiSetStyle(caption change) 沒有正確地調整大小。
  • 修復：GuiCtrlSetState($listviewitem) 沒有返回錯誤。
  • 修復 #562：當指定 TITLE 資源時會造成所有其它資源全部消失不見。(符合視窗標題時)
  • 修復 #569：TCPRecv() 文件範例。
  • 修復 #589：一些比對用的運算子沒有返回布林值。
  • 修復 #583：@MSEC 在說明文件中格式是損壞的。
  • 修復 #574：SendKeyDelay 使用 0 值或 SendKeyDownDelay 使用Send() 時會移除各別延遲。
  • 修復 #542：陳述式出錯。
  • 修復 #531：GUICtrlSetGraphic() 某些附註的解釋說明。
  • 修復 #539：StringSplit() 設立旗標 2 和不符合的標點符號時，不會保持返回完整字串。
  • 修復 #601：當標題長度為 >99 工具列返回 0 值。
  • 修復 #608：listView GUICtrlSetBkColor() 未重繪。
  • 修復 #628：GuiCtrlRead($ctxmenu, $adv) 返回無效。
  • 修復 #640：PCRE 不支援 \L, \l, \N, \U，或 \u ：檔案已更新。
  • 修復 #642：安裝管理員現在可以在安裝時，正確地開啟合併的說明檔到記錄頁中，以取代 AutoIt 私人說明檔。
  • 修復 #646：當沒找到函數時 Call() 現在會設定當前指定的 @error 和 @extended 數值。
  • 修復 #669：Dec() 範例排版錯誤。
  • 修復 #659：當使用FileSelectFolder() 時不支援 UNC 路徑的文件說明。
  • 修復 #671：當未指定有效主體時 $WS_EX_MDICHILD 會出錯。
  • 修復：當以無效的 UTF16 輸出字串會導致 BinaryToString() 出錯。BinaryToString() 現在有新的 @error 碼可以判斷無效輸出的問題。
  • 修復 #743：當常駐函數使用了無效 ID 造成 AutoIt 出錯。
  • 修復 #748：AutoIt 的 DllCall(0,...) 出錯問題。
  • 已修改 #393：SoundSetWaveVolume() 在不同 Vista 環境下執行的說明文件。
  • 已修改：PCRE 陳述式引擎已更新至 7.8。
  • 已修改：@ProcessorArch 已修改為 @OSArch 避免誤解混淆。
  • 已修改：大小限制自 RegRead() 和 RegWrite() 被移除。 (針對某些登錄類型的前一個 64KB )
  • 已修改：RegRead() 和 RegWrite() 不再保持使用 REG_BINARY 的十六進位字串類型 - 將強制使用原生二進位資料。

AutoItX:

  • 已修改：本機 DLL 函式庫：所有的字串規則在系統 API 下現在皆為 Unicode。大部份函數已不需要 ANSI 版本。
  • 新增：COM：WinList 規則。
  • 修復：本機 DLL 函式庫：某些返回字串不正常終止。
  • 修復：PixelChecksum() 未返回正確數值。

Aut2Exe:

  • 修復 #436：當從 GUI 進行編譯時選擇的壓縮層級被忽略。
  • 新增 #460：許多冗長繁雜的 UPX 錯誤訊息。

UDFs:

  • 新增：_GDIPlus_StringFormatSetAlign
  • 新增：_StringExplode()
  • 新增：_GDIPlus_ImageGetFlags, _GDIPlus_ImageGetHorizontalResolution, _GDIPlus_ImageGetPixelFormat, _GDIPlus_ImageGetRawFormat
    _GDIPlus_ImageGetType, _GDIPlus_ImageGetVerticalResolution
  • 新增：_PathGetRelative
  • 新增：_ArrayCombinations, _ArrayPermute, _ArrayUnique
  • 新增：_WinAPI_CreatePen, _WinAPI_DrawLine, _WinAPI_LineTo, _WinAPI_MoveTo, _WinAPI_GetBkMode, _WinAPI_SetBkMode
  • 新增：_WinAPI_CombineRgn, _WinAPI_CreateRectRgn, _WinAPI_CreateRoundRectRgn, _WinAPI_SetWindowRgn
  • 新增：_ExcelHorizontalAlignSet, _ExcelFontSetProperties, _ExcelBookAttach
  • 新增：_WinAPI_SetEndOfFile, _WinAPI_SetFilePointer
  • 新增：漏掉的 FrameConstants.au3
  • 新增：Excel UDFs
  • 新增：_Timer_GetIdleTime, _WinAPI_GetWindowPlacement, _WinAPI_SetWindowPlacement
  • 新增 #332：_GUICtrlStatusBar_Create 附註
  • 新增 #275：_GDIPlus_GraphicsFillPolygon
  • 新增：_GUICtrlTab_ClickTab
  • 新增：_GUICtrlComboBoxEx_GetUnicode, _GUICtrlComboBoxEx_SetUnicode
  • 已移除：_StringSplit, 它不再需要了。
  • 修復 #693：_DateTimeFormat() 時間格式。
  • 修復 #701：當 $fMove = True 時 _GUICtrlListView_ClickItem() 在錯誤的點選位置。
  • 修復 #700：當 $fMove = True 時_GUICtrlTreeView_ClickItem() 在錯誤的點選位置。
  • 修復 #703：當 $fMove = True 時_GUICtrlListBox_ClickItem() 在錯誤的點選位置。
  • 修復 #705：當 $fMove = True 時_GUICtrlToolbar_ClickButton() 在錯誤的點選位置。
  • 修復 #707：_GUICtrlMonthCal_Create() 寬度跟高度。
  • 修復 #674：當 $fMove = True 時_GUICtrlTab_ClickTab() 在錯誤的點選位置。
  • 修復 #610：_WinAPI_CreateFile() 失敗時返回值錯誤。
  • 修復 #619：_GUICtrlListView_SetItemSelected 記憶體分配。
  • 修復 #617：修正為六個 GDI+ ImageGet 說明檔範例。
  • 修復 #621：_StringAddThousandsSep 負值下不能運作。
  • 修復 #635：_GuiCtrlTab_ClickTab() 說明文件清單未使用 $fPopupScan 參數。
  • 修復 #650：漏掉了 BorderConstants.au3
  • 修復 #656：_FileCountLines 若檔案僅一行則返回 0。
  • 修復 #600：_ArraySearch 2D 群組下失敗。
  • 修復 #603：_FileReadToArray() 若檔案僅內含單行文字時，不能將一個群組返回。
  • 修復 #495：_GUICtrlTreeView_GetTree 僅能返回一個主視窗。
  • 修復 #503：_Date_Time_FileTimeToLocalFileTime 範例。
  • 修復 #510：_GUICtrlListView_ClickItem:若欄位內部的檢視清單超出可見範圍，則點選外部控制項。
  • 修復 #500：_ChooseColor 在 64 位元下的執行問題。
  • 修復 #517：WinAPI UDF - 在 DllCall() 後的檢查錯誤。
  • 修復 #533：群組函數範圍檢查。
  • 修復：各種計數器函數。
  • 修復 #506：_FileCountLines 處理所有命令行結尾字元發生的問題。
  • 修復 #485：WinAPI 與說明檔關聯失效。
  • 修復 #571：_GUICtrlListBox_FindString, _GUICtrlListBox_GetAnchorIndex 和 _GUICtrlListBox_GetText 的返回值說明文件。
  • 修復 #586：_GuiCtrlListView_SetGroupInfo() 的群組 ID 損壞。
  • 修復 #516：_ChooseFont 在 64 位元下的執行問題。
  • 修復 #595：$WH_KEYBOARD_LL 的 _WinAPI_SetWindowsHookEx 說明檔說明。
  • 修復 #465：_DateTimeSplit 若秒數被省略其預設值為 -1，現在預設為 0。
  • 修復：Excel 範例。
  • 修復 #422：_GDIPlus_GraphicsSetSmoothingMode $iSmooth 允許只設定 0 - 4 範圍，文件已更新。
  • 修復 #388：_GUICtrlToolbar_SetButtonSize 範例。
  • 修復 #400：SQLite.dll.au3 @ProcessorArch 置換為 @OSArch。
  • 修復 #390：_viPrintf 已置換返回類型。
  • 修復 #371：_GDIPlus_Startup 返回值。
  • 修復 #368：_ArrayToClip 返回值。
  • 修復 #361, #362：_GUICtrlListView_InsertItem 說明文件。
  • 修復 #285：_ChooseColor 範例。
  • 修復 #299：_GUICtrlTab_SetItemText 在 Unicode 的緩衝區長度。
  • 修復 #292：_EventLog__Clear 當備用參數為空時並未清除記錄。
  • 修復 #258：_ClipBoard_GetData
  • 修復 #294：_FileReadToArray 的 @LF 不在檔案內 。
  • 修復 #303：Clock.au3 位於:Examples\GUI\Advanced
  • 修復：_GUICtrlListView_SetItemEx 文字緩衝。
  • 修復 #320：_WinNet_EnumResource 的 Struct 指標。
  • 修復 #321：_GUICtrlStatusBar_GetText 在 Unicode 的緩衝區長度。
  • 已修改：StringAddThousandsSep 參數於重要的 #442。
  • 已修改 #733：_GUICtrlButton_SetImageList 的相關文件。
  • 已修改：_SQLite -> 3.6.7
  • 已修改 #442：_StringAddThousandsSep() 允許設定一部份。
  • 已修改 #290：_GDIPlus_DrawImagePoints
  • 已修改：_Soundxxxx 函數。
  • 已修改 #599：_FileListToArray 速度最佳化。

2008年6月12日 - v3.2.12.1

AutoIt:

  • 修復: 當某個被支援的使用者工作目錄未指定時，RunAs() 和 RunAsWait() 現在使用 @SystemDir 為工作目錄以替代 @WorkingDir。
  • 修復：Contextmenuitem 未觸發事件。
  • 修復：當籤頁離開後其圖示透明度被重新更新。
  • 修復: RunAs() 於 Windows 2000 執行的問題。

2008年5月16日 - v3.2.12.0

AutoIt:

  • 已移除：自 ProcessClose() 中移除多餘的選項參數。
  • 已移除：RunAsSet() (換成 RunAs() 和 RunAsWait())
  • 已移除：RunErrorsFatal 選項。( Opt() )
  • 已移除：ColorMode 選項。( Opt() )
  • 已修改：@Unicode 重新命名為 @AutoItUnicode。@Unicode 只是它的另一個名稱，它將被移除 > 3.2.14.0
  • 已修改：StdoutRead(),
    StderrRead(),
    StdinWrite() 和
    ConsoleRead() 的行為，他們都已經做過修改。
  • 已修改：PCRE 陳述式引擎已更新至 7.6。
  • 已修改：AutoIt 內部函數 (例如:InetGet()) 他現在使用 "AutoIt" 做為代理使用者，先前使用留空的方式，但被許多網頁給封鎖了。
  • 已修改：ControlClick() 已經可以存取相同的滑鼠按鍵為 MouseClick() - 左/右/中/第一個/第二個/主要/選單 等。
  • 已修改：GUI 視窗 4093 -> 65532 的控制極限。
  • 已修改：@OSVersion 現在可以為 Windows Server 2008 系統返回 "WIN_2008" 。
  • 新增：RunAs(), RunAsWait()。
  • 新增：GUISetAccelerators()。
  • 新增：REGEXPCLASS 於進階視窗與控制項的定義及說明。
  • 新增：X, Y, W, H 於進階視窗/控制項的定義及說明。
  • 新增：DllCall() 新增類型 int_ptr, uint_ptr, long_ptr, ulong_ptr。在 x86/x64 環境上，特殊類型的大小會被改變。
  • 新增："REG_QWORD" RegWrite() 類型。
  • 新增：HotKeySet() 改用標準符號 {} 標定動作。
  • 新增：FileReadLine( ,-1) 讀取最後一行。
  • 新增：Std I/O 以 RunAs...() 重新導向。
  • 新增：Std I/O 合併旗標，這是為了讓 stdout/stderr 使用相同字串而設定。
  • 新增：Std I/O 終於可支援二進位資料。
  • 新增：ConsoleWrite()/ConsoleWriteError() 現在可以返回資料寫入數量。
  • 新增：在 Run() 內關於如何關閉字串/相關資源 STDIO 連結的附註註解。
  • 新增：StdioClose() 函數強制關閉某個程式的 STDIO 資料。
  • 新增：ProcessClose() 現在由其它使用者關閉已開啟的程式。
  • 新增：ProcessWaitClose()在 @extended 的返回結束碼。
  • 新增：Pixel...() 可指定一個視窗控制碼做為最近參數。
  • 新增："開始" 和 "計數" 參數新增到 StringInStr()。
  • 新增：GUICtrlSetDefColor(), GUICtrlSetDefBkColor()。
  • 新增：新增主視窗參數到 MsgBox(),
    FileSelectFolder(),
    FileOpenDialog(),
    FileSaveDialog()。
  • 修復：DllCall()錯誤的 @error 設定數值。
  • 修復：BlockInput() 返回錯誤。
  • 修復：WinWaitActive() 無法比對。(在 Windows Vista 上常常發生)
  • 修復：GUICtrlSetState($GUI_SHOW) 在活動籤頁上的隱藏單選物件。
  • 修復：SciTe Lite 版不能安裝於 AutoIt 相關臨近資料夾內。
  • 修復：WinMove() 在 Speed = 0 造成腳本出錯。
  • 修復：UDF 詭異的 1 返回值，當無指定明確數值下的問題。
  • 修復：ControlCommand(), "GetLineCount"。
  • 修復：TraySetState(4) 更新 Windows Vista 的常駐圖示。
  • 修復：ProcessExists() 返回錯誤。
  • 修復：StringRegExp() 在 Win95 下出錯。
  • 修復：以 I/O 重新導向使用 Run() 時的引導控制碼。
  • 修復：標籤控制項上的輸入控制項背景被關閉。
  • 修復：GUICtrlDelete() 若有兩個 GUI 視窗已在使用的籤頁問題。
  • 修復：Random() 當範圍超過 2^31 導致的 AutoIt 出錯。
  • 修復：#include 辨識錯誤偵測。
  • 修復：群組項目由 Byref 傳遞至 UDF。
  • 修復：FileSetTime() 在非 NTFS 分割磁區上的向上捨入錯誤。
  • 修復：STDIO 重新導向在 Windows 9x 上有時後會失敗。
  • 修復：IniReadSectionNames() 在 Win9x 系統下返回的區段數值不正確。
  • 修復：AutoIt 在腳本結束時常駐圖示的移除。
  • 修復：當進行移除 ObjEvent() 物件時 AutoIt 崩潰。
  • 修復：ObjEvent() 處理程式會破壞 AutoIt 函數的返回 ：因為 winwait("標題") 會返回 0。
  • 修復：DirMove() 於不同容量的問題。
  • 修復：RegRead() 和 REG_MULTI_SZ 在 x64 環境下出錯。
  • 修復：各種 Edit 控制項聚焦和 DefPushButton 的問題。
  • 修復：ControlTreeview() 成功返回時 @error=1。
  • 修復：COM 物件會遺失十進位精確度。
  • 修復：StringReplace() 用以開啟浮點。
  • 修復：ControlCommand() "SelectString" 選擇錯誤。
  • 修復：StringSplit() 旗標=1 時，標點符號不區分大小寫。
  • 修復：於 Window 進階說明中僅有一個分號須省略掉。
  • 修復：ObjGet() 記憶體漏洞。
  • 修復：修改 AutoUpdateIt.au3 可以在 x64 下執行。
  • 修復：在 GUISetState() 之前重新調整 GUI 大小的問題。
  • 修復：當 GUI 恢復活動狀態時，單個選擇事件會失常。
  • 修復：GUICtrlDelete() 於 contextMenuItem。
  • 修復：FileDelete() 嘗試移除某個以 RunWait() 執行的檔案有時候會失敗。
  • 修復：建立特大號視窗時所產生的 GUI 效能問題。
  • 修復：GuiGetCursorInfo() 相關滑鼠按鍵互換的錯誤。

AutoItX:

  • 新增：ControlTreeView()。
  • 修復：ControlListView() 的原始 DLL 版本。

Aut2Exe:

  • 新增：編譯腳本為控制台程式的選項。

AU3Info:

  • 已修改：當使用搜尋工具總是高亮控制項。
  • 已修改：預設為不高亮控制項。
  • 已修改：控制說明可以擷取進階的類別版本和物件案例。

SciTe "Lite":

  • 更新來源版本為 1.75。
  • 新增儲存對話框集合。

UDFs:

  • 請檢視 最近期版本 - 腳本修正補遺 頁面。

2007年11月25日 - v3.2.10.0

  • 已修改：DllCall() 經由使用 * 關聯來傳遞類型的新模式。
  • 已修改：DllCall() short_ptr, long_ptr, int_ptr 類型聲明，分別是使用 short*, long* 和 int*。
  • 已修改：Execute() 的限制已移除。
  • 已修改：PCRE 規則陳述式引擎更新至 7.4 版。
  • 新增：AutoIt 的 64bit (x64) 版 ─ Aut2Exe, Au3Info 和 AutoItX。(請見 這裡)
  • 新增：DllCallbackRegister(),
    DllCallbackGetPtr() 和
    DllCallbackFree()。
  • 新增：DllCall() 現在可以允許成對， int64, uint64, wparam 和 lparam 類型。
  • 新增：SendKeepActive()。
  • 新增：ControlTreeView()。
  • 新增：ProcessGetStats()。
  • 新增：VarGetType()。
  • 新增：@AutoItX64 巨集。
  • 新增：Au3Info：視窗及控制項的控制碼訊息。
  • 新增：DllStructCreate() 新增 "align" 關鍵字進行結構化調整。
  • 修復：Control...() 函數將 CLASS 和 TEXT 一起使用有時候會出錯不正確。
  • 修復：Control...() 函數使用 CLASSNN 有時候會出錯不正確。
  • 修復：Vista 工作列預覽導致視窗一致性上的問題。
  • 修復：當 $var 變數不存在時 $var = $var 沒有傳送錯誤回應。
  • 修復：GUICtrlSetImage() 自 3.2.4.9 後恢復原來的大小。
  • 修復：GUICtrlCreateListView() 沒有欄位。
  • 修復：彩色按鈕上的特別通知訊息。
  • 修復：IniReadSectionNames() 針對 [] 的字元區段。
  • 修復：Opt("WinTitleMatchMode", Default) 致命錯誤。
  • 修復：GUICtrlSetStyle() 搭配 $ES_READONLY 使用無效的 $WS_TABSTOP。
  • 修復：若 Win...() 使用一個標題 Title 為某個 COM 物件時，則 AutoIt 會於結束時出錯。
  • 修復：ProcessExists() 在 Win2K 下的服務程式。
  • 修復：DefPushButton 的行為。
  • 修復：ControlCommand(SelectString) 的選擇順序。
  • 修復：群組不能有 2^24 個項目。
  • 修復：GuiCreateMenu() 在未命名和無用戶區域視窗上的問題。
  • 修復：WinWaitActive() 在 WinActivate() 後有時會失敗。
  • 修復：循環迴圈 GUIRegisterMsg() 不能註冊。
  • 修復：在 ES_READONLY 編輯控制項上聚焦。
  • 修復：數之不盡的 UDF 修復。

2007年9月10日 - v3.2.8.1

  • 修復：StringRegExp() 出錯的可能性。

2007年9月8日 - v3.2.8.0

  • 已修改：整體速度上的改善。 (與 3.2.6.0 版比較來看目前是增加了 24%)
  • 已修改：PCRE 陳述式引擎已更新至 7.3 版。
  • 已修改：基本遞迴碼的限制已鬆綁。
  • 新增：Wchar 類型新增到 DllStructCreate()。
  • 新增：WinMove() 速度參數。
  • 修復：若 TrayCreateItem() 尚未移除 AutoIt 會於結束時出錯。
  • 修復：當進行呼叫 TrayCreateMenu() 時 AutoIt 會於無效參數上出錯。
  • 修復：符號在 StringRegExp() 的使用位置對 > 127 而言不正確。(重音符號, 非西方語系)
  • 修復：ProcessExist() 在 Windows 9x 下的執行問題。
  • 修復：GUISetState(@SW_DISABLE) 尚未關閉鍵盤的輸入。
  • 修復：DllStructGetData() 的 char[] 類型有時候會導致 AutoIt 出錯。
  • 修復：Au3Info 在啟動時會復原備份設定值。
  • 修復：使用彩色按鈕時的通知訊息有更好的處理方式了。
  • 修復：ControlGetText() 在 Scite 視窗上會出錯。
  • 修復：$LVSCW_AUTOSIZE 欄位被截短而顯示不出字串。
  • 修復：以 GUICtrlCreateListView() 建立的檢視清單不正確。
  • 修復：當 AutoIt 需取得長檔名時的記憶體洩漏。
  • 修復：在建立/移除其它子視窗後 ListviewItem 沒有被建立。
  • 修復：ControlGetFocus() 返回到無效的損壞 ClassNN 值。
  • 修復：偵測無效的 CONTINUELOOP 聲明。

2007年8月24日 - v3.2.6.0

  • 已修改：IconId 在所有 GUI 函數上現在是同樣為 GUICtrlSetImage()。

請注意：先前的腳本使用了 GUICtrlSetImage(), GUISetIcon(), TraySetIcon() 和
     TraySetPauseIcon()
可能會顯示出錯誤的圖示。要取得同樣的圖示如右方："if nId > 0 Then newId = -
    nId - 1"。
  • 已修改：AutoIt .a3x 和已編譯的腳本格式。Exe2Aut 將只能反編譯 3.2.5.1 或
    更早期的檔案。往後再也不會出現支援新版本的 ExeAut 工具了。
  • 已修改：整體速度上的改善。 (與 3.2.4.9 來說目前是進步約 30-40%)
  • 已修改：在規則陳述式內新增受限於 Unicode 的支援。
  • 已修改：如 X=Y=Default，ControlMove() 才會重新調整成與 WinMove() 一樣的大小。
  • 已修改：PCRE 陳述式引擎從 7.0 更新至 7.1。
  • 已修改：克服了在 MouseMove() 當 speed=0 的延遲。
  • 新增：GUIGetStyle()。
  • 新增：對 DllCall() 的 byte 和 ubyte 類型。
  • 新增：在 Au3Info 控制和摘要的 ClassnameNN 資訊。
  • 新增：dllCall 的浮點類型。(感謝 PaulIA)
  • 新增：AU3Check v1.54.8 支援兩者 "#AutoIt3Wrapper_plugin_funcs" 和 "#Compiler_plugin_funcs"。
  • 新增：ProcessClose() 的額外參數，用來關閉字串控制碼。
  • 修復：當 Scite 開啟時在 WinWait("","text") 的 AutoIt 出錯。
  • 修復：在進行 Unicode/ANSI 轉換時某些會於中文語系系統上出錯。
  • 修復：Aut2Exe 當在 ANSI 下執行時會於中文語系系統上出錯。
  • 修復：{ENTER} 於某個 listviewItem 上點選後，發生錯誤通知訊息。
  • 修復：如果在 listview 上設定了圖片，於 listviewitems 上的圖片會被錯誤地重新設定。
  • 修復：重新調整 listview 控制項的大小。
  • 修復：當無效的 WinGetPos() 返回時 @error 不會被設定。
  • 修復：LVM_EDITLABEL 過度使用 CPU 。
  • 修復：AutoIt (非 UNICODE 版本) 在某些 COM 物件上出錯。
  • 修復：GUISetState() 在 GUI 設定 W=0 或 H=0 上的問題。
  • 修復：GUI 控制項提示在點選一次或逾時後，不會再次出現。
  • 修復：若某個控制項選單正在使用，GUI 控制項沒有出現在右邊位置上。
  • 修復：自 3.2.3.3 版以後，在 UNICODE AutoIt 版本上 EnvUpdate() 不再有效。
  • 修復：FileRead(..., count) 返回為 count-1 位元。
  • 修復：Unicode 在 FileInstall() 的檔案名稱。
  • 修復：LVS_EX_HEADERDRAGDROP 延伸類型。
  • 修復：UpDown 控制項顯示已全數標示過的頁面。.
  • 修復：未變更狀態 UpDown 控制項上的 GUICtrlSetState。
  • 修復：FileInstall() 在編譯腳本後會導致 GUI 問題。
  • 修復：ControlGetFocus() 在控制項尚未以 AutoIt GUI 建立的問題。
  • 修復：@AutoItPID 和 processlist 在 Win9x 下的一致性。
  • 修復：GUICtrlSetResizing 在非可調整大小控制項上沒有返回錯誤。
  • 修復：恢復自 3.2.3.13 版的 ControlSend SHIFTDOWN/UP。
  • 修復：在物件點選兩下後直接拖曳到檢視清單控制項。
  • 修復：支援對 GUISetImage() "專屬資源" 的 Dll。
  • 修復：GUICtrlSetLimit() 預設的最小化數值是設為 0。
  • 修復：於編輯或輸入控制項上的 GUICtrlSetStyle() Z 值順序。
  • 修復：FileReadLine() 當以檔案控制碼讀取指定的行數時，取得的快取資料是損壞的。
  • 修復：在某些環境下 GUIGetMsg() 會輕微 LAG。
  • 修復：StringReplace() 和 occurances 參數。
  • 修復：在 Tab 控制項上 的 GuiCtrlSetFont()。
  • 修復：#include 前面的標題空白致使無法被編譯。
  • 修復：在彩色按鈕上的 ENTER 的錯誤通知訊息。
  • 修復：RegWrite() 在某些情形下設定的登錄數值是損壞的。
  • 修復：當文字訊息視窗太大時 AutoIt 會不斷要求 CPU 導致當機。
  • 修復：當使用了空白的控制項 ID ControlSend() 有時會控制錯誤。
  • 修復：ProcessExists() 在 Win2K 系統下程式名稱 >15 位元的問題。
  • 修復：Int() 做字串比對時結果錯誤。
  • 修復：InetGetSize() 在 unicode 版本下返回值為 0。
  • 修復：GUICtrlCreateListview() 於多於 254 個欄位下的問題。
  • 修復：於遞迴 RegExp 上 AutoIt 崩潰。
  • 修復：BitRotate() 的左位元設定。
  • 修復：Filemove() 未做任何移動其返回為 1。
  • 修復：FileRead() 於 ANSI 模式返回 chr(0)。
  • 修復：與使用者相對的 Au3Info 控制項座標位置。
  • 修復：StringInStr() 當往後搜尋且搜尋長度大於該字串時不會返回為 0。

2007年5月25日 - v3.2.4.9

  • 新增：StringCompare()。
  • 修復：Basic 語法字串在位於前一版本情況下比對功能沒有動作。

2007年5月23日 - v3.2.4.8

  • 修復：非西方語系編碼表及 ANSI 格式腳本的錯誤。

2007年5月22日 - v3.2.4.7

  • 新增：Aut2Exe 強制以 ANSI 模式編譯選項。(/ansi 和 /unicode)
  • 新增：StringToBinary()。
  • 新增：對 BinaryToString() 函數 Unicode 相關選項外掛套件。

2007年5月20日 - v3.2.4.6

  • 修復：StringReplace() 和 occurances 參數。

2007年5月20日 - v3.2.4.5

  • 新增：BinaryToString() 對二進位緩衝區到 ANSI 字串的快速轉換。
  • 新增：@Unicode 巨集以顯示 AutoIt 是否已經在 Unicode 或 ANSI 模式下執行。
  • 已修改：StringReplace() 速度加快了 - 很多很多。
  • 已修改：Au3Info 現在可以調整大小了。
  • 修復：Chr(0) 現在終於可以以二進位 Binary() 順利動作。

2007年5月17日 - v3.2.4.4

  • 修復：Chr(0) 現在的動作更加容易、直覺。(現在的動作都是模擬成近似 VBScript 語言)

2007年5月17日 - v3.2.4.3

  • 修復：FileRead() 在 Unicode 檔案執行不正常。

2007年5月15日 - v3.2.4.2

  • 已修改：Au3Info 拖曳圖示和摘要籤頁。
  • 修復：FileReadLine() 當以檔案控制碼讀取指定的行數時，取得的快取資料是損壞的。
  • 修復：在某些環境下 GUIGetMsg() 會輕微 LAG。

2007年5月13日 - v3.2.4.1

  • 新增：ChrW() 和 AscW() 的 Unicode 作業。
  • 修復：Chr() 和 Asc() 在 Unicode 模式的標點符號編碼表 128-255。
  • 修復：若檔案是空白的，則 Unicode BOM 在附加檔案模式下不會被寫入進去。
  • 修復：在 Include\GuiCombo.au3 和 Include\IE.au3 的錯誤。

2007年5月10日 - v3.2.4.0

重大變革：

  • AutoIt 現在終於可以編譯 Unicode 了！AutoIt3.exe 是 Unicode - AutoIt3A.exe 則是 ANSI。
    更進階的細節請檢視這邊：說明頁面。
  • Au3Info 工具已重新改寫。
  • 二進位資料函數已全部重新改寫 - 使用到這些函數的腳本將必須全部修改。

其它修改：

  • 新增：FileOpen() 的新模式進行對 Unicode 和二進位的強制作業。
  • 新增：BinaryLen(), BinaryMid()。
  • 新增：彩色的 GUI 按鈕。
  • 新增：DllStruct...() 可以用名稱而不是索引，即參照到相關類別。
  • 已修改：移除 #include 引導指令數量的最大限制。
  • 已修改：移除 DllOpen() 控制碼數量的最大限制。
  • 已修改：移除開啟檔案數量的最大限制。
  • 已修改：移除快速鍵數量的最大限制。
  • 已修改：StringStripWS() 效能改善。
  • 已修改：變數裡的二進位資料現在被看成一個特別的類型，以區別一般字串。
  • 已修改：BinaryString() 重新命名為 Binary()。
  • 已修改：IsBinaryString() 重新命名為 IsBinary()。
  • 已修改：ControlClick() 現在可以在某些位置上點選一個控制項。
  • 已修改：ControlClick() 現在可以無誤地模擬點選兩下動作。
  • 已修改：ControlClick() 不再強制將主視窗設為活動狀態。(目前升級給使用者指定)
  • 已修改：ControlClick() 一些新增到 Au3Info 的相關調整。
  • 已修改：改良搜尋功能使之可以完成對 視窗/控制項/物件實體 的尋找。
  • 已修改：從 DEFAULT_QUALITY 到 PROOF_QUALITY 等等的變更/設定字型功能。
  • 已修改：x^y 與 C99 標準相容。
  • 修復：當使用 StringStripWS(), 旗標 4 和空白字串時，可能造成出錯。
  • 修復：GUICtrlSetLimit() 的 UpDown 控制項 min = max 的問題。
  • 修復：GuiCtrlSetTip() 一直沒有順利的進行動作。
  • 修復：在 Windows Vista 下緩慢地重繪 GUI 籤頁問題已修復。
  • 修復：HotKeySet 的損壞通知訊息。
  • 修復：在 pagefile.sys 的 FileGetAttrib()。
  • 修復：於 GUICtrlSetData() 的無效預設參數沒有被偵測到。
  • 修復：在群組類別上的指定返回錯誤。
  • 修復：FileOpen("test.txt", 2+8) 返回錯誤。
  • 修復：在 Enum 聲明的錯誤偵測。
  • 修復：Opt("WinTitleMatchMode")。
  • 修復：堆疊毀損起因於 DllCall() 的不當使用，現在則以彈性方法終止腳本取代硬錯誤。
  • 修復：當讀取空白 REG_MULTI_SZ 時出錯。
  • 修復：Round() 沒有返回整數值。
  • 修復：ControlSend() 傳送到空白的 "" ctrl，已針對非活動視窗做過修正，移位狀況也是。
  • 修復 ：O^(-1)。
  • 修復：沒偵測到的違規聲明。
  • 修復：HotKeySet("^{PAUSE]",... 等通知。
  • 修復：{CTRLBREAK} ->{BREAK} 與 ctrl 一樣允許使用者做出回應。
  • 修復：$var = Default 被視同參數傳遞至 Com 物件。
  • 修復：Edit 編輯控制項總是將第一次、甚至不顯示的 GUI 物件都聚焦追蹤。這樣的行為同樣也忽略了 $GUI_FOCUS。
  • 修復：SRandom() 亂數種子參數的範圍數值。
  • 修復：如果於 RAW 模式無計算行為，則導致 Fileread 出錯崩潰。
  • 修復：Opt("WinTitleMatchMode", <0) 可完全符合大小寫。
  • 修復：FileSetAttrib/FileSetTime 設定錯誤。
  • 修復：Execute/Call 遞迴溢位顯示錯誤訊息。
  • 修復：Aut2exe 找不到圖示的警告訊息。
  • 修復：WinGetTitle() 於錯誤值返回 1 。
  • 修復：在配置關鍵字變數上造成的記憶體洩漏。

2006年12月19日 - v3.2.2.0

  • 新增：StringRegExp() 和 StringRegExpReplace() 規則陳述式支援。(相容於 Perl)
  • 新增：規則陳述式支援比對視窗標題。
  • 新增：ShellExecute() 和 ShellExecuteWait() 函數。
  • 新增：針對 UAC/Windows Vista 系統的 #RequireAdmin。
  • 新增：Windows Vista 說明檔登錄機碼。
  • 新增：GuiCtrlSetState() $GUI_DROPNOTACCEPTED。
  • 新增：$GUI_FOCUS, $GUINOFOCUS 給 listviewitem 控制項使用。
  • 新增：IsDllStruct()。
  • 新增：SRandom() 並可設定種子參數，以隨機產生亂數。
  • 新增：WinTitleMatchMode 可完全符合大小寫。
  • 新增：附帶 $GUI_BKCOLOR_LV_ALTERNATE 的 Listview Alternate coloring (檢視清單色彩交換)。
  • 新增：若基於負 1 的索引在使用時，可參照排列順序設定 IconId。
  • 新增：CompiledScript 字串檔資訊以編譯腳本。
  • 新增：GUICtrlCreateIcon 或 GUICtrlSetImage 支援來自 .exe/.dll 檔的 >32x32 圖示。
  • 新增：功能擴充過的 GUICtrlSetTip() 允許建立帶標題、圖示、及使用水球通知樣式等工具提示。
  • 新增：工具提示支援預設關鍵字。
  • 新增：將附註新增到 _PathSplit() 提示說明，此不允許命令行字串，僅接受路徑註解。
  • 新增：2 個 UDF's 到 GUIStatusBar.au3。
  • 新增：GUICtrlCreateIcon 和 GUICtrlSetImage 能以名稱在數個圖示檔中選擇。
  • 新增：@KBLayout 用來取得當前關鍵字設定設定。
  • 新增：ToolTip() 選項以確認工具提示能持續在監視器上顯示。
  • 新增：IniWriteSection() 函數。
  • 新增：於 DriveMapAdd 錯誤的 @extended 錯誤碼。
  • 已修改：效能的改善。(某些腳本甚至可達到 100% ！)
  • 已修改：@error 設定至 Run() 的 WinAPI GetLastError()。
  • 已修改：對 Floor() 微幅調整，以確保它不易被浮點精確度錯誤影響準確性。
  • 已修改：對 Ceiling() 微幅調整，以確保它不易被浮點精確度錯誤影響準確性。
  • 已修改：PixelChecksum() 現在有超過 30x 的更快速度。
  • 已修改：FileGetVersion() 額外參數以重新取得字串檔案資訊。
  • 修復：MsgBox() 在 Windows Vista 系統上的等待時間。
  • 修復：在已排序檢視清單控制項上的 GuiCtrlRead 錯誤。
  • 修復：@OSVERSION 在 Windows 9x 上的執行問題。
  • 修復：GuiGetCursorInfo() 以控制碼無法接收到滑鼠點選資訊。
  • 修復：當使用 uint, ushort 導致的 DllCall() 出錯。
  • 修復：當字型大小變更後清單控制項高度不正常。
  • 修復：GUICtrlSetImage() 未測試圖示錯誤。
  • 修復：@ScriptDir 等於 @WorkingDir 表示根目錄 (x:\)。
  • 修復：GUIGetCursorInfo() (winhandle) 當子視窗非活動時的錯誤。
  • 修復：_StringAddComma()。
  • 修復：即時拖曳 $GUI_EVENT_DROPPED 在編輯控制項上的通知訊息。
  • 修復：對 DLLCall() 和 DLLSructCreate() 類型參數的一致性。
  • 修復：預設關鍵字始終無法與 COM 物件一同正常運作。
  • 修復：當使用參數時的 COM 資源寫入失敗。
  • 修復：US 國際語系鍵盤的 Send/ControlSend。
  • 修復：英語語系鍵盤的 Send/ControlSend char>=chr(128)。
  • 修復：MsgBox() 其工作狀態旗標使 GUI 元件老是在超過時間後被關閉。
  • 修復：用 /ErrorStdOutError 參數於訊息框事件的錯誤回報。
  • 修復：GUICtrlSetImage 對 Icon Ctrl 的預設圖示數值。
  • 修復：GUIRegisterMSG() 會破壞 @error 的動作。
  • 修復：$LVS_SORTASCENDING 搭配 GUICtrlSetImage() 圖示無法順利顯示出來。
  • 修復：一些集合物件在某個 AutoIt 聲明無法辨識。
  • 修復：在已不檢查單選按鈕的無效畫面更新。
  • 修復：常註圖示提示在編譯後不會顯示腳本名稱。
  • 修復：UDP... 返回碼錯誤。
  • 修復：UDPRecv() 在無效參數上出錯。
  • 修復：COM 會破壞浮點值。
  • 修復：GUICtrlSetState 關於選單控制的說明文件註解。
  • 修復：在 GUICtrlSetBkColor() 之後更新的問題。
  • 修復：在啟始行出錯提示 ~："無法辨識此行"。
  • 修復：在 Windows 98 上當 INI 檔空白或不存在時，IniReadSectionNames() 會返回到假資料。
  • 修復：@compiled 在腳本編譯後的問題。
  • 修復：Send() 傳送 italian 斜體字型的問題。
  • 修復：MouseMove() 在第二螢幕的問題。
  • 修復：StringInStr() 沒有覆寫為字串搜尋參數。
  • 修復：二進位字串類型的 Int()。
  • 修復：ControlSend sending() 特殊符號。
  • 修復：輸入無效的損壞格式檔到 FileInstall() 造成的 Au3exe 出錯。
  • 修復：在編譯內以 FileInstall() 'Include' #CS-#CE 腳本後發生的執行檔錯誤。
  • 修復：當 FileInstall() 相關的檔案沒有指定路徑時，將根據 ScriptDir 設定連結以確保和編譯腳本的一致性。
  • 修復：使用命令行短檔名造成的 Aut2exe 出錯。
  • 修復：工具狀態提示 (像是圖示和標題) 會顯示那些之後不再需要的提示項目。被影響的有兩個：ToolTip() 和 GUICtrlSetTip())。
  • 修復：GUIRegisterMSG() 會破壞 @error。
  • 修復：_ArrayToString() 的錯誤預設參數。
  • 修復：損壞的無效 "#" 指令導致中斷整個腳本。

2006年8月13日 - v3.2.0.1

  • 修復：(AU3INFO) 控制碼中的緩衝區過速。
  • 修復：Exe2Aut.exe 遺失了數位簽章。

2006年8月12日 - v3.2.0

  • 新增：COM 物件的支援。
  • 新增：SciTE 編輯器的 "Lite" 版已加入 AutoIt 安裝程式內。
  • 新增：Aut2Exe 現在可以建立 .a3x 編譯檔。(類似 .zip for .au3).
  • 新增：支援自訂常駐圖示。
  • 新增："default" 關鍵字。
  • 新增：IsKeyword() 所以 "default" 關鍵字能當做參數給使用者函數呼叫。
  • 新增：'false' 及 'true' 關鍵字和布林代數的支援。
  • 新增：IsBool()。
  • 新增：+=, -=, *=, /= 運算子。
  • 新增：DLLCall() cdecl 和 stdcall 的支援。
  • 新增：DLLStruct... 函數。
  • 新增：有限的 TCP 和 UDP 函數。
  • 新增：新增讀取和寫入 STDIO 支援。
  • 新增：ConsoleRead(), ConsoleWriteError()。
  • 新增：在 DIM 和 CONST 關鍵字中起始化群組的能力。
  • 新增：Switch, EndSwitch 結構語法。
  • 新增：HWnd() 和 IsHWnd() 函數。
  • 新增：BinaryString(), IsBinaryString() 函數。
  • 新增：FileCreateNTFSLink()。
  • 新增：/AutoIt3ExecuteScript 命令行選項。
  • 新增：Call() 現在支援參數了。
  • 新增：Execute()。
  • 新增：@HotKeyPressed 巨集。
  • 新增：單元 NOT 運算子在字串上現在不允許使用。一個 NOT 運算子在非空白字串上會導致結果 FALSE(為否)。
  • 新增：Beep() 和 WinFlash() 函數。
  • 新增：Floor() 和 Ceiling()函數。
  • 新增：SetError 可選擇 @extended 做設定。
  • 新增：RegRead, RegEnumVal 返回數值類型為 @extended。
  • 新增：FileSaveDialog(), FileOpenDialog() 支援多個篩選檔案類型群組。
  • 新增：@ScriptLineNumber, @ProcessorArch, @AutoItPID。
  • 新增：BitRotate()。
  • 新增：Fileopen(), FileCopy(), FileMove() 附加旗標以建立不存在的子資料夾。
  • 新增：FileRead(), FileWrite() 執行二進位檔的動作。
  • 新增：(GUI) GUICtrlSetData 樹狀檢視文字。
  • 新增：(GUI) $WS_EX_MDICHILD 對 GUICreate() 的支援。
  • 新增：(GUI) GUICtrlCreateGraphic(), GUICtrlSetGraphic()。
  • 新增：(GUI) Opt('GUIEventOptions',1) 對選擇最大化、復原、或最大化按鈕視窗動作支援。
  • 新增：(GUI) 對清單/樹狀檢視 GUI 控制項的右鍵點選支援。
  • 新增：(GUI) GuiCtrlRead 返回 ControlID if Opt("GUIEventCompatibilityMode',2)。
  • 新增：(GUI) GUICtrlCreateMonthCal()。
  • 新增：(GUI) Opt("GUIDataSeparatorChar",...)。
  • 新增：(GUI) GUICtrlCreateObj()。
  • 新增：(GUI) GUICtrlSetColor(), GUICtrlSetBkColor(), GUICtrlSetImage() 用於 ListviewItem 控制項。
  • 新增：(GUI) GuiSwitch tabitemID 選擇性參數，允許在 tabitem 籤頁項目上建立動態控制項。
  • 新增：(GUI) GuiCtrlListView 支援圖示檢視。
  • 新增：(GUI) $GUI_WS_EX_PARENTDRAG 允許標籤 (label) 或圖片控制項像標題列一樣使用以方便拖曳整個主視窗。
  • 新增：(GUI) GUICtrlGetHandle()。
  • 新增：(GUI) $GUI_EVENT_DROPPED @GUI_DRAGID,@GUI_DROPID。
  • 新增：(GUI) GuiSetCursor(16),GuiCtrlSetCursor(16) 隱藏游標。
  • 新增：(GUI) 允許 Dragfile 對任何控制項動作，@GUI_DRAGFILE 已包括使用在 $GUI_EVENT_DROPPED 的檔案名稱。
  • 新增：(GUI) GUIRegisterMsg() 與 GUI WM_Message-routines 的及時同步動作。
  • 新增：(GUI) GUICtrlRegisterListViewSort() 以建立現實常見的 GUI ListView 檢視清單排序動作。
  • 新增：(GUI) 籤頁項目圖示。
  • 新增：(AU3INFO) AutoIt v3 視窗訊息工具：目前會顯示控制項的樣式和 exStyle 數值。
  • 已修改：#include 搜尋演算法已修改。
  • 已修改：參數 /c 命令行選項已被 /AutoIt3ExecuteLinecommand 取代。
  • 已修改：RegEnumKey 和 RegEnumVal 可以返回更精確的 @error 值以協助錯誤判斷。
  • 已修改：Return,@error, @extended 定義必須明確，才能以一個 UDF 返回。
  • 已修改：FileFindFirstFile 不再返回 "." 或 ".."。
  • 已修改：Set _ 為一個連續符號時「只能」跟在空格後面。
  • 已修改：FileClose 遇到無效控制碼不會再觸發出 AutoIt 即時錯誤了。
  • 已修改：若 DLLCall 不能執行現在會顯示出致命錯誤訊息。
  • 已修改："OnAutoItExit" 函數目前在系統關機或使用者登出時會被呼叫。
  • 已修改：Opt() 只有搭配 "option(選項)"，才會返回該選項的目前數值。
  • 已修改：DllCall @error 設定了找不到函數時的動作。
  • 已修改：SplashTextOn() opt=32 垂直置中。
  • 已修改：(GUI) GUICtrlCreateList 現在強制類型為 LBS_NOTIFY。
  • 已修改：(GUI) GUICtrlCreateIcon 預設大小是 32x32。
  • 已修改：(AU3INFO) 在 Au3info 的預設值已做過修正，所以它不會高亮控制項。
  • 修復：更多修正 - 請檢視技術檔案：變更記錄「原文檔案」。

2005年4月7日 - v3.1.1

修復了少量的 bug。

  • 修復：@OSVersion 在 Windows Server 2003 下無效 。
  • 修復：GUIConstants.au3 內的 $LVS_EX_FULLROWSELECT 被錯誤定義成 $LBS...。
  • 修復：@YDAY，並不準確的問題（快了一天）。
  • 修復：SetError(), SetExtended() 可以返回一個數值。
  • 修復：GUICtrlCreateMonthCal 的位置定位。
  • 修復：CmdLine[] 上限為 63 個參數。
  • 修復：FileSetAttrib 在不存在檔案下返回 1。
  • 修復：Filecopy 在網路分享環境沒有建立子目錄。

2005年2月7日 - v3.1.0

  • 新增：GUI 建立功能。
  • 新增：DllCall(), DllOpen(), DllClose()。
  • 新增：ControlListView()。
  • 新增：WinList() 。
  • 新增：DirGetSize()。
  • 新增：IniReadSectionNames(), IniReadSection()。
  • 新增：InetGet(), InetGetSize()。
  • 新增：HttpSetProxy(), FtpSetProxy()。
  • 新增：FtpBinaryMode（選項）。
  • 新增：Ping()。
  • 新增：ControlGetHandle()。
  • 新增：WinGetProcess() 和 ProcessList()。
  • 新增：SetExtended()。
  • 新增：WinSetTrans()。
  • 新增：Assign()。
  • 新增：ConsoleWrite()。
  • 新增：@AutoItExe 巨集 。
  • 新增：Const 關鍵字。
  • 新增：自訂函數終於支援 可選 參數。
  • 新增："main", "primary", "menu", "secondary" 新增到 滑鼠按鍵類型 中 。
  • 新增：ExpandVarStrings (選項)。
  • 新增：在啟動和離開時自動呼叫使用者函數 OnAutoItStart() 和 OnAutoItExit()。
  • 新增：OnExitFunc (選項)。
  • 已移除：URLDownloadToFile() (由 InetGet() 代替)。
  • 已修改：For 迴圈 將自動聲明區域的計數變數。
  • 已修改：IniDelete() 已可以移除整節資料。
  • 已修改：StringReplace() 把取代運算元返回給巨集 @extended。
  • 已修改：StringMid() 「字元數」參數變為可選參數。
  • 已修改：PixelChecksum() 的「步過 (step)」選擇性參數。
  • 已修改：Control...() 函數現在可利用控制項ID來識別控制項。
  • 已修改：InetGet() 函數可在後台進行下載。
  • 已修改：Reg...() 在使用不明機碼時不再返回硬錯誤。
  • 已修改： mouse 及 pixel 函數新增了新的「用戶區」模式。
  • 已修改：新增 WIN_2003 到巨集 @OS_VERSION 中。
  • 已修改：AU3Spy.exe 重新命名為 AU3Info.exe。
  • 已修改：對 AutoIt Window Info 進行了較大的更新（新增控制項高亮、拉近、游標ID等功能）。
  • 已修改：FileSelectFolder() 支援定義起始目錄及更新目錄。
  • 已修改：在使用-1作為控制碼時，File （檔案動作）函數不再返回嚴重錯誤。
  • 修復：SplashImageOn() 的記憶體洩漏問題 。
  • 修復：如果變數並未事先定義則類似 "$var = $var" 這樣的陳述式將給出錯誤的值。
  • 修復：StringFormat() 處理 \\ 字元時的問題。
  • 修復：在某些情況下即使離開了腳本而 AutoIt3.exe 仍會出現在工作管理員中一段時間。
  • 修復：在 Windows 終端伺服器下的某些路徑如 @WindowsDir 等值不正確。
  • 修復：FileSetTime() 非 GMT 時區的系統會得到錯誤的結果。
  • 修復：FileMove() 處理 UNC 路徑時的問題（即使在同一目錄仍執行檔案搬移指令而不是生成副本）。
  • 修復：^ 運算子。
  • 修復：Chr()。
  • 修復：StatusBarGetText() 未指定「Text」參數時會出錯失敗。
  • 修復：InputBox() 不能返回焦點到之前啟動的視窗上。

2004年8月4日 - v3.0.102

主要的修改：現在預設的顏色格式是標準 RGB 格式而不再使用之前的 BGR 格式。帶來的影響主要發生在 PixelSearch() 和 PixelGetColor() 函數上。

為了讓舊版本的腳本仍能在之前的BGR模式下執行，我們提供了「ColorMode」選項，只需在腳本開頭位置放置一行陳述式即可，例如：

Opt("ColorMode", 1)

如果在您的腳本代碼中有使用涉及到顏色的函數，那麼您必須注意上面提到的變化，而且要麼在代碼中變更顏色格式，要麼就像上面那樣新增 ColorMode 選項。尤其是在那些需要與遊戲中的 BOT 進行互動的腳本更要注意。

  • 新增：DriveMapAdd(), DriveMapDel() 和 DriveMapGet()。
  • 新增：@SW_SHOWDEFAULT, @SW_SHOWMAXIMIZED, @SW_SHOWMINIMIZED, @SW_SHOWMINNOACTIVE,
    @SW_SHOWNA, @SW_SHOWNOACTIVATE, @SW_SHOWNORMAL    。
  • 新增：FileGetShortcut()。
  • 新增：預定義的 $CmdLineRaw 變數現在用以儲存完整的命令行陳述式。
  • 新增：@DesktopDepth。
  • 新增：ReDim。
  • 新增：新增更多的命令行參數到 Aut2Exe.exe: /nodecompile 和 /comp 0-4 (壓縮層級， 4=最佳)。
  • 新增： Process...() 和 Run() 函數支援使用 Process ID (PID)。
  • 新增：ProcessSetPriority()。
  • 新增：新增一個反編譯器 (Exe2Aut) 。
  • 新增：PixelChecksum()。
  • 新增：以「0x」開頭的字串用於數值的計算或判斷時將被自動轉換為十六進位數值。
  • 新增：MouseWheel()。
  • 新增：RegEnumKey() 和 RegEnumVal()。
  • 新增：FileRecycleEmpty()。
  • 已修改：TimerStart() 重新命名為 TimerInit(). TimerStop() 重新命名為 TimerDiff()。
  • 已修改：FileSelectFolder() 的標示參數被變更。
  • 已修改：Reg...() 函數允許兩位元空白值的 REG_MULTI_SZ 機碼類型。
  • 已修改：BirOr(), BitAnd() 和 BitXOR() 可支援最高達 255 個參數。
  • 已修改：FileCreateShortcut() 新增了圖示及視窗狀態選項。
  • 已修改：RunAsSet() 支援更多的使用者處理選項。
  • 已修改：RegWrite() 現在可僅給定機碼（而不給其它參數）從而建立無具體值的機碼。
  • 已修改：「允許反編譯」選項被新增到 Aut2Exe。
  • 已修改：Aut2Exe 在編譯過程中將回報相關訊息並允許中斷此過程。
  • 已修改：當使用FileInstall和中等/大型檔案時已編譯的腳本將執行/解壓縮的更快。
  • 已修改：使用者函數的最大數量限制已被取消。
  • 已修改：變數的最大數量限制已被取消。
  • 已修改：Send/Mouse 的延遲時間如果被設為 -1 則完全不休眠（暫停執行緒）(SendKeyDelay, 等等...）。
  • 已修改：可選的「出現順序」參數新增到 StringInStr() 函數中。
  • 已修改：可選的預設檔名新增到 FileOpenDialog() 和 FileSaveDialog() 函數中。
  • 已修改：登錄檔動作函數改為接收四字元的機碼（比如 HKLM 代替以前的 HKEY_LOCAL_MACHINE，等等）。
  • 已修改：網路登錄檔的機碼以「\\電腦名稱\機碼\子機碼」這一形式接收。
  • 已修改：AutoItSetOption 返回之前設定的值。
  • 修復：FileGetSize() 可用於大小超過 2GB 的以及使用中的檔案。
  • 修復：陳述式：If "非空白字串" And 1 - 現在被認為條件成立。
  • 修復：ToolTip() 當滑鼠在螢幕底部附近時的問題。
  • 修復：StringIsDigit()。
  • 修復：Process...() 函數在 NT4 下無法檢視某些程式。
  • 修復：在關鍵字 THEN 後出現的某些其它關鍵字可能導致錯誤。

2004年3月11日 - v3.0.101

  • 新增：MemGetStats()。
  • 修復：Windows 95a 的相容性問題。
  • 修復：說明文件中的少量錯別字。

2004年2月29日 - v3.0.100

  • 最初發佈版本。


AutoIt 和開發者的歷史

這一篇是給那些對 AutoIt 企劃的開始、及開發者的參與整個事件的始末感到好奇的人。Devs 他們在有空時會騰出時間將想法加入進去 :)

Jon

1998年 10月

在英國的時候，我就計劃要開發出一套可為公司及 Windows NT 4 系統下進行自動化的程式。很明顯當時有將近一半以上的程式缺乏有所需求、也十分重要的靜默安裝能力。因此便尋找有關可以強制按下按鈕的方法，在一次偶然的機會接觸到微軟的 Microsoft ScriptIt，該程式是一個已編譯的 WinBatch 腳本，它主要是設計在自動化佈署環境下的按鈕點選。

ScriptIt 執行還沒問題，不過它十在是太不穩定了。ScriptIt 對系統速度的要求是惡名昭彰的龜毛，而且無法控制敲擊按鍵間的延遲，它還有另一個麻煩的問題是，您沒有辦法在執行程式的時候為它指定工作目錄，導致我寫出來的腳本有許多程式都無法載入的問題。還有一點就是，在 NT 5 beta (如：Windows 2000) 下不能運作。

1998 聖誕節 (Xmas)

為了擺脫這個讓我頭痛的問題，因此在聖誕節期間我決定嘗試使用 C 語言撰寫程式，該程式不但能夠傳送敲擊按鍵動作、還能照我希望控制訊號間的延遲。

1999 一月

AutoIt version 1 在舊網站 winfiles.com 釋出。語法跟 ScriptIt (用來傳送 -Send) 類似，而且具備一些函數功能：Send, Run, RunWait, WinWait, WinWaitClose, WinWaitActive, WinHide, WinActivate, WinClose, WinRestore, Sleep 和 SetKeyDelay。從 v1.0 說明檔的內容說明：

優點
- 它非常的小，才 40Kb (比 ScriptIt 還小 600Kb)。
- 如程式發現新的版本，可進行更新。
- "Reveal" 函數的功能更加完善。
- 非活動及活動視窗都一樣可以等待執行。
- 可使用各種訊號延遲 (定義單位毫秒)。
- 可以修改不同按鍵間的敲擊時間。
- 當執行一個程式時，您可以為它指定工作目錄。
- 在 Win98/NT 5.0 系統下，可以強制將視窗設為活動狀態 (使用 "WinActivate")。

缺點
- "[ADLIB]" 這部份的功能尚無法實現。
- 腳本檔的格式必需正確沒有問題 (各行間不允許任何空白且要包括一個指令)。
- 沒有 Wilson WinBatch 指令的功能。
(不過還有誰想用它？)
- 因為我對指令命名的喜好關係，把腳本弄的有點大。

1999年 1月 - 4月

許多的版本不斷被釋出，到了 v1.8 版擁有的特色如下：
- 具備安靜/顯示兩種模式
- Goto!
- IfWin...
- 滑鼠控制
- 類似於 ScriptIt ADLIB 的支援
- Gosub
- %ENV% 變數的支援

1999年 八月

AutoIt v2 已釋出。
新增 AutoItX 第一版。

1999年 九月

AutoIt v2.1 - 新增 Aut2Exe 第一版。

1999年 九月- 2001年 五月

隨著頻繁的更新版本不斷被釋出、函數的數量也一直增加。不過基本上都是某些人要求一個新功能，所以我就放了一點東西進去。不過這個帶來的附加問題是：不論如何我們再也不跟時間妥協了，為何？

2001年 五月

AutoIt 原始碼實在太亂了，只好整個用 C++ 重編寫來過。

2002年 一月

AutoIt v2.62 - 新增 Exe2Aut 第一版(boo...hiss)。
新增 AutoItDLL 第一版。

2002年 十二月

AutoIt v2.64 - AutoIt v2 的最後一個版本。

在我們完成撰寫壓縮及檔案資料庫後，便新增了 FileInstall 函數。

2003年 一月

2001 到 2003 年間僅有非常小的一部份完成開發。我們再度遇到了瓶頸，我不曉得要如何讓這樣的計畫開發下去。因為原始碼又變的雜亂無章，此肇因於專案的開發方式欠缺深思熟慮，我們的做法是每當有人需要某功能時才將它放進去，而沒有考量到往後的變化。 AutoIt v2 的語法真的是亂到讓人覺得很恐怖。

我所得知的大半都是要求有體質良好的迴圈 (loop) 和陳述式 - 因為有半數的問題不外乎："我要如何在 Run 指令中使用反斜線呢？" 呵呵。

這段期間有各式各樣的 "外掛(add-on)" 被加入，像：由 Larry 撰寫的 Aut2xtra 新增檔案，讓使用者可以使用一些 AutoIt 沒有的功能 (因為我實在沒時間、也沒那種動力去把它們加進來)。

IIRC Larry 曾提供建議過，他對於程式開發的嚴重缺乏十分無奈，還建議乾脆寫個新版本算了。因此我決定若大家對新的版本有需要的話，那麼它應該是更接近於 "完美(proper)" 的語言。就這樣我開始了以 "framework" 為架構的 AutoIt v3 開發。

前一個版本用到條件非常嚴格的語法，它就是："指令, 參數1, 參數2,..."，而它花了我近一個多月的時間才將一些東西帶進來，它可以順利讀取內含複雜運算式(陳述式) 的一條指令行 (這可是要 google 一堆亂七八糟的東西 -譯註)。雖然我是順利 "到手" 了，不過 AutoIt 運算式代碼的難寫程度，還是我所做過的事情中第 2 號麻煩的。(第一號麻煩的事就是撰寫 Aut2Exe 會用到的壓縮代碼，那是我拼湊雜繪出來的)。

在此之後有許多的版本發展不久後便獲得解決，我已經忘記了這些曾參與解答的熱心網友，所以誠致希望他們可以全部都在這裡。

2003年 三月

AutoIt v3 的第一個公開測試版 (經過許多次的討論才發表) 釋出。

2004年 二月

一路上跌跌撞撞經歷 100 個以上的測試版本更新及開發後，才排除萬難推出 AutoIt v3.0.100 版。

Jon :)

Larry

早在 2001年初，當時 WinNT 才剛首次公開展示，我就開始了個人的自動化工作。我是在前一任館長那看到他正使用 AutoIt 腳本在處理一些互動動作。實在是太有趣了....我便瞭解熟悉了一下 AutoIt 在展示程序上的控制方式，其它的工具跟方法跟它相較之下實在遜色許多，因此我開始全力專注於 "AutoIt-化" 的解決方式。

我們曾在 Yahoo 的 AutoItList 群組上掛網聊天了好一段時間，因為我在工作時有一大堆空閒時間可以玩 (感謝 AutoIt) 並將多數注意力放在 AutoItList 上。Jon 注意到我的熱心贊助，所以便將我加入 "moderate/maintain" 群組中。話雖如此，但當時我還沒有把眼光放在檢視檔案原始碼片段，就這樣很久，也有一年了。

由於 2003 年間，我感受到 AutoIt 到了瓶頸困境階段，所以開始學習使用 C 語言建立用於 AutoIt 的命令行工具 (包括 GUI, AutGUI.exe)。然後我開始恐嚇所有人可以的話，嘗試寫一個 AutoIt 的 "次世代(next-generation)" 版。我花費約莫 2 天的時間在編寫腳本分析器，而 (我想) Jon 對我老是不經腦袋的直言快語、和作品的不堪一擊給嚇到而相當緊張，所以，他收留了我並當下決定竭盡所能為大家服務。

我想 Jon 認為他和我有所擁有的權限有一部份是相同的，所以他讓我擔任 AutoItScript 論壇的第一任管理員，隨後由於他欣賞我的懶散、且對我熱心的協助亦贊譽有加，因此他捨出了一些重任給我。

往後在 AutoIt 社群不論是我遇到了困難也好，或是它一樣保持免費軟體也罷，我想，過去所歷經那無數小時的努力，其價值是無法以金錢衡量的，我們為它所努力的一切，只不過是用那一份驕傲去燃燒這份熱情而已。

Lar.

JdeB

我是自 AutoIt ver.2 版就開始在使用它了...
開始較有動作的時候，是在搬去新論壇不久之前的舊論壇時代才開始。
曾提供協助的事項像是：
- 說明檔的自動化建立。
- 為 AutoIt3 函數和關鍵字 (F1) 在編輯器像：Crimsom/TextPad/SciTE 內的執行，使之能開啟說明檔。

曾協助撰寫過一批 UDF (使用者自訂函數)。
我以學習 AU3 的方式編寫整理過在 Autoit3 的語法。現在是 BCX - 之所以使用 C 語言，是因為我想加快撰寫的速度。
然後開始開發 SciTE 的 AutoIt3 Lexer 並附送包含於 SciTE v 1.60 程式內。
至於將 SciTE4AutoIt3 安裝管理員封裝成一個單獨的安裝程式，是給那些所有熱心開發的網友、我自己、以及為它而生的說明檔等。
撰寫 AutoIt3Wrapper 讓使用者可以輕鬆地存取 AutoiT3 正式版和測試版，而且讓 Compiler Directives 具備更新輸出程式資源內容的能力。
當 SciTE 逐漸開始受到歡迎後，開始架設 SciTE4AutoIt3 副網站。

導入 AutoIt3 的模組化，因為當時實在有太多的小腳本工具 (我很禮貌地遊說這件事) 曾讓論壇們感到很無能為力，而 Jon 一直沒有時間處理這問題，Larry 也是很忙抽不出空來。

以Tidy 的原始碼為基礎撰寫混淆器，使腳本多少更不易被解讀。

Jos :)

Valik

在很久前我接觸到一個 Diablo II bot (暗黑破壞神II) 遊戲。由於某些理由 (大致上是為了修復某些東西)，我開始學習在 AutoIt 上撰寫腳本，所以我跑到網站上取得程式。大約過一段時間後 Jon 開始忙於 v3 開發，所以我也學了 C++ 語言。在 v3 版釋出後我將自己的舊腳本通通轉換成 v3。後來不管是我發現了問題還是因為某些功能的需要，反正在 AutoIt 接受修改原始碼後，我就開始學習 C++，這語言看來確實是一套相當不錯的解決方案。至於成為管理員的事，就像 JdeB 大，我覺得自己在論壇上真得是很笨，討厭阿。

Jpm

我已記不得遇到 AutoIt 是多久以前的事情了 - 不過到目前它一直都是很強大的腳本語言。我使用它來進行我的 Windows Beta 測試版的自動反安裝作業，所以每一次我都能擁有同樣的環境 (系統和使用者)。我可以在安裝時做其它的事情了，因為用 200Mhz 系統處理的速度實在非常慢...

直到 2003年 五月我決定幫法國人做 V2 版的法文翻譯，這時候 Autoit V3 原始碼已可以修改，所以我決定學更多關於 C 語言的東西和 Windows API 函式。我撰寫過 AutoItV2toV3 轉換器來轉換我的腳本 - 也許今天它看起來沒啥用處，不過至少它讓我的 C 語言程度改善很多。

我參與了一些 windows 版本或其它 OS 語系的自動化改良，還建立了一套測試反逆向工程的組件，它可以幫助我們實現在內部順利開發測試版的理想。就在 Larry 啟動他的 AU3GUI 計劃時，我還因此發現建立 GUI 是可行的，因此我直接將它整合進 V3.0 版本。

這段期間 Jon 實在很忙無暇顧及 AutoIt，所以我做了 BUG 回報及測試版本。我嘗試管理 BUG 回報論壇，同時也越來越有能力去分析/整合改良方案，也就是那一份我既熱愛且有餘力去改變的事....

JP ;)

譯註：whooooole -雜七雜八、哩哩扣扣的意思。


CREDITS
=======

AutoIt v3 is based on the original AutoIt program by Jonathan Bennett.

Programming
===========

Core Programming and framework (and style police)
-------------------------------------------------
- Jonathan Bennett <jon at autoitscript com>

Programming and Other Contributions
-----------------------------------
Names are listed in NO PARTICULAR ORDER.  The script commands that were influenced/created by the contributors
are also given where possible - if you are not mentioned and think you should be then drop me a mail.

- Larry Keys <larrydalooza at yahoo com>

    AutoIt Window Spy, AU3GUI and

    ControlFocus, ControlLeftClick, @IPAddressNN, FileGetSize, FileGetTime, FileOpenDialog,
    FileSaveDialog, FileSelectFolder, DiskSpaceTotal, DiskSpaceFree, PixelSearch, PixelGetColor,
    FileCreateShortcut, WinSetOnTop, FileExists, DriveGetDrive, CDTray, ControlSetText,
    ControlGetText, ControlCommand, ControlMove, ControlEnable, ControlDisable, ControlShow,
    ControlHide, WinGetClassList, IsAdmin, SplashImageOn, SplashTestOn, SplashOff
    ProgressOn, ProgressOff, ProgressSet, DriveGetLabel, DriveGetSerial, DriveGetFileSystem,
    DriveSetLabel, DriveGetType, MouseGetCursor, FileFindFirstFile, FileFindNextFile,
    ControlGetFocus

- David Nuttall <danuttall at rocketmail com>

    General C++ advice,
    StringIsAlpha, StringIsLower, StringIsUpper, StringIsDigit, StringIsAlNum, StringIsXDigit, StringIsSpace,
    StringIsASCII, RegDelete, Asc, DirRemove, DirCreate, Random, UBound, FileRecycle, IsArray, IsInt, IsFloat,
    IsString, StringStripWS, Mod, InputBox, variabletable.cpp rewrite and binary tree prototypes, new function
    lookup design/ideas, Redim, unified Structure stack, ContinueLoop, Util_MouseDown, Util_MouseUp (primary/secondary),
    Binary Search code for function lookup, StringRegExp... functions, initialize arrays, Floor, Ceiling,
    Const keyword to UDF parameters, AutoItSetOption rewrite, IsBool, variable assignment, Switch, ContinueCase, BitRotate

- J-Paul Mesnage <jpm at autoitscript com>

    v2 to v3 Converter, AU3GUI and

    Tireless work on regression testing (regressions usually caused by Jon),
    @OSServicePack, @OSBuild, @AutoItVersion, AutoItWinShow, AutoItWinWrite, SoundPlay, StringFormat
    @OSLang, Hex, AutoItWinGetText, _ Continuation, Single-line IFs, Dim/Global/Local same line initialisation,
    TrayTipDebug, better non-English keyboard support for Send functions, optional UDF parameters, GUI graphics,
    TCP functions, GUICtrlCreateMonthCal, Execute("expression"), Default keyword, isKeyword,
    OnAutoItExit extension, AutoIt Info Style and exStyle, @KBLayout

    Prototypes for: Error/include tracking code, Local/Global

- Jason Boggs <vampire dot valik at gmail com>

    Lots of ideas to make the AutoIt code that much more professional and maintainable.
    #include <> multiple directories, TrayTip, ToolTip, MemGetStats, new function lookup design/ideas,
    PID support in process functions and Run(), ProcessSetPriority, Assign, ConsoleWrite, ProcessList,
    WinSetTrans, IniReadSectionNames, IniReadSection, IniRenameSection, Enum, DllCall extensions,
    explicit Return @error/@extended, @AutoItPID, ConsoleWriteError, SetError extension, HWnd, IsHWnd

- Jos van der Zande <jvdzande at yahoo com>

    Maintainer of the Scite4AutoIt package.
    Misc bug fixes, Scite lexer, Standard include files.

- Tylo <tylo at start.no>

    Creator of Au3Check.
    Float lexing and double to string conversions.  Some math functions (tan, atan, etc.)
    vector_datatype.h, stack_datatype.h, variable_table.cpp rewrite (discontinued), new function lookup
    design/ideas, +=, -=, *=, /= operators

- Holger <Holger.Kotsch at GMX de>

    AU3GUI (especially Menus, Treeviews and ContextMenus) and

    FileGetShortcut, FileCreateShortcut, FileSelectFolder, @DesktopRefresh, Ping, Tray functions
    @HotKeyPressed, GuiCtrlSetImage extension, GuiCtrlListView iconview

- SvenP
    Obj/COM functions, Boolean support, GUICtrlCreateObj

- Dave Fulgham <DaveF@ditch.org>

    StdoutRead, StderrRead, StdinWrite, ConsoleRead

- Gary Frost <gafrost at gmail com>
    Standard include files.

- Jeremy Landes <jlandes at landeserve com>

    Standard include files compilation and

    XP Visual Styles manifest files.  Some math functions (Abs, Pow, Sqrt, etc.)
    @UserName, @TempDir, @UserProfileDir, @HomeDrive, @HomePath, @HomeShare, @LogonServer,
    @LogonDomain, @LogonDNSDomain

- Philip "CyberSlug" Gump <cyberslug at autoitscript com>

    Lots of early work on the helpfile and helpfile generation scripts.
    ControlCommand(GetCurrentCol)

- Ejoc
    DLLStruct... functions

- layer <at the forum>
    Beep, WinFlash

- /dev/null <at the forum>
    UDPStartup, UDPShutdown, UDPSend, UDPRecv, UDPOpen, UDPBind

- Garrett "The HardlyDeservesCreditFor20LinesOfCode" R. Mueller ;) <garrett at mailsnare.net>

    TimerInit, TimerDiff

External contributions and other sources used
---------------------------------------------

- Amir Szekely <kichik at netvision net il>

    ResourceEditor.cpp - Resource editing functions (works on 9x too)
    Thanks to Amir who coded the resource functions for the NSIS Installer and helped me
    get the code working with AutoIt.  Check out the NSIS installer at:
    http://nsis.sourceforge.net/site/index.php

- Gabriele Scibilia <http://www.geocities.com/gabriele_scibilia/>

    qmath.h - used with permission.


AutoIt Changelog
================

3.3.0.0 (24th December, 2008) (Release)

AutoIt:
- Windows 9x and Windows NT 4.0 Operating System support has been removed.

- Added: New flag for StringSplit() to not return the count in element 0.
- Added #328: StringToASCIIArray(), StringFromASCIIArray() functions.
- Added: New flag to Run()/RunAs() to fix issue #415 (Adds new Constants.au3 constant: $STDIO_INHERIT_PARENT).
- Added: New flag to all Run functions for better CUI compatibility (Adds new Constants.au3 constant: $RUN_CREATE_NEW_CONSOLE).
- Added #481: 11 pixel margin around the text in SplashTextOn() (Meets Vista UI guidelines).
- Added #468: Added @MSec macro for obtaining the current milliseconds for the current second.
- Added #277: @CPUArch macro to return the capability of the processor.
- Added #454: $FO_UTF8 allowing FileOpen() in Read mode for reading UTF8 files without BOM.
- Added: $FO_UTF16_LE, $FO_UTF16_BE allowing FileOpen() in Read mode for reading UTF16 files without BOM.
- Added #407: Documented that For...In loops are read-only.
- Added #645: IniDelete() now supports the Default keyword for the 3rd parameter.

- Fixed: Send() was incorrectly inserting a leading zero when using the {ASC 0xNNNN} format.
- Fixed #305: GUICtrlSetFont() for Combo causing highlight.
- Fixed #318: GUICtrlSetTip() on TreeViewItem must return 0.
- Fixed #339: GUICtrlDelete() crashes.
- Fixed #345: @OSVersion for Windows 2008.
- Fixed #366: AutoIt crash on bad syntax.
- Fixed #380: @OSVersion for Windows XP 64-bit Edition.
- Fixed #346: FileOpenDialog/FileSaveDialog filter length limit.
- Fixed #387: DllClose() and DllCallbackFree() crashing when an invalid handle used.
- Fixed #449: @SystemDir does not return SysWOW64 under X64 in 32-bit mode.
- Fixed #440: Fatal error when script ends with EOF (0x1A).
- Fixed #464: Example script for GUICtrlCreateAvi() did not work on Vista.
- Fixed #484: ObjGet() would crash when invalid files were specified.
- Fixed #501: ProcessGetStats() failed for processes running as other users (including SYSTEM).
- Fixed #92: DllStruct data truncated with char[]/wchar[].
- Fixed: GuiCtrlSetState($graphic, $GUI_HIDE) does not hide.
- Fixed: GuiCtrlSetResizing($graphic, ) not moving.
- Fixed: GuiCreate(...,Style without caption) does not resize properly.
- Fixed: GuiSetStyle(caption change) does not resize properly.
- Fixed: GuiCtrlSetState($listviewitem) does not return error.
- Fixed #562: Specifying the TITLE property caused all other properties to be lost (Window title matching).
- Fixed #569 TCPRecv doc example.
- Fixed #589: Some comparison operators did not return a boolean value.
- Fixed #583: Bad formatting of @MSEC in documentation.
- Fixed #574: Using 0 for the SendKeyDelay or SendKeyDownDelay removes the respective delay when using Send().
- Fixed #542: Crash with regular expressions.
- Fixed #531: Clarification of some of the remarks for GUICtrlSetGraphic().
- Fixed #539: StringSplit() with flag 2 and no matching delimiters wasn't returning the full string.
- Fixed #601: Tooltip return 0 when title length >99.
- Fixed #608: listView GUICtrlSetBkColor not redrawn.
- Fixed #628: GuiCtrlRead($ctxmenu, $adv) bad return (Saunders)
- Fixed #640: PCRE does not support \L, \l, \N, \U, or \u : doc updated
- Fixed #642: Installer now correctly opens the merged helpfile to the history page instead of the AutoIt-only helpfile.
- Fixed #646: Call() now sets specific @error and @extended values when it fails to find a function.
- Fixed #669: Typo in Dec() example.
- Fixed #659: Documented that UNC paths are not supported when using FileSelectFolder().
- Fixed #671: Crash when using $WS_EX_MDICHILD without specifying a valid parent.
- Fixed: Crash when using BinaryToString() with invalid UTF16 input string.  BinaryToString() now has new @error codes to support diagnosing invalid input.
- Fixed #743: AutoIt Crash when Tray functions are use with invalid ID.
- Fixed #748: AutoIt Crash with DllCall(0,...).

- Changed #393: Documented that SoundSetWaveVolume() works differently in Windows Vista.
- Changed: PCRE regular expression engine updated to 7.8.
- Changed: @ProcessorArch changed to @OSArch as it was misleading.
- Changed: Size limits removed from RegRead() and RegWrite() (previously 64KB for some registry types).
- Changed: RegRead() and RegWrite() no longer use hex strings for REG_BINARY types - native binary datatypes are enforced.

Aut2Exe:
- Fixed #436: Compression level was ignored when performing compilation from the GUI.
- Added #460: More verbose UPX errors.

AutoItX:
- Changed: Native DLL: All string methods in the native API are now Unicode. The majority of functions no longer have ANSI versions.
- Added: COM: WinList method.
- Fixed: Native DLL: Return strings were sometimes incorrectly terminated.
- Fixed: PixelChecksum() not returning correct values.

UDFs:
- Added: _GDIPlus_StringFormatSetAlign
- Added: _StringExplode()
- Added: _GDIPlus_ImageGetFlags, _GDIPlus_ImageGetHorizontalResolution, _GDIPlus_ImageGetPixelFormat, _GDIPlus_ImageGetRawFormat
         _GDIPlus_ImageGetType, _GDIPlus_ImageGetVerticalResolution
- Added: _PathGetRelative
- Added: _ArrayCombinations, _ArrayPermute, _ArrayUnique
- Added: _WinAPI_CreatePen, _WinAPI_DrawLine, _WinAPI_LineTo, _WinAPI_MoveTo, _WinAPI_GetBkMode, _WinAPI_SetBkMode
- Added: _WinAPI_CombineRgn, _WinAPI_CreateRectRgn, _WinAPI_CreateRoundRectRgn, _WinAPI_SetWindowRgn
- Added: _ExcelHorizontalAlignSet, _ExcelFontSetProperties, _ExcelBookAttach
- Added: _WinAPI_SetEndOfFile, _WinAPI_SetFilePointer
- Added: Missing FrameConstants.au3
- Added: Excel UDFs
- Added: _Timer_GetIdleTime, _WinAPI_GetWindowPlacement, _WinAPI_SetWindowPlacement
- Added #332: Remarks to _GUICtrlStatusBar_Create
- Added #275: _GDIPlus_GraphicsFillPolygon
- Added: _GUICtrlTab_ClickTab
- Added: _GUICtrlComboBoxEx_GetUnicode, _GUICtrlComboBoxEx_SetUnicode

- Removed: _StringSplit, no longer needed

- Fixed #693: _DateTimeFormat() time format
- Fixed #701: _GUICtrlListView_ClickItem() Clicks in the wrong place when $fMove = True
- Fixed #700: _GUICtrlTreeView_ClickItem() Clicks in the wrong place when $fMove = True
- Fixed #703: _GUICtrlListBox_ClickItem() Clicks in the wrong place when $fMove = True
- Fixed #705: _GUICtrlToolbar_ClickButton() Clicks in the wrong place when $fMove = True
- Fixed #707: _GUICtrlMonthCal_Create() width and height
- Fixed #674: _GUICtrlTab_ClickTab() Clicks in the wrong place when $fMove = True
- Fixed #610: _WinAPI_CreateFile() wrong return value upon failure
- Fixed #619: _GUICtrlListView_SetItemSelected memory allocation
- Fixed #617: corrections to six GDI+ ImageGet help file examples
- Fixed #621: _StringAddThousandsSep don't work with negative number
- Fixed #635: _GuiCtrlTab_ClickTab() docs list unused $fPopupScan parameter
- Fixed #650: Missing BorderConstants.au3
- Fixed #656: _FileCountLines returns 0 if file only contains 1 line
- Fixed #600: _ArraySearch fails with 2D array.
- Fixed #603: _FileReadToArray() does not return an array if the file contains only a single line of text.
- Fixed #495: _GUICtrlTreeView_GetTree returns only 1 parent
- Fixed #503: _Date_Time_FileTimeToLocalFileTime example
- Fixed #510: _GUICtrlListView_ClickItem: If columns inside listview exceed visible area, clicks outside of the control
- Fixed #500: _ChooseColor run on 64bit
- Fixed #517: WinAPI UDF - bad error checking after DllCall()
- Fixed #533: Array functions dimension check
- Fixed: various Timer Functions
- Fixed #506: _FileCountLines deal with all common line-end-chars
- Fixed #485: WinAPI missing related links in helpfile
- Fixed #571: return value doc for _GUICtrlListBox_FindString, _GUICtrlListBox_GetAnchorIndex and _GUICtrlListBox_GetText
- Fixed #586: _GuiCtrlListView_SetGroupInfo() destroyed group ID's.
- Fixed #516: _ChooseFont run on 64bit
- Fixed #595: _WinAPI_SetWindowsHookEx help file description of $WH_KEYBOARD_LL
- Fixed #465: _DateTimeSplit if seconds omitted defaulted to -1, now defaults to 0
- Fixed: Excel Examples
- Fixed #422: _GDIPlus_GraphicsSetSmoothingMode $iSmooth accepts only 0 - 4, doc updated
- Fixed #388: _GUICtrlToolbar_SetButtonSize Example
- Fixed #400: SQLite.dll.au3 @ProcessorArch replaced with @OSArch
- Fixed #390: _viPrintf replaced return type
- Fixed #371: _GDIPlus_Startup return value
- Fixed #368: _ArrayToClip return value
- Fixed #361, #362: _GUICtrlListView_InsertItem doc
- Fixed #285: _ChooseColor Example
- Fixed #299: _GUICtrlTab_SetItemText buffer length for Unicode
- Fixed #292: _EventLog__Clear not clearing log when backup parameter is empty
- Fixed #258: _ClipBoard_GetData
- Fixed #294: _FileReadToArray where the file contains no @LF
- Fixed #303: Clock.au3 in Examples\GUI\Advanced
- Fixed: _GUICtrlListView_SetItemEx text buffer
- Fixed #320: _WinNet_EnumResource struct pointers
- Fixed #321: _GUICtrlStatusBar_GetText buffer length for Unicode

- Changed: StringAddThousandsSep params in regards to #442
- Changed #733: Doc for _GUICtrlButton_SetImageList
- Changed: _SQLite -> 3.6.7
- Changed #442: _StringAddThousandsSep() allows for regional settings
- Changed #290: _GDIPlus_DrawImagePoints
- Changed: _Soundxxxx functions
- Changed #599: _FileListToArray speed optimization

3.2.12.1 (12th June, 2008) (Release)

AutoIt:
- Fixed #309: RunAs() and RunAsWait() now use @SystemDir as the working directory instead of @WorkingDir when a user-supplied working directory is not specified.
- Fixed #325: contextmenuitem not firing events.
- Fixed #282: Icon transparency refresh when on tab regression.
- Fixed #360: RunAs() under Windows 2000.

3.2.12.0 (16th May, 2008) (Release)

AutoIt:
- Removed: Unnecessary optional parameter from ProcessClose().
- Removed: RunAsSet().  (Replaced with RunAs() and RunAsWait())
- Removed: RunErrorsFatal option ( Opt() ).
- Removed: ColorMode option ( Opt() ).

- Changed: @Unicode renamed in @AutoItUnicode. @Unicode is an alias for now. It will be removed > 3.2.14.0
- Changed: The behavior of StdoutRead(), StderrRead(), StdinWrite() and ConsoleRead() has been changed.
- Changed: PCRE regular expression engine updated to 7.6.
- Changed: AutoIt internet functions (e.g. InetGet()) now use "AutoIt" as a user-agent.  Previously using blank
            which was blocked by many websites.
- Changed: ControlClick() now accepts the same mouse buttons as MouseClick() - left/right/middle/primary/secondary/main/menu.
- Changed: Maximum controls in a GUI window 4093 -> 65532.
- Changed: @OSVersion can now return "WIN_2008" for Windows Server 2008.

- Added: RunAs(), RunAsWait().
- Added: GUISetAccelerators().
- Added: REGEXPCLASS in Advanced Window and control definitions.
- Added: X, Y, W, H in advanced window/control definitions.
- Added: DllCall() new types int_ptr, uint_ptr, long_ptr, ulong_ptr. Special types that change size on x86/x64.
- Added: "REG_QWORD" type for RegWrite().
- Added: HotKeySet() modified to work with the {} notation.
- Added: FileReadLine( ,-1) read last line.
- Added: Std I/O redirection works with RunAs...().
- Added: Std I/O merged flag for using the same stream for stdout/stderr.
- Added: Std I/O supports binary data.
- Added: ConsoleWrite()/ConsoleWriteError() now return the amount of data written.
- Added: Remarks in Run() about how to close streams/release resources associated with STDIO.
- Added: StdioClose() function to force STDIO data closed for a process.
- Added: ProcessClose() now closes processes started by other users.
- Added: ProcessWaitClose() returns exitcode in @extended
- Added: Pixel...() can specified a window handle as last parameter.
- Added: "start" and "count" parameters added to StringInStr().
- Added: GUICtrlSetDefColor(), GUICtrlSetDefBkColor().
- Added: Added parent window parameter to MsgBox(), FileSelectFolder(), FileOpenDialog(), FileSaveDialog().

- Fixed: DllCall() setting wrong @error values.
- Fixed: BlockInput() returns errors.
- Fixed: WinWaitActive() not matching (more frequent with Windows Vista).
- Fixed: GUICtrlSetState($GUI_SHOW) on hidden radio on an active tab.
- Fixed: SciTe Lite not installed in the AutoIt Choosen release dir.
- Fixed: WinMove() with Speed = 0 crash the script.
- Fixed: Mysterious return value of 1 when no explicit value was set.
- Fixed: ControlCommand(), "GetLineCount"
- Fixed: _FileListToArray() when using root drive dir as c:\ under Win9x.
- Fixed: TraySetState(4) flashing tray icon for Windows Vista.
- Fixed: ProcessExists() wrong return.
- Fixed: StringRegExp() crashing under Win95.
- Fixed: Handle leak when using Run() with I/O redirection.
- Fixed: Disabled input control background on Tab.
- Fixed: GUICtrlDelete() of a tab if two GUI windows are used.
- Fixed: AutoIt crash in Random() when range exceeds 2^31.
- Fixed: #include parsing error detection.
- Fixed: Array entry passed Byref to a UDF.
- Fixed: FileSetTime() erronously rounds UP on non NTFS partition.
- Fixed: STDIO redirection sometimes failed on Windows 9x.
- Fixed: IniReadSectionNames() returning incorrect number of sections under Win9x.
- Fixed: AutoIt tray icon removal on script exiting.
- Fixed: AutoIt crash when removing ObjEvent() object.
- Fixed: ObjEvent() handler can destroy return of AutoIt Function : as winwait("title") can return 0.
- Fixed: Dirmove() on different volume.
- Fixed: Crash with RegRead() and REG_MULTI_SZ on x64.
- Fixed: GuiCtrlListView() behind BG Picture. Doc updated.
- Fixed: Various Edit control focus and DefPushButton issues.
- Fixed: ControlTreeview() returning @error=1 on success.
- Fixed: COM objects could lose numeric precision.
- Fixed: StringReplace() with start float number.
- Fixed: ControlCommand() "SelectString" wrong selection.
- Fixed: StringSplit() flag=1 delimiters not case sensitive.
- Fixed: In advanced Window descriptions only semi-colon must be escaped.
- Fixed: ObjGet() memory leak.
- Fixed: Modified AutoUpdateIt.au3 to work under x64.
- Fixed: Resizing GUI before GUISetState().
- Fixed: Radio events fired when GUI reactivated.
- Fixed: GUICtrlDelete() on contextMenuItem.
- Fixed: An attempt to FileDelete() a file that was just executed with RunWait() would sometimes fail.
- Fixed: GUI performance problem when creating a large number of windows.
- Fixed: GuiGetCursorInfo() with swapped mouse buttons.
- Fixed: Random(Min,Max,1). Previously this would never actually return Max,
    so if Max was artificially incremented by one the script will now need to be changed.

AutoItX:
- Added: ControlTreeView().
- Fixed: ControlListView() for native DLL version.

Aut2Exe:
- Added: Option to compile scripts as console applications.

AU3Info:
- Changed: Controls are always highlighted when using the finder tool.
- Changed: Controls are not highlighted by default.
- Changed: Control description gives the advanced version of class and instance.

SciTE "lite":
- Updated the source to version 1.76
- Added Save Dialog extension.

UDFs:
 - See the script breaking changes page.

3.2.10.0 (25th November, 2007) (Release)

- Changed: DllCall() new method of passing types by reference using *.
- Changed: DllCall(): short_ptr, long_ptr, int_ptr types deprecated.  Use short*, long* and int* respectively.
- Changed: Limits on Execute() removed.

- Changed: PCRE regular expression engine updated to 7.4.

- Added: 64bit (x64) versions of AutoIt, Aut2Exe, Au3Info and AutoItX.
- Added: DllCallbackRegister(), DllCallbackGetPtr() and DllCallbackFree()
- Added: DllCall() now accept doubles, int64, uint64, wparam and lparam types.
- Added: SendKeepActive().
- Added: ControlTreeView().
- Added: ProcessGetStats().
- Added: VarGetType().
- Added: @AutoItX64 macro.
- Added: Au3Info : Handle info for windows and controls.
- Added: DllStructCreate() added "align" keyword to set structure alignment.

- Fixed: Control...() functions using CLASS and TEXT together sometimes incorrect.
- Fixed: Control...() functions using CLASSNN sometimes incorrect.
- Fixed: Windows Vista taskbar previews causing problems with windows matching.
- Fixed: $var = $var was not giving an error when $var didn't already exist.
- Fixed: GUICtrlSetImage() sizing regression from 3.2.4.9.
- Fixed: GUICtrlCreateListView() with no column.
- Fixed: _GUICtrlListViewInsertColumn() after _GUICtrlListViewDeleteColumn() of the first column of a ListView control.
- Fixed: Extra notification on colored button.
- Fixed: IniReadSectionNames() for [] sections.
- Fixed: Opt("WinTitleMatchMode", Default) fatal error.
- Fixed: GUICtrlSetStyle() with $ES_READONLY bad $WS_TABSTOP.
- Fixed: AutoIt Crash on exit if Win...() used with a Title being a COM object.
- Fixed: ProcessExists() on service process under Win2K.
- Fixed: DefPushButton behavior.
- Fixed: ControlCommand(SelectString) order selection.
- Fixed: Array cannot have 2^24 entries.
- Fixed: GuiCreateMenu() on a windows without title and without client area.
- Fixed: WinWaitActive() sometimes failing after a WinActivate().
- Fixed: _SQLite_SQLiteExe() referencing by default "Extras\SQLite\SQlite3.exe".
- Fixed: _Sound...() when refering to a file with "!" characters.
- Fixed: Looping GUIRegisterMsg() doesn't unregister.
- Fixed: Focus on ES_READONLY edit control.

3.2.8.1 (10th September, 2007) (Release)

- Fixed: Possible crash with StringRegExp().

3.2.8.0 (8th September, 2007) (Release)

- Changed: General speed improvements (currently up to 24% in some cases compared to 3.2.6.0).
- Changed: PCRE regular expression engine updated to 7.3.
- Changed: Recursion-based code limits relaxed.

- Added: wchar type added to DllStructCreate().
- Added: WinMove() speed parameter.

- Fixed: Crash on AutoIt exit if TrayCreateItem() is not deleted.
- Fixed: AutoIt crash on bad parameter when calling TrayCreateMenu()
- Fixed: Character positions used in StringRegExp() not correct for characters > 127 (accents, non-Western)
- Fixed: ProcessExist() under Windows 9x.
- Fixed: GUISetState(@SW_DISABLE) not disabling keyboard input.
- Fixed: Sometimes AutoIt crashes on DllStructGetData() with char[] types.
- Fixed: Au3Info restoring last settings at startup.
- Fixed: Better handling of notifications when using colored buttons.
- Fixed: ControlGetText() crash on Scite windows.
- Fixed: $LVSCW_AUTOSIZE column truncates display string.
- Fixed: Incorrect listview creation with GUICtrlCreateListView().
- Fixed: Memory leak when AutoIt needed to get long file name.
- Fixed: ListviewItem not created after other child Window creation/deletion.
- Fixed: ControlGetFocus() returning bad ClassNN values.
- Fixed: Detection of invalid CONTINUELOOP statement.

3.2.6.0 (25th August, 2007) (Release)

- Changed: IconId in all GUI functions is now the same as GUICtrlSetImage().

WARNING: Previous scripts using GUICtrlSetImage(), GUISetIcon(), TraySetIcon() and TraySetPauseIcon()
    may display a wrong Icon. To get the same icon "if nId > 0 Then newId = - nId - 1".

- Changed: AutoIt .a3x and compiled script format.  Exe2Aut will only decompile 3.2.5.1
           and earlier files. No ExeAut utility is supplied for ongoing versions.

- Changed: General performance improvements (currently around 30-40% over 3.2.4.9)
- Changed: Limited Unicode support added in regular expressions.
- Changed: ControlMove() just resizing as WinMove() if X=Y=Default.
- Changed: PCRE engine updated from 7.0 to 7.1
- Changed: Suppress delay when speed=0 in MouseMove().

- Added: GUIGetStyle().
- Added: byte and ubyte type to DllCall().
- Added: ClassnameNN in control and summary info in Au3Info.
- Added: Float type to dllCall. (Thanks PaulIA)
- Added: AU3Check v1.54.8 support for both "#AutoIt3Wrapper_plugin_funcs" and "#Compiler_plugin_funcs".
- Added: Extra parameter in ProcessClose() to close Stream handles.

- Fixed: AutoIt crash on WinWait("","text") when a Scite is open.
- Fixed: Some crashes on Chinese systems during Unicode/ANSI conversions.
- Fixed: Aut2Exe crashing on Chinese systems when running in ANSI.
- Fixed: Wrong Notification on {ENTER} after clicking on a listviewItem.
- Fixed: Wrong resetting of image on listviewitems if image set on the listview.
- Fixed: Resizing of listview control.
- Fixed: @error not set on bad WinGetPos() return.
- Fixed: LVM_EDITLABEL hogging cpu.
- Fixed: AutoIt (non UNICODE version) crash with some COM objects.
- Fixed: GUISetState() on GUI with W=0 or H=0.
- Fixed: GUI control Tip not reappearing after a click or timeout.
- Fixed: GUI controls not at the right position if a Control menu is in use.
- Fixed: EnvUpdate() in UNICODE AutoIt version not working since 3.2.3.3.
- Fixed: FileRead(..., count) returning count-1 chars.
- Fixed: Unicode filenames in FileInstall().
- Fixed: LVS_EX_HEADERDRAGDROP extendedstyle.
- Fixed: UpDown control shows through tabbed pages.
- Fixed: GUICtrlSetState on UPDOWN control without changing the state.
- Fixed: FileInstall() in compiled scripts causing GUI problems.
- Fixed: ControlGetFocus() on control not created with AutoIt GUI.
- Fixed: @AutoItPID and processlist coherency under Win9x.
- Fixed: GUICtrlSetResizing not returning error on non resizable control.
- Fixed: Regression for ControlSend SHIFTDOWN/UP since 3.2.3.13.
- Fixed: Drag and drop on a listview control after clicking on its header.
- Fixed: Support "resource only" dlls for GUISetImage().
- Fixed: Default minimum for GUICtrlSetLimit() set to 0.
- Fixed: Z order after GUICtrlSetStyle() on edit or input control.
- Fixed: FileReadLine() getting bad cached data when reading specific line numbers with file handles.
- Fixed: Slight lag in GUIGetMsg() under certain circumstances.
- Fixed: StringReplace() and occurances parameter.
- Fixed: GuiCtrlSetFont() on Tab control.
- Fixed: Leading blanks before #include cannot be compiled.
- Fixed: Notification on ENTER on Colored button.
- Fixed: RegWrite() setting bad registry entry in certain circumstances.
- Fixed: AutoIt hogging CPU when text msgbox too big.
- Fixed: ControlSend() sometime to wrong control when using empty controlid.
- Fixed: ProcessExists() under Win2K with processname >15 chars.
- Fixed: Int() with string comparison wrong match.
- Fixed: InetGetSize() in unicode version returns 0.
- Fixed: GUICtrlCreateListview() with more than 254 columns.
- Fixed: AutoIt Crash on recursive RegExp.
- Fixed: BitRotate() with left bit set.
- Fixed: Filemove() returning 1 without any move.
- Fixed: FileRead() returning chr(0) in ANSI mode.
- Fixed: Au3Info control coords relative to client.
- Fixed: StringInStr() not returning 0 when searching backward and search length greater than string.

3.2.4.9 (25th May, 2007) (Release)

- Added: StringCompare()

- Fixed: Basic string comparisons were not working with locale as in previous versions.

3.2.4.8 (23rd May, 2007) (Release)

- Fixed: Errors with non-western codepages and ANSI format scripts.

3.2.4.7 (22nd May, 2007) (Release)

- Added: Aut2Exe options for forcing ANSI mode compilation (/ansi and /unicode)
- Added: StringToBinary()
- Added: Additional unicode related options for BinaryToString()

3.2.4.6 (20th May, 2007) (Release)

- Fixed: StringReplace() and occurances parameter.

3.2.4.5 (20th May, 2007) (Release)

- Added: BinaryToString() for binary buffer to ANSI string quick conversions.
- Added: @Unicode to show if AutoIt is being run in Unicode or ANSI mode.

- Changed: StringReplace() speeded up - a lot.
- Changed: Au3Info is now resizable.

- Fixed: Chr(0) now properly works with Binary()

3.2.4.4 (17th May, 2007) (Release)

- Fixed: Chr(0) now acting more sensible (now acts in a similar way to VBScript).

3.2.4.3 (17th May, 2007) (Release)

- Fixed: FileRead() not working properly with unicode files.

3.2.4.2 (15th May, 2007) (Release)

- Changed: Au3Info graphical tweaks and Summary tab.

- Fixed: FileReadLine() getting bad cached data when reading specific line numbers with file handles.
- Fixed: Slight lag in GUIGetMsg() under certain circumstances.

3.2.4.1 (13th May, 2007) (Release)

- Added: ChrW() and AscW() for unicode operations.

- Fixed: Chr() and Asc() for character codes 128-255 in unicode mode.
- Fixed: Unicode BOM was not being written in file append modes if the file was empty.
- Fixed: Error in Include\GuiCombo.au3 and Include\IE.au3.

3.2.4.0 (10th May, 2007) (Release)

Big Changes:

- AutoIt is now compiled for Unicode!  AutoIt3.exe is Unicode - AutoIt3A.exe is ANSI.
- Au3Info tool rewritten.
- Binary data functions completely rewritten - scripts using these functions will need to be changed.

Other Changes:

- Added: New modes for FileOpen() to force Unicode and binary operations.
- Added: BinaryLen(), BinaryMid()
- Added: Colored GUI buttons.
- Added: DllStruct...() can reference elements by name rather than index.

- Changed: Removed restrictions on the maximum number of #include directives.
- Changed: Removed restrictions on the maximum number of DllOpen() handles.
- Changed: Removed restrictions on the maximum number of open files.
- Changed: Removed restrictions on the maximum number of hotkeys.
- Changed: Performance improvements in StringStripWS().
- Changed: Binary data in variants are now treated as a special type, separate from normal strings.
- Changed: BinaryString() renamed to Binary()
- Changed: IsBinaryString() renamed to IsBinary()
- Changed: ControlClick() can now click a control at a certain position.
- Changed: ControlClick() can now properly simulate double-clicks.
- Changed: ControlClick() no longer forces the activation of the parent window (up to the user now).
- Changed: ControlClick() related coordinates added to Au3Info.
- Changed: Improved the searches that can be done for windows/controls/instances.
- Changed: From DEFAULT_QUALITY to PROOF_QUALITY for Change/Set Font functions.
- Changed: x^y compatible with C99 standard.

- Fixed: Possible crash when using StringStripWS(), flag 4 and empty strings.
- Fixed: GUICtrlSetLimit() for UpDown controls wher min = max.
- Fixed: GuiCtrlSetTip() not always working correctly.
- Fixed: Slow GUI tab redrawing under Windows Vista fixed.
- Fixed: HotKeySet bad notification.
- Fixed: FileGetAttrib() on pagefile.sys.
- Fixed: Invalid default parameter in GUICtrlSetData() not detected.
- Fixed: Assign does return error on array element.
- Fixed: FileOpen("test.txt", 2+8) returning error.
- Fixed: Error detection in Enum statement.
- Fixed: Opt("WinTitleMatchMode").
- Fixed: Stack corruption resulting from improper use of DllCall() now gracefully aborts the script instead of hard crashing.
- Fixed: Crash when reading empty REG_MULTI_SZ.
- Fixed: Round() not returning an integer.
- Fixed: ControlSend() to empty "" ctrl fixed for inactive window. Also shift state behavior.
- Fixed : O^(-1).
- Fixed: Non detection of illegal statement.
- Fixed: HotKeySet("^{PAUSE]",... notification.
- Fixed: {CTRLBREAK} ->{BREAK} as ctrl is user responsability.
- Fixed: $var = Default passed as parameter to Com object.
- Fixed: Edit control would always have focus the first time the GUI was displayed even if it shouldn't.  This behavior also ignored $GUI_FOCUS.
- Fixed: range value for seed Number in SRandom().
- Fixed: Fileread crash if no count in raw mode.
- Fixed: Opt("WinTitleMatchMode", <0) really matching case insensitive.
- Fixed: FileSetAttrib/FileSetTime wrong setting.
- Fixed: Execute/Call recursive overflow display error message.
- Fixed: Aut2exe warning message if icon not found.
- Fixed: WinGetTitle() returns 1 on error.
- Fixed: Memory leak on keyword variable deallocation.

3.2.2.0 (23rd December, 2006) (Release)

- Added: StringRegExp() and StringRegExpReplace() regular expression support (Perl compatible)
- Added: Regular expression support for Window title matching.
- Added: ShellExecute() and ShellExecuteWait() functions.
- Added: #RequireAdmin for UAC/Windows Vista
- Added: Windows Vista help file entry.
- Added: GuiCtrlSetState() $GUI_DROPNOTACCEPTED.
- Added: $GUI_FOCUS, $GUINOFOCUS for listviewitem control.
- Added: IsDllStruct()
- Added: SRandom() to set seed for random number generation.
- Added: WinTitleMatchMode for case insensitive matching.
- Added: IconId can be reference by ordinal value if negative 1-based index is use.
- Added: CompiledScript string file info for compiled script.
- Added: Support >32x32 icon from .exe/.dll in GUICtrlCreateIcon or GUICtrlSetImage.
- Added: Expanded GUICtrlSetTip() to allow creation of tooltips with titles, icons and using the balloon tip style.
- Added: Tooltip supports Default keyword.
- Added: Remark added to _PathSplit() mentioning that it does not accept command line strings, only paths.
- Added: 2 UDF's to GUIStatusBar.au3.
- Added: GUICtrlCreateIcon and GUICtrlSetImage can select in multiple icon file by name.
- Added: @KBLayout to retrieve the current keyboard configuration.
- Added: ToolTip() option to ensure the tooltip is always displaying on a monitor.
- Added: IniWriteSection() function.
- Added: @extended error code on DriveMapAdd error.
- Added: Listview Alternate coloring with $GUI_BKCOLOR_LV_ALTERNATE.

- Removed: old WinShow, TimerStart and TimerStop functions.

- Changed: Performance improvements (up to 100% on some scripts!).
- Changed: @error set to WinAPI GetLastError() for Run().
- Changed: Small tweak to Floor() to ensure it is not as susceptible to floating point precision errors.
- Changed: Small tweak to Ceiling() to ensure it is not as susceptible to floating point precision errors.
- Changed: PixelChecksum() is now over 30x faster.
- Changed: FileGetVersion() extra parameter to retrieve string file info.

- Fixed: MsgBox() timeout on Windows Vista.
- Fixed: GuiCtrlRead on listview control when sorted.
- Fixed: @OSVERSION on Windows 9x.
- Fixed: GuiGetCursorInfo() with Handle not retrieving mouse click info.
- Fixed: DllCall() crashes when using uint, ushort.
- Fixed: List control height when font size changes.
- Fixed: GUICtrlSetImage() not testing icon on error.
- Fixed: @ScriptDir equal @WorkingDir for rootdir (x:\).
- Fixed: GUIGetCursorInfo() (winhandle) when child not active.
- Fixed: _StringAddComma(). (Thanks RazerM, by Smoke_N)
- Fixed: drag & drop $GUI_EVENT_DROPPED notififation on edit control.
- Fixed: Coherency of type parameter for DLLCall() and DLLSructCreate()
- Fixed: Default keyword didn't always work correctly with COM objects.
- Fixed: COM property write fails when using arguments
- Fixed: Send/ControlSend for US international keyboard
- Fixed: Send/ControlSend char>=chr(128) for english keyboards.
- Fixed: COM property write fails when using arguments.
- Fixed: MsgBox() with task modal flag left GUI's disabled on timeout.
- Fixed: Error reporting by messagebox even with /ErrorStdOut.
- Fixed: GUICtrlSetImage default icon value for Icon Ctrl.
- Fixed: GUIRegisterMSG() destroyed @error.
- Fixed: $LVS_SORTASCENDING with GUICtrlSetImage icon gave bad display.
- Fixed: Some Object Collections could not be parsed in one AutoIt statement.
- Fixed: Bad screen updating of already unchecked radiobuttons.
- Fixed: Tray icon tooltip not displaying the scriptname when compiled.
- Fixed: UDP... return code on error.
- Fixed: UDPRecv() crashed on bad parameter.
- Fixed: COM was corrupting floating point values.
- Fixed: GUICtrlSetState doc remarks about menu control.
- Fixed: Refresh after a GUICtrlSetBkColor().
- Fixed: Crash on line begining with ~  : "Unable to parse line".
- Fixed: IniReadSectionNames() returned bogus data in Windows 98 when the INI file was empty or did not exist.
- Fixed: @compiled when the script is compiled.
- Fixed: Send() to italian keyboard.
- Fixed: MouseMove() in secondary screen.
- Fixed: StringInStr() not converting to string search parameter.
- Fixed: Int() of a binarystring.
- Fixed: ControlSend sending() special characters.
- Fixed: Crash in Au3exe with badly formed input file in FileInstall().
- Fixed: Wrong execution of a compiled script containing FileInstall() inside #CS-#CE.
- Fixed: FileInstall() referencing a file without any path will reference it from the ScriptDir to be coherent with the compiled script.
- Fixed: Aut2exe crashed using cmdline with shortnames. (Thanks The Kandie man)
- Fixed: Tooltip state (such as icon or title) was showing up on subsequent tooltips that didn't want those items.  This affected both ToolTip() and GUICtrlSetTip().
- Fixed: GUIRegisterMSG() destroy @error.
- Fixed: $LVS_SORTASCENDING with GUICtrlSetImage() icon bad display.
- Fixed: Wrong default arguments for _ArrayToString().
- Fixed: Bad "#" instruction inhibit whole script.
- Fixed: Installer SciTE bad link creation.
- Fixed: Uninstaller include file removal

3.2.0.1 (13th August, 2006) (Release)

- Fixed: (AU3INFO) Buffer overrun in control code.
- Fixed: Exe2Aut.exe was missing its digital signature.

3.2.0 (12th August, 2006) (Release)

- Added: COM object support.
- Added: Aut2Exe can now created .a3x encoded files (similar to .zip for .au3).
- Added: Support for custom tray icons.
- Added: "default" keyword.
- Added: IsKeyword() so "default" keyword can be used as parameter in a user function call.
- Added: Boolean support and keywords of 'false' and 'true'.
- Added: IsBool()
- Added: +=, -=, *=, /= operators.
- Added: DLLCall() cdecl and stdcall support.
- Added: DLLStruct... functions.
- Added: Limited TCP and UDP functions.
- Added: Added support for reading and writing stdio.
- Added: ConsoleRead(), ConsoleWriteError().
- Added: Ability to initialize arrays in DIM and CONST keywords.
- Added: Switch, EndSwitch structure.
- Added: HWnd() and IsHWnd() functions.
- Added: BinaryString(), IsBinaryString() functions.
- Added: FileCreateNTFSLink().
- Added: /AutoIt3ExecuteScript command line option.
- Added: Call() now supports parameters.
- Added: Execute()
- Added: @HotKeyPressed macro.
- Added: Unary NOT operations on strings are now allowed. A NOT operation on a non-empty string will result in FALSE.
- Added: Beep() and WinFlash() functions.
- Added: Floor() and Ceiling() functions.
- Added: SetError can optionally set @extended.
- Added: RegRead, RegEnumVal return the type of the value in @extended.
- Added: FileSaveDialog(), FileOpenDialog() supports multiple filter groups.
- Added: @ScriptLineNumber, @ProcessorArch, @AutoItPID.
- Added: BitRotate().
- Added: Fileopen(), FileCopy(), FileMove() additional flags to create non existent subfolders.
- Added: FileRead(), FileWrite() work with binary files.
- Added: (GUI) GUICtrlSetData text for treeview.
- Added: (GUI) $WS_EX_MDICHILD support for GUICreate().
- Added: (GUI) GUICtrlCreateGraphic(), GUICtrlSetGraphic().
- Added: (GUI) Opt('GUIEventOptions',1) to suppress window action when clicking on Minimize,restore or Maximize buttons.
- Added: (GUI) Right-click support for List/Treeview GUI control.
- Added: (GUI) GuiCtrlRead return ControlID if Opt("GUIEventCompatibilityMode',2).
- Added: (GUI) GUICtrlCreateMonthCal().
- Added: (GUI) Opt("GUIDataSeparatorChar",...).
- Added: (GUI) GUICtrlCreateObj().
- Added: (GUI) GUICtrlSetColor(), GUICtrlSetBkColor(), GUICtrlSetImage() for ListviewItem controls.
- Added: (GUI) GuiSwitch tabitemID optional parameter to allow dynamic control creation on a tabitem.
- Added: (GUI) GuiCtrlListView support Icon view.
- Added: (GUI) $GUI_WS_EX_PARENTDRAG Allow the label or pic control to be used as the title bar to drag the whole the parent window.
- Added: (GUI) GUICtrlGetHandle().
- Added: (GUI) $GUI_EVENT_DROPPED @GUI_DRAGID,@GUI_DROPID.
- Added: (GUI) GuiSetCursor(16),GuiCtrlSetCursor(16) hide the cursor.
- Added: (GUI) Allow Dragfile to any control. @GUI_DRAGFILE contain the filename to be used in the $GUI_EVENT_DROPPED.
- Added: (GUI) GUIRegisterMsg() to work with GUI WM_Message-routines at runtime.
- Added: (GUI) GUICtrlRegisterListViewSort() to create a real sorting routine for GUI ListView's.
- Added: (GUI) Icons for tab items.
- Added: (AU3INFO) AutoIt Windows Info : Now shows Style and exStyle values for the controls.

- Changed: #include search algorithm modified.
- Changed: The /c command line option has been replaced by /AutoIt3ExecuteLine.
- Changed: RegEnumKey and RegEnumVal return more precise @error to help diagnostic.
- Changed: Return,@error, @extended have to be explicit to be return by an UDF.
- Changed: FileFindFirstFile no longer returns "." or "..".
- Changed: Set _ to be a continuation character ONLY after whitespace.
- Changed: FileClose with an invalid handle no longer triggers an AutoIt runtime error.
- Changed: Fatal error message is now displayed if DLLCall cannot be executed.
- Changed: The default setting on Au3info was changed so that it doesn't highlight controls.
- Changed: RegEnumKey and RegEnumVal return more precise @error values to help diagnostics.
- Changed: "OnAutoItExit" function is now called on system shutdown or user logoff.
- Changed: Opt() with just the "option" will now return the current value for that option.
- Changed: DllCall @error is set when function not found.
- Changed: SplashTextOn() opt=32 to center vertically.
- Changed: (GUI) GUICtrlCreateList now forces the style LBS_NOTIFY.
- Changed: (GUI) GUICtrlCreateIcon default size is 32x32.

- Fixed: ContinueCase to keywords allowed after IF.
- Fixed: Mouse... invalid button definition.
- Fixed: IniDelete() could create an empty file if the file did not exist.
- Fixed: ToolTip Centering go around.
- Fixed: Menu/ContextMenu enable/disable.
- Fixed: Hotkey for filecreateshortcut.
- Fixed: MemGetStats >2Gb.
- Fixed: StringInStr return 0 when searching for "".
- Fixed: RegRead under Windows 2000.
- Fixed: Bad refresh on double GUICtrlSetPos.
- Fixed: ControlSend (...,"{CTRLDOWN}b{CTRLUP}).
- Fixed: ContextMenu position.
- Fixed: Made sure that declaring a UDF parameter in a Local or Global statement will raise an error.
- Fixed: File...Dialog browse through links.
- Fixed: ControlCommand "GetCurrentSelection".
- Fixed: Mouse... returns.
- Fixed: MouseClick, MouseUp bad behavior.
- Fixed: StringReplace("abc","","") returns 1 instead of "".
- Fixed: WinSetTrans returns error.
- Fixed: Assign not creating/assigning macro variable.
- Fixed: Assign respect Opt("MustDeclareVars",1).
- Fixed: @NumParams destroyed after UDF call.
- Fixed: MouseClickDelay option. (Fixed by Nutster)
- Fixed: Redim of array byRef parameter.
- Fixed: InputBox left,top values when not defined.
- Fixed: FileFindNextFile return error.
- Fixed: HWND string concatanation.
- Fixed: Exit inside UDF.
- Fixed: SendKeyDelay, SendKeyDownDelay when  no shift required.
- Fixed: FileReadLine with line=0.
- Fixed: Listview sorting with using styles: $LVS_SORTASCENDING and $LVS_SORTDESCENDING.
- Fixed: StringLen(integer) returning 0.
- Fixed: Reg... functions on IA64/X64.
- Fixed: FileFindFirstFile() leak handles.
- Fixed: @IpAddress when not network installed.
- Fixed: FileCopy, FileInstall, DirCopy, FileMove replacing the same file.
- Fixed: FileClose,FileFindNextFile, FileRead, FileReadLine, FileWrite, FileWriteLine, PluginClose, DllClose return 0 on bad handle.
- Fixed: FileCopy when creating subdir.
- Fixed: String... on nonstring parameters.
- Fixed: Float to Integer precision.
- Fixed: Bad FatalError after Exit in UDF. Only the first FatalError will be displayed if any before Exit.
- Fixed: Integer to string conversion.
- Fixed: StringMid($a,3).
- Fixed: StringSplit($a,"").
- Fixed: Refreshing of dispayed tabitem after a tabitem delete.
- Fixed: StringSplit($a," - ",1) string delimiter.
- Fixed: Return code from delayed function as WinWait destroyed by Adlib execution.
- Fixed: FileInstall on same dir.
- Fixed: Func definition with Byref and default value.
- Fixed: FileRead returning @error=-1 on empty file.
- Fixed: INetGetSize, INetGet @error return.
- Fixed: Run("a.tmp") a.tmp being a compiled script.
- Fixed: StringSplit("a : b + "," : ").
- Fixed: #include-once in main script.
- Fixed: PixelSearch performance.
- Fixed: HotKeySet("",...) return 0.
- Fixed: ExpandVarStrings $$, ExpandEnvStrings %%.
- Fixed: FileInstall in a compiled script whose name is not .exe or .a3x.
- Fixed: RegRead return right number of fields on REG_MULTI_SZ type.
- Fixed: FileRead($handle).
- Fixed: ElseIf ... Then statement not detected.
- Fixed: Illegal #include with no error message.
- Fixed: SplashTextOn Memory Leak.
- Fixed: #include recursion depth enforced.
- Fixed: @OSVERSION for WIN_XP running under X64 edition.
- Fixed: Comparison case insensitive accentuated upper case.
- Fixed: DriveMapDel /DriveMapAdd interaction.
- Fixed: RegRead MULTI_REG_SZ malformed key.
- Fixed: For Next with boundary,stepping being a string (no conversion to integer).
- Fixed: InetGet() could block the foreground execution even when run in background mode.
- Fixed: WinGetProcess and ProcessExist return same pid precision.
- Fixed: InetGet("abort") and exiting AutoIt with a download in progres now correctly stop the download immediately.
- Fixed: @InetGetBytesRead Byte count could be wrong due to a race condition.
- Fixed: DirCreate not creating subdir on dir with read/hidden/system attributes.
- Fixed: FileSetAttrib, FileSetTime destroy @workingdir.
- Fixed: (GUI) GUICtrlSetImage for 16x16 icon not repainting.
- Fixed: (GUI) The use of $GUI_GR_RECT and $GUI_GR_ELLIPSE under fixed under Win98.
- Fixed: (GUI) GUI Edit/Input control change notification.
- Fixed: (GUI) Avoid GuiSwitch when only one remain.
- Fixed: (GUI) GUI Multiple files drag & drop on edit/input control.
- Fixed: (GUI) GUI Colors on edit/input control.
- Fixed: (GUI) GuiCtrlSetImage return 0 on error.
- Fixed: (GUI) crash Autoit when click on header button of a listview control.
- Fixed: (GUI) GUICtrlState(@SW_MAXIMIZE or @SW_RESTORE).
- Fixed: (GUI) GuiCtrlSetStyle ES_READONLY on input/edit control.
- Fixed: (GUI) GUICtrlCreateTab disapearing.
- Fixed: (GUI) Resizing of GUI Combo control.
- Fixed: (GUI) GUICtrlSetData for list or combo not inserting.
- Fixed: (GUI) GUICtrlSetState for Menu/menuitem.
- Fixed: (GUI) GUICtrlDelete of a Listview control lead to crash after recreation with more columns.
- Fixed: (GUI) GUICtrlCreateListViewItem with more field than column.
- Fixed: (GUI) GUISetFont and Input Control not displayed.
- Fixed: (GUI) GUICtrlRead return on expanded TreeviewItem.
- Fixed: (GUI) Windows centering of GUICreate.
- Fixed: (GUI) GuiCtrlSetPos on Icon control.
- Fixed: (GUI) GuiGetCursorInfo on tab.
- Fixed: (GUI) Some flickering in GUICtrlSetImage.
- Fixed: (GUI) GuiCtrlSetState on non active tab.
- Fixed: (GUI) TreeviewItem notify when clicking a second time on the same item.
- Fixed: (GUI) GuiCtrlSetData on inactive tabitem not refreshing active item.
- Fixed: (GUI) GuiCtrlSetState on control tab.
- Fixed: (GUI) GuiCtrlSetState disable on hidden control tab.
- Fixed: (GUI) GuiGetCursorInfo with nonactive GUI.
- Fixed: (GUI) Bug with accelerator keys (Alt+...) and tabs.
- Fixed: (GUI) Treeview painting under OS <XP.
- Fixed: (GUI) GUICtrlSetData with float value.
- Fixed: (GUI) GuiCtrlSetImage repainting.
- Fixed: (GUI) Weird behavior when resizing column of listview on a tab.
- Fixed: (GUI) GuiCtrlSetState($tabitem,$GUI_SHOW) on visible GUI.
- Fixed: (GUI) GuiGetCursorInfo primary/secondary under nonXP.
- Fixed: (GUI) GuiCtrlSendMsg, TraySetState doc link.
- Fixed: (GUI) Crash when deleting an input control.
- Fixed: (GUI) GuiCtrlCreateCombo and $CBS_DROPDOWNLIST color.
- Fixed: (GUI) GuiCtrlCreateDate and $DTS_UPDOWN.
- Fixed: (GUI) GUI click return position.
- Fixed: (GUI) GuiGetMsg returning on Input control change.
- Fixed: (GUI) GUICtrlCreateInput/Edit forcing WS_TABSTOP when ES_READONLY.
- Fixed: (GUI) Resizing of controls dynamically created.
- Fixed: (GUI) a small flickering bug in CtrlSetImage() for treeview items.
- Fixed: (GUI) GuiCtrlSetPos, GuiCtrlSetResizing use visible window.
- Fixed: (GUI) GuiCtrlCreateIcon icon size in multiple icon .ico file.
- Fixed: (GUI) Pic control size inside a group control.
- Fixed: (GUI) listview repainting on tab.
- Fixed: (GUI) Memory overflow in customdraw operations in GUI while scrolling.
- Fixed: (GUI) Bad GuiCtrlSetResizing when no first show has occured.
- Fixed: (GUI) bkcolor label on tab if ListViewItem.
- Fixed: (GUI) $SS_CENTERIMAGE on pic control.
- Fixed: (GUI) AutoIt Crash when creating a control on a minimized window.
- Fixed: (GUI) GUICtrlSetImage icon.
- Fixed: (GUI) Grey coloring of input/edit control when disabled.
- Fixed: (GUI) Crash after GUICtrldelete of a control having the focus.
- Fixed: (GUI) UICreate with WS_VISIBLE do an implicit GUISetState().
- Fixed: (GUI) Background label bad firing when overlayed by an edit control.
- Fixed: (GUI) GuiCtrlSetData can delete a specific column.
- Fixed: (GUI) memory leak on GuiDelete($tabitem with icon).
- Fixed: (GUI) GUI updown control notification if change with keyboard.
- Fixed: (GUI) GUIGetCursorInfo on listview header.
- Fixed: (GUI) GUICreate WS_POPUP Centering.
- Fixed: (GUI) Bad Notification on end of drag when $GUI_DROPACCEPTED not set on a control.
- Fixed: (GUI) GUISetState(@SW_UNLOCK) force repainting.
- Fixed: (GUI) GUICtrlSetState $GUI_SHOW on tab with $TCS_BUTTON style.
- Fixed: (GUI) Bad tabitem creation when no tab defined.
- Fixed: (GUI) Bad combo disable 16-bit color under W2K.
- Fixed: (GUI) GUISetBKColor freezing the display.
- Fixed: (GUI) GUICreate $WS_CHILD+$WS_VISIBLE w=0 or h=0 lead to crash AutoIt.
- Fixed: (GUI) GuiCtrlCreatePic w=h=0.
- Fixed: (GUI) GUICtrlRead menuitem checked.
- Fixed: (GUI) Labels were not painted correctly on tab controls.
- Fixed: (GUI) GUICtrlSetState(tabitem,@SW_SHOW) under creation bad tabitem display.
- Fixed: (GUI) GUICtrlSetData on listview/listviewItem bad erasing.
- Fixed: (GUI) GUICtrlSetImage on a GUI defined with $WS_VISIBLE.
- Fixed: (GUI) GuiCtrlSetState( ,$GUI_FOCUS) changing tab ordering. Need to create a new state $GUI_ONTOP.
- Fixed: (GUI) Extra notification on first/default control after GUISetState().
- Fixed: (GUI) Event notification on {enter} on an edit control.
- Fixed: (GUI) $GUI_EVENT_MOUSE firing without any mouse movement.
- Fixed: (GUI) GuiCtrlSetState( ,$GUI_FOCUS) on button repainting.
- Fixed: (GUI) Drag&Drop of listviewitem onto another listview. $GUI_ACCEPTFILES has been renamed in $GUI_DROPACCEPTED.
- Fixed: (GUI) TabStop order.
- Fixed: (GUI) GUICtrlSetPos with a Child window.

3.1.1 (7th Apr, 2005) (Release)

- Fixed: @OSVersion did not work for Windows Server 2003
- Fixed: $LVS_EX_FULLROWSELECT in GuiConstants.au3 was defined $LBS...
- Fixed: @YDAY was incorrect (one day out)

3.1.0 (7th Feb, 2005) (Release)

- Added: GUI creation capabilties
- Added: DllCall(), DllOpen(), DllClose()
- Added: ControlListView()
- Added: WinList()
- Added: DirGetSize()
- Added: IniReadSectionNames(), IniReadSection()
- Added: InetGet(), InetGetSize()
- Added: HttpSetProxy(), FtpSetProxy()
- Added: FtpBinaryMode (Option)
- Added: Ping()
- Added: ControlGetHandle()
- Added: WinGetProcess() and ProcessList()
- Added: SetExtended()
- Added: WinSetTrans()
- Added: Assign()
- Added: ConsoleWrite()
- Added: @AutoItExe macro
- Added: Const keyword
- Added: Optional parameter support for user functions
- Added: "main", "primary", "menu", "secondary" added as valid mouse button types
- Added: ExpandVarStrings (Option)
- Added: The user functions OnAutoItStart() and OnAutoItExit() are called during startup/exit
- Added: OnExitFunc (Option)
- Added: (Internal) Native HWND datatype added to variants

- Removed: URLDownloadToFile() (Replaced by InetGet())

- Changed: For loops automatically declare the counter variable as a Local variable
- Changed: IniDelete() can also delete entire sections
- Changed: StringReplace() also returns the number of replacements in the @extended macro
- Changed: StringMid() the "count" parameter is now optional (assumes remainder of the string)
- Changed: PixelChecksum() now has optional step parameter
- Changed: Control...() functions now accept the Control ID as an extra way to identify a control
- Changed: InetGet() function can download in the background
- Changed: Reg...() functions no longer give a hard error when an unknown key is used.
- Changed: The mouse and pixel functions now have an additional "client area" mode
- Changed: Added WIN_2003 to the possible values for @OS_VERSION
- Changed: AU3Spy.exe renamed to AU3Info.exe
- Changed: Major upgrades to the AutoIt Window Spy (control highlighting, magnify)
- Changed: FileSelectFolder supports an initial directory as well as a root directory
- Changed: File functions no longer give fatal errors when -1 is used as a handle
- Changed: (Internal) new quicker variable lookup using a binary tree
- Changed: (Internal) new shared process memory class used for StatusBarGetText()
- Changed: (Internal) Unified structure stacks (If, Func, Select, While, Do, For)
- Changed: (Internal) Variant rewrite (now handles int32, int64, double, string, HWND data)

- Fixed: Memory leak in SplashImageOn()
- Fixed: Expressions like "$var = $var" will now give an error if the variable wasn't previously defined
- Fixed: StringFormat() with \\ characters
- Fixed: Under rare situations after closing a script AutoIt3.exe would still appear in task manager for a while
- Fixed: Certain paths like @WindowsDir were incorrect under Windows Terminal Server
- Fixed: FileSetTime() systems in non-GMT timezones had incorrect results
- Fixed: FileMove() with UNC paths (does a real move when in the same dir rather than a copy).
- Fixed: ^ operator
- Fixed: Chr()
- Fixed: StatusBarGetText() failed when used with no "Text" parameter
- Fixed: InputBox() didn't return focus to the previously active window

3.0.102 (4th August, 2004) (Release)

- Major Change: Colors now default to the standard RGB format rather than the previous BGR format.

    This affects PixelSearch, PixelGetColor.

    The "ColorMode" option has been added to allow old scripts to run with the old BGR mode, just
    place this line at the top of your script to use the old method:

    Opt("ColorMode", 1)

- Added: DriveMapAdd(), DriveMapDel() and DriveMapGet()
- Added: @SW_SHOWDEFAULT, @SW_SHOWMAXIMIZED, @SW_SHOWMINIMIZED, @SW_SHOWMINNOACTIVE,
        @SW_SHOWNA, @SW_SHOWNOACTIVATE, @SW_SHOWNORMAL
- Added: FileGetShortcut()
- Added: Predefined $CmdLineRaw variable now holds the original command line in full
- Added: @DesktopDepth
- Added: ReDim
- Added: Command line option /ErrorStdOut
- Added: More command line params for Aut2Exe.exe: /nodecompile and /comp 0-4  (compression level, 4=best)
- Added: Process ID (PID) support for Process...() and Run() functions
- Added: ProcessSetPriority()
- Added: Decompiler (Exe2Aut) added
- Added: PixelChecksum()
- Added: Strings starting with "0x" are converted from hex when used numerically
- Added: Multi-directory #include <> paths
- Added: MouseWheel()
- Added: FileRecycleEmpty()
- Added: RegEnumKey() and RegEnumVal()

- Changed: TimerStart() renamed to TimerInit().  TimerStop() renamed to TimerDiff()
- Changed: FileSelectFolder() flag parameter changed
- Changed: REG_MULTI_SZ values allow double NULL values.
- Changed: BirOr(), BitAnd() and BitXOR() take up to 255 parameters
- Changed: Icon and windowstate options added to FileCreateShortcut()
- Changed: RunAsSet() supports extra profile handling options
- Changed: RegWrite() now accepts just the keyname in order to create a keyname with no value
- Changed: "Allow Decompilation" option added to Aut2Exe
- Changed: Aut2Exe gives feedback during compilation and gives the option to abort
- Changed: Compiled scripts run/extract much faster when using FileInstall and medium/large files
- Changed: Max number of user function limits removed
- Changed: Max number of variable limits removed
- Changed: -1 does no sleep at all for Send/Mouse delays (SendKeyDelay, etc...)
- Changed: Optional occurance parameter added to StringInStr()
- Changed: Optional default filename added to FileOpenDialog() and FileSaveDialog()
- Changed: Registry functions accept 4 letters keys (HKLM instead of HKEY_LOCAL_MACHINE, etc.)
- Changed: Remote registry keys are accepted in the form "\\computername\key\subkey"
- Changed: AutoItSetOption returns the previous setting
- Changed: (Internal)  Built-in function lookups completely rewritten
- Changed: (Internal) String functions speeded up (concat in astring and variants)
- Changed: (Internal) ControlSearch modified to include the windowsearch

- Fixed: FileGetSize() works on >2GB files and in-use files
- Fixed: The expression: If "non-blank" And 1 - now evaluates as true
- Fixed: /c command line use in compiled scripts
- Fixed: ToolTip() when the mouse is near the bottom of the screen
- Fixed: StringIsDigit()
- Fixed: Process... functions under NT4 unable to see certain processes
- Fixed: Some keywords incorrectly allowed after a THEN keyword
- Fixed: (Internal) Hotkey registering logic

3.0.101 (11th Mar, 2004) (Release)
- Added: MemGetStats()
- Fixed: Compatibility problem under Windows 95a
- Fixed: Some minor help file typos corrected

3.0.100 (29th Feb, 2004) (Release)
- Added: WinTextMatchMode (Option)
- Fixed: ExitLoop and ContinueLoop failed during a recursive function
- Fixed: Sleep(0) (or < 0 ) no longer hangs
- Fixed: $ with no name was allowed as a variable
- Fixed: For Loop bug when used in recursion
- Fixed: FileGetLongName() return value
- Fixed: @UserProfileDir under 9x
- Fixed: IsDeclared()
- Fixed: Random()

3.0.94 (21st Feb, 2004) (Beta)

SCRIPT BREAKING CHANGES for FileReadLine and FileWriteLine:

FileWriteLine now automatically writes a DOS @CRLF pair UNLESS the last character of
the string to write is already @CR or @LF (to make it possible to write non-DOS text files)

FileReadLine will correctly read a DOS, UNIX or MAC line (@CRLF, @LF and @CR terminated respectively).

FileWrite and FileRead added to add further support.

CHANGE YOUR SCRIPTS AS FOLLOWS:

From: FileWriteLine($handle, "line" & @LF)
To: FileWriteLine($handle, "line" & @CRLF) or FileWriteLine($handle, "line")

From: FileWriteLine($handle, "line")
To: FileWrite($handle, "line")

- Added: FileWrite() and FileRead()
- Changed: FileReadLine() and FileWriteLine()
- Added: ToolTip()
- Added: Eval() and IsDeclared()
- Added: CaretCoordMode (AutoItSetOption)
- Added: WinGetCaretPos()
- Added: WinGetState()
- Added: MustDeclareVars (AutoItSetOption)
- Added: Editors page in help
- Changed: EnvSet()
- Changed: WinShow() renamed to WinSetState()  (With WinShow() as an alias)
- Fixed: Splash() and moveable flag (and -1 default flag in options)
- Fixed: Odd elseif error message showing wrong line
- Fixed: Crashes with bad function calls: MsgBox(MsgBox(MsgBox))
- Fixed: HotKey crashes when unregistering a key that was not registered

- Fixed: (Internal) WinWaitDelay, SendKeyDelay, etc type commands now more accurate (previously only accurate to 10ms (NT) or 55ms (9x))
- Fixed: (Internal) Execute() recursion limit dropped to 384 levels
- FIxed: (Internal) Calls to Util_AttachThreadInput will not attach to hung windows
- Fixed: (Internal) some RegRead/RegWrite sizing problems (Ta, Chris)

3.0.93 (12th Feb, 2004)
- Added: SendAttachMode (AutoItSetOption)
- Added: Opt() is an alias for AutoItSetOption() :)
- Added: Doc updates
- Added: WinSearchChildren (AutoItSetOption)
- Changed: Splash and Progress functions have a "moveable" option
- Changed: StringStripWS (new strip all ws mode)
- Changed: InputBox (timeout param)
- Changed: Hot keys are no longer buffered when the script is paused.
- Fixed: REG_MULTI_SZ support
- Fixed: TrayIconDebug not showing correct filename
- Fixed: ControlClick, ControlCommand("CHECK")
- Fixed: Control functions now using return values rather than @error where appropriate.
- Fixed: Error with '' quotes in Aut2Exe
- Fixed: StringFormat()
- Fixed: Lexer checks that potential user function calls are for existing functions
- Fixed: Input thread attachment in Send() ( check Send("{... down}") still works)

- Changed: (Internal) Removed the only sscanf call and replaced with own code - saves 4KB.

3.0.92 (6th Feb, 2004)

Note: Script breaking changes to ControlLeftClick(), FileFindFirstFile(), SendSetCapslockState()

- Added: Dec()
- Added: BitNOT(), BitXOR(), BitShift()
- Added: TrayIconDebug (AutoItSetOption)
- Added: Dim single-line initialization and multiple variables
- Added WinTitleMatchMode 4 (AutoItSetOption)
- Added: #comments-start and #comments-end for multiline comments
- Added: DirCopy()
- Added: DirMove()
- Added: Controls will be checked by visible text as well as classname (waves to Chris :) )
- Added: Macros: @USERPROFILEDIR, @HOMEDRIVE, @HOMEPATH, @HOMESHARE, @LOGONSERVER, @LOGONDOMAIN, @LOGONDNSDOMAIN
- Removed: SendSetCapslockState() - Use Send("{CAPSLOCK on/off}")
- Changed: FileFind works differently (handles used and multiple finds now supported)
- Changed: ControlLeftClick() renamed to ControlClick() and options added.
- Changed: Window Spy options added and ability to freeze display
- Changed: StringSplit will return each char if delimiters are ""
- Changed: WinMenuSelectItem return value
- Changed: optional variation added to PixelSearch()
- Changed: optional step value added to PixelSearch()
- Changed: FileMove() overwrite flag added
- Changed: *.* assumed if a directory is used in FileCopy/FileMove/FileDelete
- Fixed: @TempDir under certain conditions
- Fixed: Hotkeys were ignored while another hotkey function was running

- Changed: (Internal) DirRemove changed
- Changed: (Internal) Sendkeys tweaked A LOT

3.0.91 (29th Jan, 2004)
- Added: Options: MouseClickDelay, MouseClickDownDelay, MouseClickDragDelay (AutoItSetOption)
- Added: REG_BINARY type for RegRead() and RegWrite()
- Added: FileChangeDir()
- Added: ControlCommand() - added GETCURRENTSELECTION
- Added: Added some standard library includes (See Program Files\AutoIt3\Include\)
- Added: SendKeyDownDelay (AutoItSetOption) (alters the amount a time a key is held down before released)
- Added: AutoIt returns an exit code of 1 if script could not be loaded
- Added: FileSetAttrib(), FileSetTime()
- Added: In Au3_Spy pixel colour is also shown in hex
- Fixed: While loops failing when used in recursive functions of themselves... (!?)
- Fixed: Small line coninuation _ bug
- Fixed: URLDownloadToFile()
- Fixed: FileRecycle() not always working
- Fixed: FileRecycle() return value
- Fixed: Relative #include use
- Fixed: Smart boolean comparision re-added
- Fixed: FileFindFirst() not releasing memory when called multiple times
- Changed: FileGetTime outputs strings with leading 0s when required
- Changed: Default value of Local/Global/Dim is the String "" (equates to 0 when used as a number)

- Changed: (Internal) More scriptfile.cpp optimization
- Changed: (Internal) Execute() recursion levels limited to 512 to prevent stack overflows

3.0.90 (20th Jan, 2004)
- Fixed: Serious nested IF bug

- Changed: (Internal) Rollback of variabletable.cpp and stacks/vectors

3.0.89 (19th Jan, 2004)
- Added: Method for standard library functions and includes
- Added: #include < > support (must be fully installed to work)
- Added: #include-once directive (put at the top of a file to make sure it is only
       included once)
- Added: @UserName and @TempDir macros
- Fixed: Nasty fatal bug in 3.0.88

3.0.88 (18th Jan, 2004)
- Added: ElseIf
- Changed: All block structures (IF/WHILE/FOR, etc.) are now checked before execution.
- Fixed: Some single hotkeys not working
- Fixed: Better detection of illegal nesting, e.g.:
         if 1 = 1
           while 1
         endif
           wend

- Changed: (Internal) lots of error checking code removed as a nice side effect of
         initial block structure checking
- Changed: (Internal) windows string functions (lstrcmp etc) moved back to C versions
         due to massive performance penalty

3.0.87 (15th Jan, 2004)
- Changed: Aut2Exe stores files it can't compress (.zip etc) rather than expanding
- Fixed: Aut2Exe crashing if FileInstall used a file less than 4 bytes
- Fixed: Aut2Exe crashing with uncompressable files
- Fixed: RegRead not working correctly with large DWORD values
- Fixed: NOT fixed when skipped during a boolean expression

- Changed: (Internal) variable_table.cpp rewritten
- Changed: (Internal) All stacks/vectors replaced with templated code

3.0.86 (12th Jan, 2004)
- Added: Enhanced boolean comparisons
- Added: Send can hold keys down, e.g. Send("{a down}") will hold the A key down (only works usefully with games)
- Fixed: 0 ^ 0 = 1
- Fixed: on_top parameter of ProgressOn()
- Fixed: No longer hanging with blank search in StringReplace()
- Fixed: Asc() giving -1 in some cases
- Fixed: Tray icon's tip not updating when un-pausing
- Changed: Single keys of 0-9, a-z can no longer be used as hotkeys if alt,ctrl or win is NOT also used.

- Changed: (Internal) FPU assembler used for advanced math (sin,cos,pow, etc) functions due to
         exe size problems under VC7

3.0.85 (9th Jan, 2004)
- Added: HotKeySet()
- Added: Abs(), Sin(), Cos(), Tan(), ASin(), ACos(), ATan(), Sqrt(), Log(), Exp()
- Added: ^ operator
- Added: Round()
- Added: Call()
- Changed: IniWrite/IniDelete() return 0 if they fail
- Changed: No longer need to use virtual keys for FileCreateShortcut()
- Fixed: Return value for FileCopy/FileInstall()
- Fixed: Incorrect use of ExitLoop/ContinueLoop trapped

- Changed: (Internal) Send() tweaking
- Fixed: (Internal) Function calling/scope slightly bugged (Adlib, Hotkey)

3.0.84 (30th Dec, 2003)
- Added: New window WinTitleMatchMode of 3 (for exact title match)
- Added: Some more details added to helpfile
- Changed: The key # is no longer used as a delimiter but as a left Win key combination.  So
           Send("#e") now presses the left win+e keys.  I don't think anyone actually used
           it as a delimiter anyway - it was just a left over from v1 and it never made
           lines easier to read anyway
- Changed: FileReadLine() and FileWriteLine() modified so that they optionally accept a filename
           instead of a filehandle for "quick 'n' dirty" file access - I'm sure this will be
           popular :)

3.0.83 (30th Dec, 2003)
- Changed: Due to popular demand, by default functions now return 0 for error and 1 for success.
           This affects the following functions: FileWriteLine, CDTray, DriveSetLabel, DirCreate,
           DirRemove, FileCopy, FileMove, FileDelete, FileInstall, ClipPut, URLDownloadToFile,
           RunAsSet, Shutdown, RegWrite, RegDelete, WinWait, WinWaitActive, WinWaitClose, WinWaitNotActive,
           ProcessWait, ProcessWaitClose.  If you were using the return values of one of
           these functions then please check your scripts.

- Changed: ControlSend() supports {} (for most things at least...)

3.0.82 (29th Dec, 2003)
- Added: Files installed with FileInstall() now have original timestamps (created/modified)
- Added: IsNumber()
- Fixed: Number to string conversions and general float parsing

- Changed: (Internal) FileInstall() compression code updated

3.0.81
- Fixed: Yet more bugs with single line IF - regretting adding this feature already...
- Fixed: Bugs with NOT operator and the new variant code
- Fixed: Bug with clicking CANCEL on the open script window (introduced in 3.0.80)
- Fixed: StringIs... functions failing when using numbers as parameters

- Fixed: (Internal) AVector<Variant> modified to allow reference access to variants (instead of copying everytime)

3.0.80 (15th Dec, 2003)
- Changed: Number to String conversions tweaked
- Fixed: Massive bug fixed with arrays introduced in 3.0.76
- Fixed: Line continuation crash

- Changed: (Internal) script reading code updated for Aut2Exe and merged with AutoIt

3.0.79 (15th Dec, 2003)
- Added: Lines can be continued over many lines - use _ at the end of a line to continue it (as VBScript)
- Added: Single line IF statements possible
- Changed: Maximum line length (including total of combined lines) increased from 1023 to 4095 characters.
- Changed: "Then" keyword in IF statements no longer optional (helps with single line IFs)

e.g.
MsgBox(0, "Test", "This is some text _
    And more text _
    And even more text")

3.0.78 (15th Dec, 2003)
- Changed: Variants work differently - no longer a seperate INTEGER type
- Changed: Float() changed to Number()

    All numbers now 15digit precision (internal C double type)
    Also affects Random() you will get floating point numbers back unless you use Int()
        with the result

3.0.77 (30th Nov, 2003)
- Added: New option "TrayIconHide" (AutoItSetOption)
- Changed: "AutoIt -" prefix removed from compiled a script's tray icon
- Changed: Compiled script's file properties point to a custom web page
- Fixed: Tray icon should redraw after an explorer crash

3.0.76 (30th Nov, 2003)
- Fixed: Couple of bugs with ContinueLoop and ExitLoop
- Fixed: Statements like $test[$test[0]] now working

3.0.75 (30th Nov, 2003)
- Added: ControlGetFocus()
- Added: Local and Global keywords
- Changed: Dim (along with Local/Global) can now be used as in vbscript to declare variables
- Changed: FileOpenDialog() uses "|" as the delimiter instead of ","
- Fixed: PixelSearch()
- Fixed: SoundPlay()...maybe
- Fixed: Splash() sizing issues

3.0.74
- Added: Hex notation for integer numbers ($var = 10 or $var = 0xa)
- Added: MouseDown(), MouseUp()
- Added: TrayTip()
- Fixed: PixelCoordMode not working correctly
- Fixed: Compiled exes not producing random numbers

3.0.73
- Added: New option "RunErrorsFatal" (AutoItSetOption)
- Added: New option "ExpandEnvStrings" (AutoItSetOption)
- Changed: FileMove() moves/renames without affecting timestamps - can also be used
           for directories
- Changed: RegRead/RegWrite() now supports REG_EXPAND_SZ
- Changed: Extra options added to FileGetTime()
- Changed: Extra 250ms delay added to start and end of mouse drags
- Fixed: Odd error message fixed where a user function contained a badly formatted line

3.0.72
- Fixed: Compiler was ignoring comments near FileInstall() functions
- Fixed: Memory leak in StatusBarGetText()
- Fixed: PixelGetColor
- Added: New option "PixelCoordMode" (AutoItSetOption)

3.0.71
  Get ready for some script rewriting...*holds up banner with BETA written on it :) *

- Added: ControlSend()
- Added: Framework for AutoItSetOption() - note: this function replaces all
         functions like WinSetDelay, SendSetDelay, MouseSetMode, etc.
- Removed: MouseSetMode(), SendSetCapslockMode(), SendSetDelay(), WinSetDelay(), WinSetDetectHiddenText()
           WinSetTitleMatchMode()

3.0.70
- Fixed: SoundPlay()
- Removed: AutoItWinShow(), AutoItWinWrite(), AutoItWinGetText()
- Changed: ControlCommand() (updated with Larry's recent changes)
- Changed: RegRead() extended error codes
- Added: FileFindFirstFile(), FileFindNextFile()
- Added: AutoItWinGetTitle()
- Added: WinGetClientSize()
- Added: EnvUpdate()
- Added: SoundSetWaveVolume()
- Added: FileGetLongName(), FileGetShortName()
- Added: TimerStart(), TimerStop()

3.0.69
- Fixed: Small delay added into mouseclick functions
- Fixed: FileGetVersion()
- Fixed: WinMenuSelectItem()
- Fixed: StringSplit() buffer overrun

3.0.68
- Added: FileGetAttrib(), WinMenuSelectItem(), FileGetVersion()
- Added: Added options to ControlCommand()

- Changed: (Internal) Larry's nFlag functions split

3.0.67
- Changed: InputBox() narrowed slightly
- Fixed: AutoIt icon not refreshing if Return was used at top level of script
- Fixed: Crash with extra long lines fixed
- Fixed: @OS_VERSION weirdness fixed

- Changed: (Internal) MessagePump handled differently and recursion level of Execute() tracked

3.0.66
- Changed: StringSplit() returns full string in array if no delimiters matched (and count=1 not 0)
- Fixed: Crash related to window titles and text fixed.

3.0.65
- Added: ControlCommand() option GetCurrentLine
- Fixed: Possible bug with optional "Then" statement fixed
- (Internal) Window searching functions altered to check for hung windows

3.0.64
Fixed: IniWrite/Delete() functions were not flushing immediately under 9x.
Added: Errors now include the file name that contained the error

3.0.63
- Changed: ControlCommand() various internal changes.
- Fixed: MsgBox() character limit bug fixed
- Changed: Can now specify a custom time for AdlibEnable()

3.0.62
- Fixed: Aut2Exe icon changing code bugged
- Changed: Timing of "paused" flash and icon modified a little.

3.0.61
- Fixed: FileOpenDialog()
- Changed: (Internal)Encryption code modified - check compiling thoroughly
- Added: AutoIt icon flashes when in paused state

3.0.60
- Changed: Aut2Exe strips version info from compiled script. (Hoping to be custom versioninfo in future)
- Fixed: FileGetSize() (change made, unsure if problem fixed)
- Fixed: FileMove wasn't supported on 9x (9x has no MoveFileEx function, Dave... :) )

3.0.59
- Fixed: InputBox was not returning "" on cancel

3.0.58
- Fixed: The window text searching in AutoIt was not the same as AU3_Spy or WinGetText()
- Added: InputBox() (and very nice it is too...)
- Added: FileMove()

3.0.57
- Fixed: MsgBox under 9x was doing odd things with timeouts - tried something else.

3.0.56
- Fixed: Selecting the default icon in Aut2Exe was not saved between sessions
- Fixed: @OSLang under NT4...
- Added: SysTabControl32 tabbing

3.0.55
- Changed: Better icon support added to Aut2Exe
- Changed: (Internal) upx.exe called during the compiler to compress data -
    necessary to do it this way as you can't edit the resources of a compressed
    exe
- Changed: SoundPlay()

3.0.54
- Fixed: Compiled scripts with custom icons were failing
- Fixed: @OS_LANG under 9x

3.0.53
- Added: StringSplit()

3.0.52
- Changed: SoundPlay() option to wait added
- Added: ChangeIcon support back in Aut2Exe (32x32x16) - Slightly better than v2 in that
        a multiimage iconfile can be used - although only the 32x32x16 image is actually used.

3.0.51
- Fixed: Aut2Exe still used ' comments when including files -whoops.

3.0.50
- Changed: (Internal)A little error checking added to the lexer
- Added: @TAB, @COMSPEC
- Changed: MouseClick() parameters changed
- Added: MouseClickDrag()

3.0.49
- Fixed: Statusbar in Aut2Exe with Visual Styles
- Changed: Single line comment character is now ;
- Changed: ' and " may now be used for strings

3.0.48
- Added: StringIsFloat(), StringIsInt()
- Fixed: MsgBox() wasn't returning -1 on timeout
- Fixed: StringReplace() error if string to replace was at end of string
- Changed: StringReplace() count is now optional (assumes global)
- Added: Aut2Exe and AutoIt3 now use Visual Styles

3.0.47
- Changed: FileExists() to work with wildcards
- Changed: Extra options added to AutoItWinShow()
- Changed: RegRead returns the string "" in addition to @error if the (default) key was requested
    and not found.
- Fixed: DriveGetDrive()  (still an a: drive bug to find though)

3.0.46
- Fixed: RegDelete() return value when value does not exist
- Fixed: CDTray() open/closed problems
- Fixed: FileSelectFolder() crash due to missing initialisers

3.0.45
- Changed: Set...() functions renamed (SendSetDelay, WinSetDelay, etc.)
- Added: StatusbarGetText()

3.0.44
- Added: Break()
- Fixed: DriveStatus()
- Fixed: RegDelete()

3.0.43
- Fixed: @OSLang for 2000+
- Added: Hex(), AutoItWinGetText()
- Changed: UBound() back to how it was again (same as VBScript syntax)

3.0.42 (30th Aug, 2003)
- Tweaked: Mouse coords were 1 pixel out
- Added: MouseSetMode() to allow for screen _and_ relative coords - yay everyone's happy

3.0.41 (30th Aug, 2003)
- Fixed: Bug with invalid filehandles (again!).
- Changed: Mouse commands may now work on multiple monitors.
- Fixed: $CmdLine wasn't working correctly for compiled scripts.
- Fixed: The operator == wasn't properly comparing strings
- Fixed: INI functions, filename now doesn't need ".\file.ini" to work in the current directory
- Fixed: Bug in Run() directory would not be set if last parameter was used

3.0.40
- Added: Windows API error messages added onto errors for the Run() commands
    (directory invalid, bad logon, etc).

3.0.39 (29th Aug, 2003)
- Added: RunAsSet() (2000/XP only)
- Added: FileRecycle()

3.0.38 (28th Aug, 2003)
- Changed: WinGetText now correctly takes note of detecthiddentext setting
- Added: StringStripWS()
- Added: DriveGetLabel(), DriveGetSerial(), DriveGetFileSystem(),
        DriveSetLabel(), DriveGetType(), MouseGetCursor()

3.0.37
- Changed: Compression tweaked in Aut2Exe

- Changed: UBound($array) now returns number of dimensions
- Renamed all the IsUpper/IsAlpha, etc functions to StringIsUpper/StringIsAlpha, etc.
- Added: IsFloat(), IsArray(), IsInt(), IsString()
- Added: Mod()

3.0.36
- Fixed: Main dialog in Aut2Exe
- Added: New compression code (slower but better at higher levels)

3.0.35
- Added: FileInstall() support
- Added: SplashImageOn(), SplashTestOn(), SplashOff()
- Added: ProgressOn(), ProgressOff(), ProgressSet()
- Added: Compression level option in Aut2Exe

3.0.34
- Fixed: subscript must be > 0 in Dim statement
- Added: Compiled script reading code added
- Added: @Compiled
- Added: Aut2Exe

3.0.33 (22nd Aug, 2003)
- Added: Case Else
- Added: @DesktopWidth, @DesktopHeight
- Fixed: CDTray - closed/close
- Fixed: Incorrect reference passing of global variables
- Fixed: Bad file handle causing a crash in FileWrite/Read/Close
- Fixed: Crash with badly formatted Func statements
- Parsing speeded up (doubled the speed)
- Optimized string handling in variants

3.0.32 (20th Aug, 2003)
- Started proper version logging :)

First public beta binary - 4th Mar, 2003.

Development started - 20th Jan, 2003.


AutoIt Changelog (including beta version changes)
=================================================

3.2.13.14 (xxth December, 2008) (Beta)

AutoIt:

UDFs:
- Added: _GDIPlus_MatrixScale, _GDIPlus_MatrixTranslate (monoceres)

3.2.13.13 (20th December, 2008) (Beta)

AutoIt:
- Added #744: StringFromASCIIArray() and StringToASCIIArray() now allow specifying an encoding.

- Fixed: Send() was incorrectly inserting a leading zero when using the {ASC 0xNNNN} format.
- Fixed: DllStructSetData() wasn't correctly terminating string buffers that had been used previously.
- Fixed #743: AutoIt Crash when Tray functions are use with invalid ID.
- Fixed #748: AutoIt Crash with DllCall(0,...).

- Updated #734: StringRegExpReplace() doc for backward reference.

UDFs:
- Updated: _SQLite 3.6.6.2 -> 3.6.7

3.2.13.12 (9th December, 2008) (Beta)

AutoIt:
- Changed #596: StringFromASCIIArray() and StringToASCIIArray() now correctly handle embedded terminators.  Also, StringToASCIIArray() no longer inserts a trailing 0 into arrays.
- Fixed: Crash when using BinaryToString() with invalid UTF16 input string.  BinaryToString() now has new @error codes to support diagnosing invalid input.
- Fixed: ControlGetText() regression from last beta.
- Updated: Shutdown documentation.

UDFs:
- Added: _GDIPlus_StringFormatSetAlign (monoceres)

- Updated: StringAddThousandsSep params in regards to #442
- Updated: _SQLite 3.6.5 -> 3.6.6.2
- Updated #733: Doc for _GUICtrlButton_SetImageList

- Fixed #693: _DateTimeFormat() time format
- Fixed #701: _GUICtrlListView_ClickItem() Clicks in the wrong place when $fMove = True
- Fixed #700: _GUICtrlTreeView_ClickItem() Clicks in the wrong place when $fMove = True
- Fixed #703: _GUICtrlListBox_ClickItem() Clicks in the wrong place when $fMove = True
- Fixed #705: _GUICtrlToolbar_ClickButton() Clicks in the wrong place when $fMove = True
- Fixed #707: _GUICtrlMonthCal_Create() width and height

3.2.13.11 (17th November, 2008) (Beta)

AutoIt:
- Fixed #669: Typo in Dec() example.
- Fixed #659: Documented that UNC paths are not supported when using FileSelectFolder().
- Fixed #671: Crash when using $WS_EX_MDICHILD without specifying a valid parent.

AutoItX:
- Added: COM: WinList method.
- Fixed: Native DLL: Return strings were sometimes incorrectly terminated.
- Fixed: PixelChecksum() not returning correct values.

UDFs:
- Fixed #674: _GUICtrlTab_ClickTab() Clicks in the wrong place when $fMove = True

- Updated: _SQLite 3.6.4 -> 3.6.5
- Updated #442: _StringAddThousandsSep() allows for regional settings

3.2.13.10 (8th November, 2008) (Beta)

AutoIt:
- Added #407: Documented that For...In loops are read-only.
- Added #645: IniDelete() now supports the Default keyword for the 3rd parameter.

- Fixed #628: GuiCtrlRead($ctxmenu, $adv) bad return (Saunders)
- Fixed #640: PCRE does not support \L, \l, \N, \U, or \u : doc updated
- Fixed: StringToASCIIArray() crash (Part of issue #596).
- Fixed #642: Installer now correctly opens the merged helpfile to the history page instead of the AutoIt-only helpfile.
- Fixed #646: Call() now sets specific @error and @extended values when it fails to find a function.

- Changed: Documented StringToASCIIArray() and StringFromASCIIArray() use UNICODE codes (Part of issue #596)

AutoItX:
- Fixed: multiple unicode related problems introduced in a previous beta.

UDFs:
- Added: _StringExplode() (WeaponX)

- Fixed #610: _WinAPI_CreateFile() wrong return value upon failure
- Fixed #619: _GUICtrlListView_SetItemSelected memory allocation
- Fixed #617: corrections to six GDI+ ImageGet help file examples
- Fixed #621: _StringAddThousandsSep don't work with negative number
- Fixed #635: _GuiCtrlTab_ClickTab() docs list unused $fPopupScan parameter
- Fixed #650: Missing BorderConstants.au3
- Fixed #656: _FileCountLines returns 0 if file only contains 1 line

- Changed: _Soundxxxx functions (RazerM)
- Changed #599: _FileListToArray speed optimization (code65536)
- Changed: _SQLite 3.5.9 -> 3.6.4.

3.2.13.9 (12th October, 2008) (Beta)

AutoIt:
- Fixed #601: Tooltip return 0 when title length >99.
- Fixed #608: listView GUICtrlSetBkColor not redrawn.
- Fixed: Regression in writing Unicode files introduced in 3.2.13.8.

UDFs:
- Fixed #600: _ArraySearch fails with 2D array.
- Fixed #603: _FileReadToArray() does not return an array if the file contains only a single line of text.

3.2.13.8 (4th October, 2008) (Beta)

AutoIt:
- Added #454: $FO_UTF8 allowing FileOpen() in Read mode for reading UTF8 files without BOM.
- Added: $FO_UTF16_LE, $FO_UTF16_BE allowing FileOpen() in Read mode for reading UTF16 files without BOM.

- Fixed #501: ProcessGetStats() failed for processes running as other users (including SYSTEM).
- Fixed #92: DllStruct data truncated with char[]/wchar[].
- Fixed #562: Specifying the TITLE property caused all other properties to be lost (Window title matching).
- Fixed: GuiCtrlSetState($graphic, $GUI_HIDE) does not hide.
- Fixed: GuiCtrlSetResizing($graphic, ) not moving.
- Fixed: GuiCreate(...,Style without caption) does not resize properly.
- Fixed: GuiSetStyle(caption change) does not resize properly.
- Fixed: GuiCtrlSetState($listviewitem) does not return error.
- Fixed #569 TCPRecv doc example.
- Fixed #589: Some comparison operators did not return a boolean value.
- Fixed #583: Bad formatting of @MSEC in documentation.
- Fixed #574: Using 0 for the SendKeyDelay or SendKeyDownDelay removes the respective delay when using Send().
- Fixed #542: Crash with regular expressions.
- Fixed #531: Clarification of some of the remarks for GUICtrlSetGraphic().
- Fixed #539: StringSplit() with flag 2 and no matching delimiters wasn't returning the full string.

- Changed: PCRE regular expression engine updated to 7.8.

UDFs:
- Fixed #495: _GUICtrlTreeView_GetTree returns only 1 parent
- Added: _WinAPI_CreatePen, _WinAPI_DrawLine, _WinAPI_LineTo, _WinAPI_MoveTo, _WinAPI_GetBkMode, _WinAPI_SetBkMode (Zedna)
- Fixed #503: _Date_Time_FileTimeToLocalFileTime example (cbruce)
- Added: _ArrayCombinations, _ArrayPermute, _ArrayUnique (litlmike)
- Fixed #510: _GUICtrlListView_ClickItem: If columns inside listview exceed visible area, clicks outside of the control
- Added: _GDIPlus_ImageGetFlags, _GDIPlus_ImageGetHorizontalResolution, _GDIPlus_ImageGetPixelFormat, _GDIPlus_ImageGetRawFormat
         _GDIPlus_ImageGetType, _GDIPlus_ImageGetVerticalResolution (rover)
- Added: _PathGetRelative (wraithdu)
- Fixed #500: _ChooseColor run on 64bit
- Fixed #517: WinAPI UDF - bad error checking after DllCall()
- Added: _WinAPI_CombineRgn, _WinAPI_CreateRectRgn, _WinAPI_CreateRoundRectRgn, _WinAPI_SetWindowRgn (Zedna)
- Fixed #533: Array functions dimension check
- Fixed: various Timer Functions
- Fixed #506: _FileCountLines deal with all common line-end-chars
- Fixed #485: WinAPI missing related links in helpfile
- Fixed #571: return value doc for _GUICtrlListBox_FindString, _GUICtrlListBox_GetAnchorIndex and _GUICtrlListBox_GetText
- Fixed #586: _GuiCtrlListView_SetGroupInfo() destroyed group ID's.
- Fixed #516: _ChooseFont run on 64bit
- Fixed #595: _WinAPI_SetWindowsHookEx help file description of $WH_KEYBOARD_LL

3.2.13.7 (6th August, 2008) (Beta)

AutoIt:
- Fixed: Really stupid mistake with Run functions.

- Added #481: 11 pixel margin around the text in SplashTextOn() (Meets Vista UI guidelines).
- Added #468: Added @MSec macro for obtaining the current milliseconds for the current second.
- Added #277: @CPUArch macro to return the capability of the processor.

- Changed: Tweaked DEP and Image randomization linker options.

AutoItX:
- Changed: Converted to full unicode - ANSI DLL prototypes removed. (For now, depends on demand for adding in).

3.2.13.6 (30th July, 2008) (Beta)

AutoIt:
- Fixed #475: StringSplit() with flag 2 and empty delimiter did not work correctly.
- Fixed #464: Example script for GUICtrlCreateAvi() did not work on Vista.
- Fixed #484: ObjGet() would crash when invalid files were specified.

- Added #328: StringToASCIIArray(), StringFromASCIIArray() functions.
- Added: New flag to Run()/RunAs() to fix issue #415 (Adds new Constants.au3 constant: $STDIO_INHERIT_PARENT).
- Added: New flag to all Run functions for better CUI compatibility (Adds new Constants.au3 constant: $RUN_CREATE_NEW_CONSOLE).

- Changed #393: Documented that SoundSetWaveVolume() works differently in Windows Vista.
- Changed: PCRE regular expression engine updated to 7.7.

UDFs:
- Added: _ExcelHorizontalAlignSet, _ExcelFontSetProperties, _ExcelBookAttach (litlmike)
- Fixed: Excel Examples
- Added: _WinAPI_SetEndOfFile, _WinAPI_SetFilePointer (Zedna)
- Fixed #465: _DateTimeSplit if seconds omitted defaulted to -1, now defaults to 0

Aut2Exe:
- Added #460: More verbose UPX errors.

3.2.13.5 (24th July, 2008) (Beta)

AutoIt:
- Fixed #449: @SystemDir does not return SysWOW64 under X64 in 32-bit mode.
- Fixed #440: Fatal error when script ends with EOF (0x1A).
- Fixed: Error compiling with custom icons since last beta.

3.2.13.4 (19th July, 2008) (Beta)

AutoIt:
- Fixed #346: FileOpenDialog/FileSaveDialog filter length limit.
- Fixed #387: DllClose() and DllCallbackFree() crashing when an invalid handle used.

UDFs:
- Added #334: _SQLite 3.5.9 x86 and X64 version.
- Fixed #422: _GDIPlus_GraphicsSetSmoothingMode $iSmooth accepts only 0 - 4, doc updated
- Added: Missing FrameConstants.au3
- Added: Excel UDFs
- Updated: GuiComboBox Documentation

Aut2Exe:
- Fixed #436: Compression level was ignored when performing compilation from the GUI.

3.2.13.3 (22nd June, 2008) (Beta)

AutoIt:
- Fixed #381: DirCreate() was trashing input variables (old bug brought to light by recent optimizations).

UDFs:
- Fixed #388: _GUICtrlToolbar_SetButtonSize Example
- Fixed #400: SQLite.dll.au3 @ProcessorArch replaced with @OSArch
- Fixed #390: _viPrintf replaced return type
- Added: _Timer_GetIdleTime, _WinAPI_GetWindowPlacement, _WinAPI_SetWindowPlacement (PsaltyDS)

3.2.13.2 (15th June, 2008) (Beta)

AutoIt:
- Changed: @ProcessorArch changed to @OSArch as it was misleading.
- Changed: Size limits removed from RegRead() and RegWrite() (previously 64KB for some registry types).
- Changed: RegRead() and RegWrite() no longer use hex strings for REG_BINARY types - native binary datatypes are enforced.

- Fixed #380: @OSVersion for Windows XP 64-bit Edition.
- Fixed: Increased memory use since last beta.

UDFs:
- Fixed #371: _GDIPlus_Startup return value (wraithdu)
- Fixed #368: _ArrayToClip return value

3.2.13.1 (10th June, 2008) (Beta)

AutoIt:
- Added: New flag for StringSplit() to not return the count in element 0.

- Fixed #358: Install dir documentation cleaned up (thanks Zedna).
- Fixed #355: Child not visible beta regression. (Thanks Ultima)
- Fixed #366: AutoIt crash on bad syntax.
- Fixed #360: RunAs() under Windows 2000.
- Fixed #367: STDIO functions in compiled scripts work again.

- Removed #357: @AutoItUnicode macro.

UDFs:
- Added: _GUICtrlTab_ClickTab (Gary)
- Fixed #361, #362: _GUICtrlListView_InsertItem doc (Zedna)
- Removed: _StringSplit, no longer needed
- Added: _GUICtrlComboBoxEx_GetUnicode, _GUICtrlComboBoxEx_SetUnicode (Gary)

3.2.13.0 (7th June, 2008) (Beta)

AutoIt:
- Fixed #309: RunAs() and RunAsWait() now use @SystemDir as the working directory instead of @WorkingDir when a user-supplied working directory is not specified.
- Fixed #325: contextmenuitem not firing events.
- Fixed #305: GUICtrlSetFont() for Combo causing highlight.
- Fixed #318: GUICtrlSetTip() on TreeViewItem must return 0.
- Fixed #282: Icon transparency refresh when on tab regression.
- Fixed #339: GUICtrlDelete() crashes.
- Fixed #345: @OSVersion for Windows 2008.

UDFs:
- Fixed #285: _ChooseColor Example (water)
- Fixed #299: _GUICtrlTab_SetItemText buffer length for Unicode (benners)
- Fixed #292: _EventLog__Clear not clearing log when backup parameter is empty
- Updated #290: _GDIPlus_DrawImagePoints (Zedna)
- Fixed #258: _ClipBoard_GetData
- Fixed #294: _FileReadToArray where the file contains no @LF (GEOSoft)
- Added #275: _GDIPlus_GraphicsFillPolygon (smashly)
- Fixed #303: Clock.au3 in Examples\GUI\Advanced (thanks Jon)
- Fixed: _GUICtrlListView_SetItemEx text buffer (thanks wraithdu)
- Fixed #320: _WinNet_EnumResource struct pointers (thanks arcker)
- Fixed #321: _GUICtrlStatusBar_GetText buffer length for Unicode
- Added #332: Remarks to _GUICtrlStatusBar_Create

3.2.12.1 (12th June, 2008) (Release)

AutoIt:
- Fixed #309: RunAs() and RunAsWait() now use @SystemDir as the working directory instead of @WorkingDir when a user-supplied working directory is not specified.
- Fixed #325: contextmenuitem not firing events.
- Fixed #282: Icon transparency refresh when on tab regression.
- Fixed #360: RunAs() under Windows 2000.

3.2.12.0 (11th May, 2008) (Release)

AutoIt:
- Fixed #252: Edit control not correctly getting focus after ALT-TAB.
- Fixed #254: GuiGetCursorInfo() fixed again!
- Fixed #256: Multiple windows and multiple tab controls were messing each other up.
- Fixed #255: Random(Min,Max,1). Previously this would never actually return Max,
    so if Max was artificially incremented by one the script will now need to be changed.
- Fixed #251: GUIRegisterMsg() and Return values.
- Fixed: Icon transparency refresh when on tab. (Thanks Ultima)

UDFs:
- Fixed #249: _WinAPI_UpdateLayeredWindow error checking.
- Fixed #260: _ArrayToString() doc return value.
- Fixed #259: _ArraySort() not returning 1 on success.

3.2.11.12 (8th May, 2008) (Beta)

AutoIt:
- Removed #238: ColorMode option ( Opt() ).

- Fixed #246: GuiGetCursorInfo() with swapped mouse buttons.

AutoItX:
- Added #244: ControlTreeView().

- Fixed: ControlListView() for native DLL version.

UDFs:

- Fixed: _GUICtrlTreeView_GetText for Unicode.

3.2.11.11 (7th May, 2008) (Beta)

AutoIt:

- Fixed #222: GUIRegisterMsg() regression.
- Fixed #230: GUICtrlSetResizing after GuiSetState() regression.
- Fixed #89: The "Environment" flag and environment variables are correctly loaded.
- Fixed #90: RunAs() and RunAsWait() now correctly work with limited user accounts.

UDFs:

- Fixed #198: _FileReadToArray() removing empty lines at the end.
- Fixed: _WinAPI_CreateSolidBitmap not releasing DC.
- Fixed: _ArrayDisplay Separator handling.
- Fixed: _IEAttach, windowtitle, fixed bug matching window title when IE windowtitle registry key is not set (DaleHohm)
- Fixed: _IEPropertyGet, toolbars, broken, now works (DaleHohm)
- Added: Unicode support to _GUICtrlListView_xxxx, _GUICtrlStatusBar_xxxx, _GUICtrlComboBoxEx_xxxx
         _GUICtrlHeader_xxxx, _GUICtrlTab_xxxx, _GUICtrlToolBar_xxxx, _GUIToolTip_xxxx, _GUICtrlTreeView_xxxx functions (Gary)
- Fixed: _GUIImageList_GetIcon using wrong variable for param (SmOke_N)
- Added: $iFlag parameter to _FileWriteLog (MrCreatoR)

3.2.11.10 (20th April, 2008) (Beta)

AutoIt:
- Fixed #185: GUI performance problem when creating a large number of windows.

- Changed: Tried to make each GUI window have an independent accelerator table.

3.2.11.9 (19th April, 2008) (Beta)

AutoIt:
- Fixed: Regression in right-click/context menus.

3.2.11.8 (19th April, 2008) (Beta)

AutoIt:
- Added #212: Added parent window parameter to InputBox().

- Fixed #213: GUISetAccelerator() regression since 3.2.11.6.
- Fixed #214: Regression in GUI resizing code when menus are present.

AU3Info:
- Changed: Controls are always highlighted when using the finder tool.
- Changed: Controls are not highlighted by default.
- Changed: Control description gives the advanced version of class and instance.

3.2.11.7 (15th April, 2008) (Beta)

- Added: X, Y, W, H in advanced window definitions.

- Fixed: GUI crash introduced into last beta.
- Fixed: An attempt to FileDelete() a file that was just executed with RunWait() would sometimes fail.

3.2.11.6 (13th April, 2008) (Beta)

AutoIt:

- Added #39: Added parent window parameter to MsgBox(), FileSelectFolder(), FileOpenDialog(), FileSaveDialog().
- Added #79: X, Y, W, H in advanced control definitions.

- Fixed #195: Impossible to compile a script with GUICtrlSetDef..Color().
- Fixed #193: crash when GUICtrldelete() of a already deleted Ctrl.
- Fixed: Resizing GUI before GUISetState() (again).
- Fixed #178: GUIRegisterMsg() return value.

UDFs:

- Added: _GDIPlus_DrawImagePoints (Malkey)
- Added: 21 _WinAPI_xxxx examples (Gary)
- Fixed: Constants declared in Constants.au3 and ScrollBarConstants.au3
- Fixed: _GDIPlus_DrawImagePoints Documentation (Malkey)
- Added: _GUICtrlAVI_IsPlaying (Gary)
- Added: _GUICtrlButton_GetNote, _GUICtrlButton_GetNoteLength, _GUICtrlButton_GetSplitInfo
    _GUICtrlButton_SetNote, _GUICtrlButton_SetShield, _GUICtrlButton_SetSplitInfo
    _GUICtrlComboBox_GetCueBanner, _GUICtrlComboBox_SetCueBanner, _GUICtrlMonthCal_GetCalendarBorder
    _GUICtrlMonthCal_GetCalendarCount, _GUICtrlMonthCal_SetCalendarBorder, _GUICtrlListView_GetFocusedGroup
    _GUICtrlListView_GetGroupCount, _GUICtrlListView_GetGroupInfoByIndex, _GUICtrlListView_GetGroupRect (Gary)
- Updated: _GUICtrlButton_Create, _GUICtrlButton_GetIdealSize, _GUICtrlMonthCal_Create, _GUICtrlListView_SetGroupInfo (Gary)
- Added: _GUICtrlButton_SetDontClick (Gary)

3.2.11.5 (25th March, 2008) (Beta)

AutoIt:

- Added: REGEXPCLASS in Advanced control definition.
- Added: "start" and "count" parameters added to StringInStr().
- Added #182: GUICtrlSetDefColor(), GUICtrlSetDefBkColor().

- Fixed: Resizing GUI before GUISetState().
- Fixed #183: radio fired when GUI reactivated.
- Fixed: GUICtrlDelete on contextMenuItem.

UDFs:

- Added: _ArrayDisplay() GUI width adapted to column sizes (Jpm)

3.2.11.4 (20th March, 2008) (Beta)

AutoIt:

- Added #78: REGEXPCLASS in Advanced Windows definition.

- Fixed #177: Pixel...() does not accept optional hwnd parameter.
- Fixed #173: Advanced window descriptions only reading to the first ;

UDFs:

- Fixed: _Timer_KillTimer array assignment correction (-Ultima-)

3.2.11.3 (18th March, 2008) (Beta)

AutoIt:

- Changed: PCRE regular expression engine updated to 7.6.

- Added #128: GUISetAccelerators().

- Fixed: Modified AutoUpdateIt.au3 to work under x64.

UDFs:

- Fixed: $tagREBARINFO declaration (Zedna)
- Added: _GUICtrlRebar_GetBarInfo, _GUICtrlRebar_SetBarInfo (Gary)

3.2.11.2 (14th March, 2008) (Beta)

AutoIt:

- Added: Pixel...() can specified a window handle as last parameter.

- Changed: Maximum controls in a GUI window 4093 -> 65532.
- Changed: @OSVersion can now return "WIN_2008" for Windows Server 2008.

- Fixed: ControlTreeview() returning @error=1 on success (more).
- Fixed: StringSplit() flag=1 delimiters not case sensitive.
- Fixed: In advanced Window descriptions only semi-colon must be escaped.
- Fixed: ObjGet() memory leak.
- Fixed #152: STDIO redirection could cause (AutoIt) child process to max CPU.

UDFs:

   Added: _Debug...() can be used to debug concurrent scripts using the same Notepad session.
   Fixed: UDF Doc for _StringSplit (Gary)
 Changed: re-write _StringSpit (Randallc)
   Fixed: Doc for _GUICtrlListView_InsertGroup (MsCreatoR)
   Added: UDF Examples _GDIPlus_GraphicsSetTransform, _GDIPlus_MatrixCreate, _GDIPlus_MatrixDispose, _GDIPlus_MatrixRotate (Malkey)
   Fixed: UDF _Timer_KillTimer subscript error if function called more times than number of Timers (Gary)
   Fixed: Include file constant name from $DTS_SHORTDATECENTFORMAT to $DTS_SHORTDATECENTURYFORMAT as stated in the help
   Fixed: _ScreenCapture_Capture memory leak
   Added: UDF _WinAPI_CallWindowProc
    Added: UDF _GUICtrlListBox_ClickItem
   Changed: _StringAddComma replaced with _StringAddThousandsSep

3.2.11.1 (9th February, 2008) (Beta)

AutoIt:

- Added: ProcessWaitClose() returns exitcode in @extended

- Fixed: Unexpected AutoIt exit code.
- Fixed: AutoIt tray icon removal on script exiting.
- Fixed: AutoIt crash when removing ObjEvent() object.
- Fixed: ObjEvent() handler can destroy return of AutoIt Function : as winwait("title") can return 0.
- Fixed: Dirmove() on different volume.
- Fixed: Crash with RegRead() and REG_MULTI_SZ on x64.
- Fixed: GuiCtrlListView() behind BG Picture. Doc updated.
- Fixed: Various Edit control focus and DefPushButton issues.
- Fixed: ControlTreeview() returning @error=1 on success.
- Fixed: COM objects could lose numeric precision.
- Fixed: StringReplace() with start float number.
- Fixed: ControlCommand() "SelectString" wrong selection.

UDFs:

   Fixed: _GUICtrlListView_GetItemChecked for use with external listviews (Siao)
   Fixed: UDF _GUICtrlListView_Create freezes window when dragging an item (Gary Frost)
   Added: UDFs _GUICtrlHeader_Destroy, _GUIToolTip_Destroy, _WinAPI_SetSysColors (Gary Frost)
    Fixed: _IEPropertyGet() with "toolbar".
   Fixed: UDF Doc _ChooseFont missing $hWndOwner from parameter explanation (Bert)
   Added: UDF Examples: _WinAPI_Beep, _WinAPI_ClientToScreen, _WinAPI_EnumDisplayDevices, _WinAPI_EnumWindows
                _WinAPI_EnumWindowsPopup, _WinAPI_FlashWindow, _WinAPI_FlashWindowEx, _WinAPI_FloatToInt
                _WinAPI_GetCursorInfo, _WinAPI_GetDesktopWindow, _WinAPI_GetFocus, _WinAPI_GetModuleHandle
                _WinAPI_HiWord, _WinAPI_IntToFloat, _WinAPI_LoWord, _WinAPI_ScreenToClient (Bert/Gary)
   Updated: UDF Docs Remarks for _ScreenCapture_Capture, _ScreenCapture_CaptureWnd, _ScreenCapture_SaveImage (Gary)
    Updated: UDF description _Timer_SetTimer (Gary)
    Updated: UDF Documentation for _GUICtrlHeader_SetItemFormat, _GUICtrlListView_RegisterSortCallBack (Gary)
    Fixed: UDF _ScreenCapture_Capture Cursor is not on the right position (progandy)
    Fixed: UDF Date function(s) documentation (JerryD)
    Fixed: UDF _GUICtrlListView_RegisterSortCallBack no longer depends on WM_NOTIFY
   Added: UDFs _ColorConvertHSLtoRGB, _ColorConvertRGBtoHSL (-Ultima-)
    Added: UDF _StringSplit (Randallc)

3.2.11.0 (25th January 2008) (Beta)

AutoIt:

- Removed: Unnecessary optional parameter from ProcessClose().
- Removed: RunErrorsFatal Option.
- Removed: RunAsSet().

- Changed: @Unicode renamed in @AutoItUnicode. @Unicode is an alias for now. It will be removed > 3.2.14.0
- Changed: The behavior of StdoutRead(), StderrRead(), StdinWrite() and ConsoleRead() has been changed.
- Changed: PCRE regular expression engine updated to 7.5.
- Changed: AutoIt internet functions (e.g. InetGet()) now use "AutoIt" as a user-agent.  Previously using blank
            which was blocked by many websites.
- Changed: ControlClick() now accepts the same mouse buttons as MouseClick() - left/right/middle/primary/secondary/main/menu.

- Added: DllCall() new types int_ptr, uint_ptr, long_ptr, ulong_ptr. Special types that change size on x86/x64.
- Added: "REG_QWORD" type for RegWrite().
- Added: Option to compile scripts as console applications.
- Added: HotKeySet() modified to work with the {} notation.
- Added: _DebugBugReportEnv() function in Debug.au3 to retrieve basic Info for Bug Reporting.
- Added: FileReadLine( ,-1) read last line.
- Added: Std I/O redirection works with RunAs...().
- Added: Std I/O merged flag for using the same stream for stdout/stderr.
- Added: Std I/O supports binary data.
- Added: ConsoleWrite()/ConsoleWriteError() now return the amount of data written.
- Added: Remarks in Run() about how to close streams/release resources associated with STDIO.
- Added: StdioClose() function to force STDIO data closed for a process.
- Added: ProcessClose() now closes processes started by other users.
- Added: RunAs(), RunAsWait().

- Fixed: DllCall() setting wrong @error values.
- Fixed: BlockInput() returns errors.
- Fixed: WinWaitActive() not matching (more frequent with Windows Vista).
- Fixed: GUICtrlSetState($GUI_SHOW) on hidden radio on an active tab. (Thanks covaks/MsCreator)
- Fixed: SciTe Lite not installed in the AutoIt Choosen release dir.
- Fixed: WinMove() with Speed = 0 crash the script. (Thanks MsCreator)
- Fixed: Mysterious return value of 1 when no explicit value was set.
- Fixed: ControlCommand(), "GetLineCount"
- Fixed: _FileListToArray() when using root drive dir as c:\ under Win9x.
- Fixed: TraySetState(4) flashing tray icon for Windows Vista. (Thanks psandu.ro)
- Fixed: ProcessExists() wrong return. (Thanks oktoberfest2)
- Fixed: StringRegExp() crashing under Win95. (Thanks WesleyW)
- Fixed: Handle leak when using Run() with I/O redirection.
- Fixed: Disabled input control background on Tab. (Thanks Volly)
- Fixed: GUICtrlDelete() of a tab if two GUI windows are used. (Thanks DarkTurok)
- Fixed: AutoIt crash in Random() when range exceeds 2^31. (Thanks VicTT)
- Fixed: #include parsing error detection.
- Fixed: Array entry passed Byref to a UDF. (Thanks Nutster)
- Fixed: FileSetTime() erronously rounds UP on non NTFS partition.
- Fixed: STDIO redirection sometimes failed on Windows 9x.
- Fixed: IniReadSectionNames() returning incorrect number of sections under Win9x.

UDFs:

   Updated: _GDIPlus_ImageLoadFromFile, error check after dllcall (martin)
   Updated: GDIPlus functions error checking and Failure return types where needed (Gary Frost)
   Moved: _SendMessage, _SendMessageA from Misc.au3 to SendMessage.au3 (Gary Frost)
   Added:  UDF Files: _GUICtrlListView_ClickItem, _GUICtrlListView_RegisterSortCallBack, _GUICtrlListView_UnRegisterSortCallBack
           _GUICtrlTreeView_ClickItem, _WinAPI_GetXYFromPoint, _WinAPI_PointFromRect, _WinAPI_CreateFont
           _WinAPI_CreateSolidBrush, _WinAPI_DrawEdge, _WinAPI_DrawFrameControl, _WinAPI_FillRect, _WinAPI_FrameRect
           _GUIImageList_BeginDrag, _GUIImageList_DragEnter, _GUIImageList_DragLeave, _GUIImageList_DragMove, _GUIImageList_EndDrag
           _GUICtrlEdit_FmtLines, _GUICtrlEdit_GetPasswordChar, _GUICtrlEdit_HideBalloonTip, _GUICtrlEdit_SetPasswordChar
           _GUICtrlEdit_ShowBalloonTip, _GUICtrlSlider_GetLogicalTics, $tagLVHITTESTINFO, $tagNMLVCUSTOMDRAW
          _GUICtrlToolbar_ClickAccel, _GUICtrlToolbar_ClickButton, _GUICtrlToolbar_ClickIndex (Gary Frost)
           _GDIPlus_GraphicsDrawImageRect (smashly)
 Updated: UDF Files: _GUICtrlListView_GetOrigin - added check for dll call success
          _GUICtrlListView_SetItemSelected now supports -1 for index and focus
          _GUICtrlEdit_Create doc (Gary Frost)
   Fixes: And Added Param Paremeter: _GUICtrlListView_AddItem, _GUICtrlListView_InsertItem (Gary Frost, Koder)
          _DateDiff doc (Jos/tinjaw), _GUICtrlTreeView_GetNext, _GUICtrlTreeView_SetState (Gary Frost/Bowmore), _ScreenCapture_SaveImage (christian)
          _IsPressed doc (JustinReno), _Net_Share_ShareAdd doc (Wooltown)
    Changed: GUIConstants.au3 is now deprecated.  It is the same as using GUIConstantsEx.au3 which should be used instead.
    Fixed: _PathFull() did not handle paths with a leading \ correctly.
    Removed: MsgBox from _GUICtrlListView_DeleteAllItems and _GUICtrlListView_DeleteItem (Gary Frost)
   Updated: _GUIImageList_AddIcon added Large Icon option (Gary Frost)
   Added: _WinAPI_CallNextHookEx, _WinAPI_SetWindowsHookEx, _WinAPI_UnhookWindowsHookEx, $tagKBDLLHOOKSTRUCT (Gary Frost)
    Fixed: _ArrayDisplay more that 3999 items (-Ultima-)
    Added: _ArrayConcatenate, _ArrayFindAll (-Ultima-)
  Changed: _Arrayxxxx functions/examples (-Ultima-)
    Added: _DebugBugReportEnv (jpm)
    Fixed: _ClipPutFile offset calculated incorrectly (Gary Frost)
    Added: Advanced Examples _NamedPipes_Client, _NamedPipes_Server   (Gary Frost)
    Added:	$tagOPENFILENAME, _WinAPI_CommDlgExtendedError, _WinAPI_GetOpenFileName, _WinAPI_GetSaveFileName (Gary Frost)
     Added: _Singleton() now supports a new flag for creating an insecure object accessible by anybody.
    Changed: _Singleton() no longer does an over-zealous check to remove \ from the name.
    Fixed: _SoundLength() badly formatted (jpm)
    Fixed: _IELoadWait nuisance console COM messages with small loadwait timeouts.  (DaleHohm)
    Fixed: _IEAttach embedded and dialogbox modes failure (dependant on DllCall fix to 3.2.10.0).  (DaleHohm)
    Fixed: _IEAttach embedded and dialogbox modes to work without explorer shell running.  (DaleHohm)
    Fixed: _IEFormElementGetValue now returns NULL string if value is NULL instead of integer 0.  (DaleHohm)
     Fixed: _GUICtrlListView_AddArray Example (Gary Frost)
    Added: uniqueID to _IEPropertyGet.  (DaleHohm)
    Added: "instance" mode and $i_instance parameter to _IEAttach.  (DaleHohm)
     Fixed: _GUICtrlRebar_AddToolBarBand Button height clipped when Toolbar added to Rebar (rover)
    Fixed: _GUICtrlListView_InsertColumn, _GUICtrlListView_SetColumn align and image now work together (Gary Frost)
    Fixed: _GUICtrlToolbar_SetButtonInfo documentation, style and state param descriptions were reversed (Gary Frost)
    Fixed: _GUICtrlStatusBar_Create example documentation (Gary Frost)
    Added: Timers UDFs - _Timer_Diff, _Timer_GetTimerID, _Timer_Init, _Timer_KillAllTimers, _Timer_KillTimer, _Timer_SetTimer (Gary Frost)
    Fixed: UDF Doc for _WinAPI_LoadShell32Icon (MadBoy)
    Added: GuiScrollBars UDFs (Gary Frost)
  Updated: _GUICtrlListView_DeleteAllItems, _GUICtrlListView_DeleteItem, _GUICtrlListView_DeleteItemsSelected support control ID again (Gary Frost)
    Fixed: _FileReadToArray leaving last line feed in the array (mlowery)
    Fixed: Doc Example for _ArrayTrim (Emiel Wieldraaijer)
    Fixed: _GUICtrlTab_GetItemState, _GUICtrlTab_SetItemState, _GUICtrlTab_GetItem, _GUICtrlTab_SetItem State Mask was missing (Gary Frost)
    Fixed: UDF Docs for GUICtrlListBox_AddString, _GUICtrlListBox_DeleteString (Gary Frost)
    Fixed: Example using wrong function calls in _GUIImageList_AddBitmap (Gary Frost)
  Removed: UDF Documentation and Example for _ArrayCreate, function no longer needed (Gary Frost)
    Fixed: _GUICtrlTreeView_GetState hard crashes external application(s) (Gary Frost)
    Added: GuiButton UDFs (Gary Frost)

3.2.10.0 (25th November, 2007) (Release)

3.2.9.14 (21st November, 2007) (Beta)

- Fixed: Incorrect predicted stack size causing DllCallbacks with int64 parmeters to fail (e.g. CopyFileEx)

3.2.9.13 (19th November, 2007) (Beta)

- Fixed: DllCallbacks crashing when tray icon is clicked.  (Note: Callbacks now cannot be paused).

- Added: DllCall() and DllCallbackRegister() now accept doubles, int64 and uint64 types.

3.2.9.12 (17th November, 2007) (Beta)

- Added: DllCallbackRegister(), DllCallbackGetPtr() and DllCallbackFree()

3.2.9.11 (15th November, 2007) (Beta)

- Changed: Added a temporary pop-up warning when deprecated DllCall types are used.

- Fixed: UPX is not used when creating a 64bit compiled script.

3.2.9.10 (12th November, 2007) (Beta)

- Fixed: DllCall() stack error if multiple DllCalls happen at the same time.

3.2.9.9 (10th November, 2007) (Beta)

- Changed: Limits on Execute() removed.

- Fixed: DllStructCreate() now properly aligns the end of the structure if required.

3.2.9.8 (6th November, 2007) (Beta)

- Added: DllStructCreate() added "align" keyword to set structure alignment.

3.2.9.7 (6th November, 2007) (Beta)

- Fixed: Arithmetic (addition and subtraction) not working on Variants containing pointers.

3.2.9.6 (4th November, 2007) (Beta)

- Fixed: Looping GUIRegisterMsg() doesn't unregister. (Thanks Saunders)
- Fixed: Focus on ES_READONLY edit control. (Thanks BillB)

3.2.9.5 (2nd November, 2007) (Beta)

- Changed: DllCall() new method of passing types by reference using *.
- Changed: DllCall(): short_ptr, long_ptr, int_ptr types deprecated.  Use short*, long* and int* respectively.

- Added: VarGetType(). (Thanks Valik)
- Added: @AutoItX64 macro.
- Added: DllCall() new types of wparam and lparam.
- Added: Au3Info : Handle info for windows and controls.

- Fixed: Control...() functions using CLASS and TEXT together sometimes incorrect.
- Fixed: Control...() functions using CLASSNN sometimes incorrect.
- Fixed: Windows Vista taskbar previews causing problems with windows matching.
- Fixed: _SQLite_SQLiteExe() referencing by default "Extras\SQLite\SQlite3.exe". (Thanks randallc)
- Fixed: _Sound...() when refering to a file with "!" characters. (Thanks chrisL)

3.2.9.4 (25th October, 2007) (Beta)

- Fixed: ProcessExists() on service process under Win2K. (Thanks Firewzy)
- Fixed: $GUI_DEFBUTTON behavior. (Thanks Saunders)
- Fixed: ProcessGetStats() retrieving IO counters for Win9x, WinNT, Win2000. (Thanks monter)
- Fixed: ControlCommand(SelectString) order selection. (Thanks Zedna)
- Fixed: GUISetStyle(), GUIGetStyle(), ProcessGetStats() cannot be compiled. (Thanks Pascal 257, Jos)
- Fixed: Array cannot have 2^24 entries.
- Fixed: DefPushButton behavior. (Thanks Saunders)
- Fixed: GuiCreateMenu() on a windows without title and without client area. (Thanks Volly)
- Fixed: WinWaitActive() sometimes failing after a WinActivate().

3.2.9.3 (5th October, 2007) (Beta)

- Fixed: $var = $var was not giving an error when $var didn't already exist.
- Fixed: Opt("WinTitleMatchMode", Default) fatal error. (Thanks pseakins)
- Fixed: 3.2.9.2 AutoIt error when launched under Windows 2000.
- Fixed: GUICtrlSetStyle() with $ES_READONLY bad $WS_TABSTOP. (Thanks Antiec, gafrost)
- Fixed: AutoIt Crash on exit if Win...() used with a Title being a COM object. (Thanks Volly)

3.2.9.2 (30th September, 2007) (Beta)

- Changed: PCRE regular expression engine updated to 7.4.

- Added: ProcessGetStats().

- Fixed: Extra notification on colored button. (Thanks livewire)
- Fixed: IniReadSectionNames() for [] sections. (Thanks DavidFarner)

3.2.9.1 (18th September, 2007) (Beta)

- Added: SendKeepActive().
- Added: More commands for ControlTreeView().

- Fixed: GUICtrlSetImage() sizing regression from 3.2.4.9. (Thanks Wooltown)
- Fixed: GUICtrlCreateListView() with no column. (Thanks gafrost)
- Fixed: _GUICtrlListViewInsertColumn() after _GUICtrlListViewDeleteColumn() of the first column of a ListView control. (Thanks Antiec, gafrost)

3.2.9.0 (12th September, 2007) (Beta)

- Added: ControlTreeView().

3.2.8.1 (10th September, 2007) (Release)

- Fixed: Possible crash with StringRegExp().

3.2.8.0 (8th September 2007) (Release)

3.2.7.6 (7th September 2007) (Beta)

- Added: WinMove() speed parameter.

- Fixed: Crash on AutoIt exit if TrayItemCreate is not deleted. (Thanks Saunders)
- Fixed: AutoIt crash on bad parameter when calling TrayCreateMenu

3.2.7.5 (6th September 2007) (Beta)

- Fixed: Character positions returned by StringRegExp() not correct for characters > 127 (accents, non-Western)

3.2.7.4 (5th September 2007) (Beta)

- Changed: General speed improvements (currently up to 24% in some cases compared to 3.2.6.0).

- Fixed: Memory leak when AutoIt need to get longfilename (a lot of file functions). (Thanks Visual Leak Detector)
- Fixed: ListviewItem not created after other Child Windows creation/deletion. (Thanks MsCreatoR)
- Fixed: ControlGetFocus() returning bad ClassNN. (Thanks txomin, pdaughe)
- Fixed: Detection of invalid CONTINUELOOP. (Thanks MsCreatoR)

3.2.7.3 (3rd September 2007) (Beta)

- Fixed: String memory allocation error introduced in 3.2.7.2.

3.2.7.2 (2nd September 2007) (Beta)

- Changed: PCRE regular expression engine updated to 7.3.
- Changed: Recursion-based code limits relaxed.

- Fixed: ProcessExist() under Windows 9x.
- Fixed: $LVSCW_AUTOSIZE column truncates display string. (Thanks benners)
- Fixed: Incorrect listview creation. (Thanks Bowmore)

3.2.7.1 (30th August 2007) (Beta)

- Changed: More speed improvements.

- Fixed: ControlGetText() crash on Scite windows. (Thanks Xenobiologist)

3.2.7.0 (25th August 2007) (Beta)

- Added: wchar type added to DllStructCreate()

- Fixed: GUISetState(@SW_DISABLE) not disabling keyboard input. (Thanks MsCreatoR)
- Fixed: Sometimes AutoIt crashes on DllStructGetData of char[]. (Thanks drlava)
- Fixed: Au3Info restoring last settings.
- Fixed: Better handling of notifications when using colored buttons.

3.2.6.0 (24th August 2007)  (Release)

3.2.5.7 (22nd August 2007) (Beta)

- Changed: More speed improvements (currently around 30-40% over 3.2.4.9)

- Added: GUIGetStyle(). (Thanks Valery)
- Added: byte and ubyte type to DllCall(). (Thanks lotrfan01)

- Fixed: AutoIt crash on WinWait("","text") when a Scite is open. (Thanks Azazel)

3.2.5.6 (19th August 2007) (Beta)

- Changed: Limited Unicode support added in regular expressions.

- Fixed: Some crashes on Chinese systems during conversions.

3.2.5.5 (18th August 2007) (Beta)

- Fixed: Aut2Exe crashing on Chinese systems when running in ANSI.
- Fixed: resizing of treeview. (Thanks RazerM)
- Fixed: IE.au3 bad 3.2.5.4 version. (Sorry Dale)
- Fixed: Cmdline /ErrorStdOut working with /AutoItExecuteLine.
- Fixed: Detection of no separator after keyword or function.

3.2.5.4 (14th August 2007) (Beta)

- Changed: Slight expression parsing speed improvement.

- Added: ControlMove() just resizing as WinMove() if X=Y=Default. (Thanks Zedna)

- Fixed: Wrong Notification on {ENTER} after clicking on a listviewItem. (Thanks randallc)
- Fixed: Wrong resetting of image on listviewitems if image set on the listview.(Thanks randallc)
- Fixed: FileselectFolder() out-of-bounds popup. (Thanks dash007)
- Fixed: Resizing of listview control. (Thanks Ultima)

3.2.5.3 (11th August 2007) (Beta)

- Changed: Some speed improvements.

- Fixed: @error not set on bad WinGetPos() return. (Thanks Emiel Wieldraaijer)
- Fixed: LVM_EDITLABEL hogging cpu. (Thanks gafrost)
- Fixed: AutoIt (non UNICODE version) crash with some COM objects. (Thanks Tippex)

3.2.5.2 (9th August 2007) (Beta)

- Changed: IconId in all GUI functions is coherent with the actual GUICtrlSetImage() for icon control.

WARNING Previous scripts using GUICtrlSetImage(), GUISetIcon(), TraySetIcon() and TraySetPauseIcon()
    may display a wrong Icon. To get the same icon "if nId > 0 Then newId = - nId - 1".

- Changed: AutoIt .a3x and compiled script format.  Exe2Aut will only decompile 3.2.5.1
           and earlier files. The new format doesn't support decompilation.

- Fixed: GUISetState() on GUI with W=0 or H=0.
- Fixed: GUI control Tip not reappearing after a click or timeout. (Thanks MsCreatoR, anixon)
- Fixed: GUI controls not at the right position if a Control menu is in use. (Thanks Koder)
- Fixed: EnvUpdate() in UNICODE AutoIt version not working since 3.2.3.3. (Thanks klasch)
- Fixed: FileRead(..., count) returning count-1 chars. (Thanks randallc)
- Fixed: Unicode filenames in FileInstall().

3.2.5.1 (29th July 2007) (Beta)

- Fixed: LVS_EX_HEADERDRAGDROP extendedstyle. (Thanks MsCreatoR)
- Fixed: UpDown control shows through tabbed pages. (Thanks Jdop)
- Fixed: GUICtrlSetState on UPDOWN control without changing the state. (Thanks Emiel Wieldraaijer)
- Fixed: FileInstall() in compiled scripts causing GUI problems.
- Fixed: ControlGetFocus() on control not created with AutoIt GUI. (Thanks ChristL)
- Fixed: @AutoItPID and processlist coherency under Win9x.
- Fixed: GUICtrlSetResizing not returning error on non resizable control.
- Fixed: regression for ControlSend SHIFTDOWN/UP since 3.2.3.13. (Thanks MHz)
- Fixed: Fileread bad return length. (Thanks RazerM)

3.2.5.0 (11th July 2007) (Beta)

- Added: ClassnameNN in control and summary info.
- Added: Float type to dllCall. (Thanks PaulIA)
- Added: AU3Check v1.54.8 support for both "#AutoIt3Wrapper_plugin_funcs" and "#Compiler_plugin_funcs".
- Added: Extra parameter in ProcessClose() to close Stream handles.

- Changed: GUICtrlSetImage() on Button Ctrl with id<0 coherent with icon ctrl setting.
- Changed: PCRE engine updated from 7.0 to 7.1

- Fixed: Drag and drop on a listview control after clicking on its header. (Thanks MsCreatoR)
- Fixed: Support "resource only" dlls for GUISetImage().
- Fixed: Default minimum for GUICtrlSetLimit() set to 0.
- Fixed: Z order after GUICtrlSetStyle() on edit or input control. (Thanks th.meger)
- Fixed: FileReadLine() getting bad cached data when reading specific line numbers with file handles.
- Fixed: Slight lag in GUIGetMsg() under certain circumstances.
- Fixed: StringReplace() and occurances parameter.
- Fixed: GuiCtrlSetFont() on Tab control. (Thanks Sokko)
- Fixed: Leading blanks before #include cannot be compiled.
- Fixed: Notification on ENTER on Colored button.
- Fixed: suppress delay when speed=0 in MouseMove.
- Fixed: RegWrite() setting bad registry entry. (Thanks Rick, jim404)
- Fixed: AutoIt hogging CPU when text msgbox too big. (Thanks Larry)
- Fixed: ControlSend() sometime to wrong control when using empty controlid.
- Fixed: ProcesExists() under Win2K with processname >15 chars.
- Fixed: Int() with string comparison wrong match.
- Fixed: InetGetSize() in unicode version returns 0. (Thanks koiron)
- Fixed: GUICtrlCreateListview() with more than 254 columns. (Thanks randallc)
- Fixed: AutoIt Crash on wrong recursive RegExp.
- Fixed: BitRotate() with left bit set. (Thanks Arses)
- Fixed: Filemove() returning 1 without any move. (Thanks firefly)
- Fixed: FileRead() returning chr(0) in ANSI mode.
- Fixed: Au3Info control coords relative to client.
- Fixed: StringInStr() not returniong 0 when searching backward and searh lenght greater than string.
- Fixed: AutoUpdateIT from Saunders.

UDF's
   -  Added _IEGetObjByID to IE.au3 (DaleHohm)
   -  Fixed _IEPropertyGet() directives appversion and appminorversion (Dale Hohm)
   -  Fixed _IELoadWait to trap ClientDisconnected Com errors (DaleHohm)
   -  Fixed and enhanced web links in _IE_Introduction('basic') (DaleHohm)
   -  Several updates to IE.au3 documentation and examples (DaleHohm)
   -  Total rewrite of _ArrayDisplay with more options. (randallc)
   -  Fixed _ArrayDisplay to set the Opt("GUIOnEventMode",0) before dsiplaying the Array and changing is back before returning.
   -  Added Optional: Handle of owner window to _ChooseColor andf ChooseFont. (gafrost)
   -  Fixed _ArraytoString for array with only one element. (Thanks jonny1234)
   -  Fixed _SetDate in Date.au3 if daylight saving is involved.
   -  Fixed: bad checking of SQlite version.
   -  Added: CompareVersion() in Misc.au3.
   -  Fixed: _IsClassName doc.

3.2.4.9 (25th May, 2007) (Release)

- Added: StringCompare()

- Fixed: Basic string comparisons were not working with locale as in previous versions.

3.2.4.8 (23rd May, 2007) (Release)

- Fixed: Errors with non-western codepages and ANSI format scripts.

3.2.4.7 (22nd May, 2007) (Release)

- Added: Aut2Exe options for forcing ANSI mode compilation (/ansi and /unicode)
- Added: StringToBinary()
- Added: Additional unicode related options for BinaryToString()

3.2.4.6 (20th May, 2007) (Release)

- Fixed: StringReplace() and occurances parameter.

3.2.4.5 (20th May, 2007) (Release)

- Added: BinaryToString() for binary buffer to ANSI string quick conversions.
- Added: @Unicode to show if AutoIt is being run in Unicode or ANSI mode.

- Changed: StringReplace() speeded up - a lot.
- Changed: Au3Info is now resizable.

- Fixed: Chr(0) now properly works with Binary()

3.2.4.4 (17th May, 2007) (Release)

- Fixed: Chr(0) now acting more sensible (now acts in a similar way to VBScript).

3.2.4.3 (17th May, 2007) (Release)

- Fixed: FileRead() not working properly with unicode files.

3.2.4.2 (15th May, 2007) (Release)

- Changed: Au3Info graphical tweaks and Summary tab.

- Fixed: FileReadLine() getting bad cached data when reading specific line numbers with file handles.
- Fixed: Slight lag in GUIGetMsg() under certain circumstances.

3.2.4.1 (13th May, 2007) (Release)

- Added: ChrW() and AscW() for unicode operations.

- Fixed: Chr() and Asc() for character codes 128-255 in unicode mode.
- Fixed: Unicode BOM was not being written in file append modes if the file was empty.
- Fixed: Error in Include\GuiCombo.au3 and Include\IE.au3.

3.2.4.0 (10th May, 2007) (Release)

Big Changes:

- AutoIt is now compiled for Unicode!  AutoIt3.exe is Unicode - AutoIt3A.exe is ANSI.
- Au3Info tool rewritten.
- Binary data functions completely rewritten - scripts using these functions will need to be changed.

3.2.3.14 (6th May 2007) (Beta)

- Added: Support for virtually all file formats (UTF16 LE/BE, UTF8) in scripts and File functions.
- Fixed: Possible Aut2Exe crash with #cs/#ce blocks.

3.2.3.13 (4th May 2007) (Beta)

- Removed: Struct keyword and dot notation for accessing.

3.2.3.12 (29th April 2007) (Beta)

- Changed: Removed restrictions on the maximum number of #include directives.
- Changed: Removed restrictions on the maximum number of DllOpen() handles.
- Changed: Removed restrictions on the maximum number of open files.
- Changed: Removed restrictions on the maximum number of hotkeys.

3.2.3.11 (28th April 2007) (Beta)

- Fixed: Binary() crashed when passed an array.

3.2.3.10 (27th April 2007) (Beta)

- Added: New modes for FileOpen() to force Unicode and binary operations.

3.2.3.9 (26th April 2007) (Beta)

- Changed: Performance improvements in StringStripWS().

- Fixed: Unicode regression in StringIsAlpha(), StringIsAlnum(), StringIsDigit(), StringIsXDigit(),
            StringIsLower(), StringIsUpper(), StringIsSpace(), StringIsASCII()

3.2.3.8 (25th April 2007) (Beta)

- Fixed: Regression in StringInStr().
- Fixed: Possible crash when using StringStripWS(), flag 4 and empty strings.

3.2.3.7 (25th April 2007) (Beta)

- Fixed: GuiCtrlSetTip() not always working correctly.
- Fixed: Regression in InetGetSize() that caused a crash.
- Fixed: GUICtrlSetLimit() for UpDown controls where min = max.

3.2.3.6 (17th April 2007) (Beta)

- Fixed: Regression in #RequireAdmin and #NoTrayIcon in compiled scripts.
- Fixed: Aut2Exe crashed when using nodecompile option.
- Fixed: UDPSend() and UDPRecv() fixed for binary rewrite.

3.2.3.5 (15th April 2007) (Beta)

- Fixed: Regression in ConsoleWrite()

3.2.3.4 (15th April 2007) (Beta)

- Fixed: Regression in FileSetAttrib() and FileSetTime()

3.2.3.3 (15th April 2007) (Beta)

AutoIt is now compiled for Unicode!  AutoIt3.exe is Unicode - AutoIt3A.exe is ANSI.

- Added: BinaryLen(), BinaryMid()

- Changed: Binary data in variants are now treated as a special type, separate from normal strings.
- Changed: BinaryString() renamed to Binary()
- Changed: IsBinaryString() renamed to IsBinary()

3.2.3.2 (29th March 2007) (Beta)

- Changed: ControlClick() can now click a control at a certain position.
- Changed: ControlClick() can now properly simulate double-clicks.
- Changed: ControlClick() no longer forces the activation of the parent window (up to the user now).
- Changed: ControlClick() related coordinates added to Au3Info.

3.2.3.1 (27th March 2007) (Beta)

- Changed: Au3Info recoded.
- Changed: Improved the searches that can be done for windows/controls/instances.

- Fixed: Slow GUI tab redrawing under Windows Vista fixed.

3.2.3.0 (09th March, 2007) (Beta)

- Added: Colored Button based on gafrost UDF.
- Added: DllStruct...() can reference elements by name.
- Added: Struct variables

- Changed: From DEFAULT_QUALITY to PROOF_QUALITY for Change/Set Font functions.
- Changed: pcre from 6.7 to 6.10.
- Changed: x^y compatible with C99 standard.

- Fixed: HotKeySet bad notification. (Thanls litlmike)
- Fixed: FileGetAttrib on pagefil.sys. (Thanks Billy)
- Fixed: BitXOR doc. (Thanks DaveC)
- Fixed: invalid default parameter in GUICtrlSetData not detected. (Thanks mark2004)
- Fixed: Assign does return error on array element.
- Fixed: FileOpen("test.txt", 2+8) returning error.
- Fixed: Error detection in Enum statement.
- Fixed: Help file does not open examples. (Thanks HighGuy)
- Fixed: _GUICtrlStatusBarSetIcon
- Fixed: Opt("WinTitleMatchMode"). (Thanks LOULOU)
- Fixed: _Degree in Math.au3
- Updated: refresh blocked during GUISetState(@SW_LOCK). (seems needed for Windows XP style)
- Fixed: Stack corruption resulting from improper use of DllCall() now gracefully aborts the script instead of hard crashing.
- Fixed: Crash when reading empty REG_MULTI_SZ. (Thanks Holger)
- Fixed: Round() not returning an integer.
- Fixed: ControlSend() to empty "" ctrl fixed for inactive window. Also shift state behavior.
- Fixed : O^(-1).
- Fixed: non detection of illegal statement.
- Fixed: HotKeySet("^{PAUSE]",... notification.
- Fixed: {CTRLBREAK} ->{BREAK} as ctrl is user responsability.
- Fixed : _DateTimeSplit()
- Fixed: $var = Default passed as parameter to Com object. (Thanks big_daddy)
- Fixed: Edit control would always have focus the first time the GUI was displayed even if it shouldn't.  This behavior also ignored $GUI_FOCUS.
- Fixed: range value for seed Number in SRandom(). (Thanks VicTT)
- Fixed: AutoIt Info last window memorization. (Thanks Supercross)
- Fixed: Fileread crash if no count in raw mode. (Thanks rbhkamal)
- Fixed: _GUICtrlEditGetLine(). (Thanks Saunders, by gafrost)
- Fixed: Opt("WinTitleMatchMode", <0) really matching case insensitive.
- Fixed: FileSetAttrib/FileSetTime wrong setting. (Thanks Koshy_John/Valik)
- Fixed: Execute/Call recursive overflow display error message. (Thanks /dev/null)
- Fixed: Aut2exe warning message if icon not found. (Thanks Saunders)
- Fixed: _ReplaceStringInFile() to keep the original file attributes.
- Fixed; issue with au3check when include file name contains trailing spaces.(Update version to 1.54.7)
- Fixed: WinGetTitle() returns 1 on error. (Thanks Ron_C)
- Fixed: memory leak on keyword variable deallocation.

3.2.2.0 (19th December, 2006) (RC1)

- Changed: @error set to WinAPI GetLastError() for Run().

- Fixed: List control not displayed when using GUISetFont. (Thanks Valuater)
- Fixed: MsgBox() timeout on Windows Vista.
- Fixed: Fatal error on opt('TrayMenuMode",...). (Thanks Pavel)
- Fixed: Installer SciTE bad link creation.
- Fixed: Uninstaller include file removal

3.2.1.14 (9th December, 2006) (Beta)
- Added: GuiCtrlSetState $GUI_DROPNOTACCEPTED. (Thanks gcriaco)
- Added: $GUI_FOCUS, $GUINOFOCUS for listviewitem control.
- Added: IsDllStruct()
- Added: SRandom() to set seed for random number generation.
- Added: WinTitleMatchMode for case insensitive matching.

- Changed: Small tweak to Floor() to ensure it is not as susceptible to floating point precision errors.
- Changed: Small tweak to Ceiling() to ensure it is not as susceptible to floating point precision errors.

- Fixed: WorkingDir in ShellExecute(Wait). (Thanks Saunders)
- Fixed: DllCall() crashes when using uint, ushort.
- Fixed: PixelCheckSum() GDI leak.
- Fixed: Window titles with "regexp=REGEXP" return 0 and @error=1 on bad pattern.
- Fixed: GuiCtrlRead on listview control when sorted. (Thanks Ultima, gafrost)
- Fixed: FileRecycleEmpty() regression.
- Fixed: @OSVERSION on Windows 9x.
- Fixed: GuiGetCursorInfo with Handle not retrieving mouse click info. (Thanks Valuater)

3.2.1.13 (18th November, 2006) (Beta)
- Added: Listview Alternate coloring with $GUI_BKCOLOR_LV_ALTERNATE.
- Fixed: Recent crash under Windows 98.
- Fixed: List control height when font size changes. (Thanks StuffByDennis/gafrost)
- Fixed: GUICtrlSetImage not testing icon on error.
- Fixed: @ScriptDir equal @WorkingDir for rootdir (x:\). (Thanks reggy)
- Fixed: GUIGetCursorInfo (winhandle) when child not active.
- Fixed: AutoIt error not displaying error line number. (Thanks GEOSoft)
- Fixed: Yet another MsgBox() timeout regression fixed.
- Fixed: au3check only checks for a string to terminate on the same line to. (v1.54.5)
- Fixed: _StringAddComma(). (Thanks RazerM, by Smoke_N)
- Fixed: drag & drop $GUI_EVENT_DROPPED notififation on edit control. (Thanks ZoScr)

3.2.1.12 (5th November, 2006) (Beta)
- Fixed: Coherency of type parameter for DLLCall() and DLLSructCreate()
- Added: IconId can be reference by ordinal value if negative 1-based index is use.
- Added: Executable and help files for SQLite in Extras dir.
- Updated: Draw lines ontop during CtrlSetGraphic rendering.
- Fixed: GuiGetCursorInfo eating msg. (Thanks BitRot)
- Fixed: Invalid THEN did not produce a syntax error. (Thanks thomasl)
- Fixed: StringMid with start <=0. (Thanks Adam1213)
- Fixed: syntax checking on unmatching DO, WEnd, .... (Thanks guest)
- Fixed: Default keyword didn't always work correctly with COM objects.
- Fixed: MsgBox() timeout regression.

3.2.1.11 (20th October, 2006) (Beta)
- Fixed: GUICtrlRead, GUICtrlSetState, GUICtrlSetData with listviewitem sorted. (Thanks Ultima/gafrost)
- Fixed: StringSplit every char on BinaryString.(Thanks The Kandie Man)
- Fixed: When #include failed was not including filename in the error message.

3.2.1.10 (15th October, 2006) (Beta)
- Fixed: GUICtrlCreateIcon, GUICtrlSetImage with IconID=-1.
- Fixed: regression with StringMid("",5,2).
- Fixed: Typo that broke Ping().

3.2.1.9 (13th October, 2006) (Beta)
- Fixed: COM property write fails when using arguments (Thanks Mhz, Bastiaan).
- Fixed: Send/ControlSend for US international keyboard (Thanks SvenP)
- Fixed: Send/ControlSend char>=chr(128) for english keyboards. (Thanks Jon)
- Fixed: MsgBox() with task modal flag left GUI's disabled on timeout.
- Fixed: report reporting by messagebox even with /ErrorStdOut. (Thanks picasso)
- Fixed: GUICtrlSetImage default icon value for Icon Ctrl. (Thanks Ultima/gafrost)

3.2.1.8 (8th October, 2006) (Beta)
- Fixed: InetGet() regression.
- Fixed: StringRegExpReplace() wasn't returning number of replacements in @extended.

3.2.1.7 (6th October, 2006) (Beta)
- Added: StringRegExp() and StringRegExpReplace() regular expression support (Perl compatible)
- Added: Regular expression support for Window title matching
- Added: ShellExecute() and ShellExecuteWait() functions. (by Jon)
- Fixed: Mistake in IniWriteSection() documentation. (by Valik)
- Fixed: GuiSetFont, GuiCtrlSetFont bad parameter error return. (Thanks vollyman)
- Fixed: _GUITreeViewGetText doc typo. (gafrost)
- Fixed: GUIRegisterMSG destroy @error. (Thanks gafrost, by Holger)
- Fixed: $LVS_SORTASCENDING with GUICtrlSetImage icon bad display. (Thanks Ultime, by Holger)
- Fixed: Wrong default arguments for _ArrayToString(). (Thanks Dickb, by Valik)
- Fixed: GUIRegisterMSG destroyed @error. (Thanks gafrost, by Holger)
- Fixed: $LVS_SORTASCENDING with GUICtrlSetImage icon gave bad display. (Thanks Ultime, by Holger)
- Added: @extended error code on DriveMapAdd error.
- Fixed: bad "#" instruction inhibit whole script. (Thanks sksbir)

3.2.1.6 (6th October, 2006) (Beta)
Aborted upload due to last minute bugs.

3.2.1.5 (29th September, 2006) (Beta)
- Fixed: FtpSetProxy doc example. (Thanks Zedna)
- Added: 2 UDF's to GUIStatusBar.au3. (gafrost)
- Fixed: Several updates to GUIStatusBar.au3. (gafrost)
- Fixed: Several updates to Sound.au3.  (RazerM)
- Fixed: Crash Aut2exe using cmdline with shortnames. (Thanks The Kandie man)
- Changed: PixelChecksum() is now over 30x faster. (by Valik)
- Fixed: _GUICtrlListViewGetItemText in GUIListView.au3. (Thanks Ultima, by gafrost)
- Fixed: WinMove, StderrRead Doc typos. (Thanks Zedna, Helge)
- Added: GUICtrlCreateIcon and GUICtrlSetImage can select in multiple icon file by name. (Thanks gafrost, this-is-me, by Larry)
- Added: #RequireAdmin for UAC/Windows Vista. (By Jon)
- Added: ToolTip() option to ensure the tooltip is always displaying on a monitor. (by Valik)
- Fixed: Tooltip state (Such as icon or title) was showing up on subsequent tooltips that didn't want those items.  This affected both ToolTip() and GUICtrlSetTip(). (by Valik)
- Added: IniWriteSection() function. (by Valik)
- Added: Windows vista help file entry.

3.2.1.4 (22th September, 2006) (Beta)
- Fixed: ControlSend sending special characters. (Thanks mozart90, Zedna)
- Added: Expanded GUICtrlSetTip() to allow creation of tooltips with titles, icons and using the balloon tip style. (by Valik)
- Added: Tooltip supports Default keyword. (by Valik)
- Changed: Modified _PathSplit() to be much faster.
- Added: Remark added to _PathSplit() mentioning that it does not accept command line strings, only paths.
- Changed: Rewrote _ArrayToString() removing a lot of unnecessary error checking.
- Fixed: crash in Au3exe with badly form input file in FileInstall. (Thanks Angelia)
- Fixed: wrong execution a compiled script containing fileInstall inside #CS-#CE. (Thanks Confuzzled)
- Fixed: FileInstall referencing a file without any path will refernce it from the ScriptDir to be coherent with the compiled script. (Thanks Bart Westra)

3.2.1.3 (15th September, 2006) (Beta)
- Fixed: "#include <Misc.au3>" in GuiIPAddress.au3  (gafrost)
- Fixed: StringInStr not converting to string search parameter. (Thanks mc)
- Added: Support >32x32 icon from .exe/.dll in GUICtrlCreateIcon or GUICtrlSetImage. (Thanks this-is-me, added by Larry)
- Fixed: Syntax description for _DayValueToDate() showed _DateToDayValue() instead. (by Valik)
- Fixed: example in Language Reference->Conditional Statement doc page. (Thanks nikink)
- Fixed: typo in GUICtrlCreateGraphic doc. (Thanks Gyzmok)
- Fixed: Int() of a binarystring.

3.2.1.2 (9th September, 2006) (Beta)
- Fixed: MouseMove in secondary screen. (Thanks james3mg)
- Fixed: _GUICtrlStatusBarCreate in GUICtrlStatusBar.au3. (Thanks Zedna, fixed by gafrost)
- Fixed: str and wstr in DllCall doc (only up to 65536). (Thanks thomasl)
- Fixed: Send to italian keyboard. (Thanks Domenico)
- Added: @KBLayout to retrieve the current keyboard configuration.
- Fixed: GUICtrlSetState doc remarks about menu control. (Thanks peethebee)
- Fixed: refresh after a GUICtrlSetBkColor. (Thanks th.meger)
- Fixed: crash on line begining with ~  : "Unable to parse line". (Thanks Helge)
- Fixed: IniReadSectionNames() returned bogus data in Windows 98 when the INI file was empty or did not exist.
- Added: CompiledScript string file info for compiled script. (Thanks ENCHAIGNE)
- Updated: FileGetVersion extra parameter to retrieve string file info.
- Fixed: _GUICtrlStatusBarSetIcon doc typo and precision. (by gafrost)
- Fixed: _GUICtrlTreeViewSetText doc typo. (by gafrost)
- Fixed: Doc precision about GUICtrlCreateTab that can be used only one by window. (Thanks Martin, Zedna)
- Fixed: include reference in doc example. (Thanks gafrost)
- Fixed: .a3x green icon.
- Fixed:  _GUICtrlListViewGetHeader doc remarks. (by gafrost)
- Fixed: _GUICtrlTreeViewDeleteItem Help hyperlink error. (Thanks griaco)
- Updated: @ScriptLineNumber doc description. (Thanks Zedna)
- Fixed: Installdir doc page. (Thanks Zedna)
- Fixed: @compiled when the script is compiled. (Thanks MHz)
- Fixed: _INetSMTPMail doc precision. (Thanks Dave in PNG)
- UDF's (27 August 2006)
   - Added 2 UDF's to GUIStatusBar.au3. (gafrost)
   - Added GuiIPAddress.au3 to Include directory. (gafrost)
   - Added Sound.au3 with several sound UDFs to Include directory. (RazerM)
   - Removed the version numbers from the include files.

3.2.1.1 (27th August, 2006) (Beta)

- Fixed: UDP... return code on error.
- Fixed: UDPRecv crashed on bad parameter.
- Fixed: COM was corrupting floating point values.
- Fixed: Aut2Exe was not finding includes correctly.

3.2.1.0 (26th August, 2006) (Beta)

- Changed: Performance improvement prototype (up to 100% on some scripts!).

- Fixed: Memory leak with prototype plugins.
- Fixed: Some Object Collections could not be parsed in one AutoIt statement .
- Fixed: Bad screen updating of already unchecked radiobuttons. (Thanks SlimShady)
- Fixed: Tray icon tooltip not displaying the scriptname when compiled. (Thanks Christian Blackburn)

3.2.0.1 (13th August, 2006) (Release)

- Fixed: (AU3INFO) Buffer overrun in control code.
- Fixed: Exe2Aut.exe was missing its digital signature.

12th August, 2006 - v3.2.0 (Release)

- Added: in GuiTreeview.au3, _GUICtrlTreeViewGetParentHandle() and _GUICtrlTreeViewGetParentID() - supports now optional item handle/ID (by holger)
- Added: Hotkeys for Always On Top, Highlight Controls and Magnify options.

- Fixed: twice same link in SplashTextOn doc.(Thanks FeReNGi)
- Fixed: not working FileGetAttrib doc example. (Thanks nitekram)
- Fixed: GuiTreeview doc examples. (by gafrost)
- Fixed: autoitx bugs.
- Fixed: bad repainting of updown reenabled control. (Thanks peethebee)

6th August, 2006 - v3.1.1.133 (beta)

- Added: Test for COM object comparison using = and <>.

- Fixed: Bad multi Drop in a edit control. (Thanks Cyberword,Lazycat)
- Fixed: Brain-dead developer broke ConsoleRead().
- Fixed: Documentation for IniDelete() was wrong.
- Fixed: Uppercase in udf doc (Thanks gafrost).
- Fixed: GUICtrlRegisterListViewSort doc examples. (Thanks FeReNGi).
- Fixed: Typo in Send doc. (Thanks Zedna).
- Fixed: Menu conventions changed in Aut2Exe and Exe2Aut.
- Fixed: Some precision on text vertical centering in SplashTextOn documentation.
- Fixed: Treeview does not refresh on tab. (Thanks Epitome, fixed by holger)

23th July, 2006 - v3.1.1.132 (beta)

- Added: AutoItX beta 3.1.1.1.
- Added: Au3Check so it can be used without the Full SciTe. (by JdeB)

- Updated: TrayIcon is no more displayed when using /AutoIt3ExecuteLine. (Thanks gamerman2360, Valik)
- Changed: Compilation done with VC8 instead of VC6. (by Jon)
- Updated: SciTe updated to 1.70, it can be start with the AutoIt V3 menu. (by JdeB, Jon)

- Fixed: FileInstall() deleting output dir without backslash at the end. (Thanks Neil, fixed by Jon)
- Fixed: GUICtrlRead bad return on Treeviewitem. (Thanks gafrost, fixed by Valik)
- Fixed: Background color of listbox changes in tab. (Thanks HighGuy)
- Fixed: Reading std streams would fail if the stream was not a pipe.(internal change by Valik)
- Fixed: Doc examples referring constant already define in GUIConstants.au3. (by Jon)

19th July, 2006 - v3.1.1.131 (beta)

- Fixed: GUIRegisterMsg() crash in "GUIOnEventMode" (Thanks Nomad, fixed by Holger)
- Fixed: GUIRegisterMsg() unregister a message (Thanks Nomad, fixed by Holger)
- Changed: GUICtrlRead() in advanced mode - returns extended info as single value. This change will possible break scripts! (Valik/changed by Holger)
- Added: Binary support for COM functions. It works only with variables passed between COM functions (so you can't display, convert or do mathematical actions with these variables yet). (by SvenP)
- Changed: GUICtrlRead() in advanced mode for Tab control return the controlId of the select tabitem. The Opt("GuiEventOption",2) is suppressed. This change will break scripts! (Thanks Jon)
- Updated: GUI Standard includes splitted for better small inclusion. GUIConstants.au3 still give the whole stuff perhaps a little more. (by Valik)
- Fixed: Problem with Util_DoesFileExist and pagefile.sys . (Thanks Christian Blackburn, fixed by Jon)
- Fixed: GUICtrlSetGraphic,GUISetOnEvent,GUICtrlSetResizing, AutoItSetOption, MouseClick,Finc...EndFunc, For...in...Next, _GUICtrlTreeViewDeleteItem doc brolken links. (Thanks Christian Blackburn)
- Changed: StdioRead now sets a unique @error code for each error. Also, @extended is set to GetLastError() in each case. These are helpful for diagnosing I/O problems. The errors or the values should not be documented, it is enough to know that an error occurred, it is not necessary for users to know specifically what internal error occurred. (by Valik)
- Fixed: Slight precision on $CmdLineRaw for compiled scripts. (Thanks PsaltyDS)
- Fixed: Crash after AutoIt exit. (Thanks JoshDB,fixed by SvenP)
- Changed: _FilesListToArray(): Added @error 4 meaning no files found. (gafrost)
- Changed: Constants seperated out into seperate files. (Valik)
- Changed: GUIConstants.au3 is now a stub including pretty much everything (Use GUIConstantsEx.au3 and the other Constants.au3 files for more granularity). (Valik)
- Updated: several Helpfile pages for ie.au3. (Big_Daddy)
- Updated: several functions in visa.au3. (Angel)
- Fixed: _viPrintf and _viExecCommand would not work with certain GPIB cards (such as USB-GPIB cards).
- Changed: use of the VISA command "viWrite" method to be more generic (thanks John Herrington for the tip).
- Added: Additional OPTIONAL parameter for _viPrintf and _viExecComand. Controls command send mode and terminator. Default value is "Use @LF terminator".
- Updated : _viPrintf and _ViExecCommand append an @LF to every VISA command by default. This can be changed by means of a new optional parameter.
- Updated : _viPrintf and _ViExecCommand do not "protect" for escape characters anymore by default. That causes problems with some GPIB cards. It is possible to go back to the original behaviour by setting the new optional parameter $s_mode to "str".

12th July, 2006 - v3.1.1.130 (beta)

- Added:       Check to ensure that FileInstall() can override the target file. (Thanks ..., fixed by JdeB)
- Added:       GUICtrlCreatePic doc precision when using overlayed tab control. (Thanks Holger)
- Fixed:        Extra .SVN directories created during installation. (Thanks Valik, Holger)
- Fixed:        FAQ#1 doc. (Thanks herewasplato, fixed by Valik)
- Reverted:   Conversion from floating point to string now shows less precision to prevent displaying unexpected values. (by Valik) The conversion will be back as in the official release.

11th July, 2006 - v3.1.1.129 (beta)

- Fixed:        Exit did not work in all situations where it should. (by Valik)
- Fixed:        StringSplit on binaryString when delimiter not found. (Thanks Zaxon, fixed by Larry)
- Fixed:        GUICtrlCreatePic Doc typo.
- Fixed:        COM/Obj Distinction between Null and 0 (Thanks randallc, fixed by SvenP)
- Updated:    v1.65 (6 July 2006)
- Added IE.au3 with all its well known Functions. Big Thanks to DaleHohm and Big_Daddy. (DaleHohm,Big_Daddy)
- Changed _InetSmtpMail(), change initial connection logic. (Neil)
- Fixed _TicksToTime() StringIsInt() problem. (JdeB)
- Fixed Bug in _GUICtrlListViewGetItemText on return if a subitem is empty. (gafrost)

28th June, 2006 - v3.1.1.128 (beta)

- Fixed:        GUISwitch crash after GUIDelete on another window. (Thanks Valik)
- Fixed:        Conversion from floating point to string now shows less precision to prevent displaying unexpected values. (by Valik)
- Fixed:        Random doc example. (Thanks Smoke_N)
- Fixed:        GUIRegisterMsg() - overlapping of same messages. (Thanks ..., fixed by Holger)
- Fixed:        ConsoleWrite(), ConsoleWriteError() - @LF was expanded to @CRLF automatically which could result in badly formatted data. Now no automatic expansion is performed; what is passed to these two functions is written. (by Valik)
- Added:      /nopack command line parameter added to Aut2Exe. This disables UPX packing from the command line. (by Valik)
- Fixed:        Crash AutoiT if Win... with bad regExp.
- Updated:    v1.64 (27 June 2006)
- Updated _GUICtrlListViewGetItemText: removed $v_ret variable to avoid au3check errors. (gafrost)
- Updated _GUIListView: Some bugfixes and Helpfile correction. (gafrost)
- Updated _GUIListView: Found a way I can live with the -1 being in the _GUICtrlListViewGetItemText
and _GUICtrlListViewGetItemTextArray for using selected index in the function calls. (gafrost)

20th June, 2006 - v3.1.1.127 (beta)

- Fixed:        bad Combo bkcolor : grey. (Thanks awrog)
- Added:      ClipGet return @error=1 on empty and @error=2 on nontext. (Thanks Christain BlackBurn)
- Added:      ClipPut("") empty the clipboard.
- Fixed:        WinKill() referencing an explorer.exe window not closing. (Thanks marfdaman)
- Updated:    Upx.exe 2.00 -> 2.01.
- Added:       FileGetLongName($relativefile, 1) and FileGetShortName($relativefile, 1) support relative path conventions.
- Fixed:        Small precision in FileFindFirstFile doc about matching 3-char extension. (Thanks tutui)
- Fixed:        AutoIt Crash if too many includes in Opt(TrayIconDebug,1). (Thanks System Tester, herewasplato)
- Added:       GUI_MAXCOLOURS added to AutoIt limits appendix.
- Fixed:        GUISetOnEvent, GuiCtrlSetOnEvent, TrayItemSetOnEvent and TraySetOnEvent can be disabled. (Thanks Wooltown)
- Fixed:        Wrong matching of While/Wend, Do/Until, If/Endif, ... .
- Fixed:        ObjEvent() doc example.
- Fixed:        ObjEvent() regression from .125. (Thanks Valik)
- Updated:    ClipGet() doc remarks on multiselection. (Thanks Simucal)
- Fixed:        #include doc about lower case only removed. (Thanks ...)
- Fixed:        BitShift() doc. (by Valik)
- Fixed:        Remove MessageBox in Aut2exe.exe (Thanks helge, fixed by Jon)
- Updated:    v1.63 (19 June 2006)
- Updated _DateTimeFormat() to use a default template when registry entries are missing
Like in Win9x/WinME for SLongDate.
- GuiListView updated .This update will possible break scripts. (gafrost)
Replaced ControlListView calls (will no longer need window title/text in params).
Functions updated to reflect new params.
Examples updated for consistancy.
Templates updated as needed.
- _ArrayBinarySearch: (JdeB)
removed check for more than 1 entry to allow the use of this UDF on arrays with one entry.

04th June, 2006 - v3.1.1.126 (beta)

- Fixed:        Slight update on language variable doc precision. (Thanks jftuga)
- Added:       Send("ASC 0x...}") to allow hex value. (Thanks Christian Blackburn)
- Fixed:        The Clear() method on a COM Error object would cause the COM Errorhandler to stop functioning.
- Fixed:        Bogus error messages on long lines when a COM Error handler is used (Thanks DaleHohm)
- Fixed:        A lot of typo and grammar in Doc. (Thanks GeoSoft)
- Fixed:        IniReadSection Invalid lines (Those without proper key=value pairs) would cause the returned data to be wrong. These lines are now stripped. (by Valik)
- Fixed:        IniReadSection comments were not stripped on Windows 95/98/ME.  (by Valik)
- Fixed:        Wrong PID type return by ProcessList. (Thanks elgabionline)
- Added:       Some information in GUIGetMsg about control hovering. (Thanks TheSaint)
- Added:        List Box can be colored with GUICtrlSetColor and GUICtrlSetBkColor. (Thanks Rick, by Holger)
- Added:        SplashTextOn return the handle of the splash window. (Thanks Helge, by Larry)
- Fixed:        TRayItemGetState memory leak. (Thanks Freeze128)
- Fixed:        FileWrite of a binarystring return false. (Thanks picasso)
- Fixed:        @AutoItVersion bad return when compiled file is resource hacked. (Thanks gamerman2360)
- Updated:    v1.62 (2 June 2006)
- Fixed _ClipPutFile() example include statement. (RazerM)
- Doc Fixes:
_GUICtrlListViewEnsureVisible. (gafrost)
_FileReadToArray. (CyberSlug)
- Fixed _Now() which was returning "tt" at the end (JdeB)

26th May, 2006 - v3.1.1.125 (beta)

- Fixed:        WinMove not handling Default keyword for W or H. (Thanks Cyberslug)
- Changed:    no more compaction of AutoIt3.exe, Au3Info.exe, AUT2Exe.exe and AutoIt3Help.exe files. Compiled script can still be compacted. (by Jon)
- Fixed:        Some doc precision about FileDelete and DirMove. (Thanks Zedna)
- Fixed:        RegRead, RegWrite and RegDelete coherent @error with other Reg functions.
- Fixed:        Crash AutoIt with invalid "With" . (Thanks gamerman2360)
- Fixed:        AutoIt limits doc typo. (Thanks Omegis)
- Removed: Exitcode 0x7ffff000-0x7fffffff are reserved for AutoIt. Exit of such code will produce a messagebox. (by Devs)
- Removed: ToolTip Centering go around. (by Valik)
- Fixed:        The documentation for ToolTip() clarifies how the center flag works and the requirements for getting an icon to display on the title row. (by Valik)
- Fixed:        GuiCtrlSetColor(), GUICtrlSetBkColor() doc can set ListViewItem and TreeViewItem. (Holger forget to update them in .72)
- Fixed:        some doc typos (Thanks Zedna, Helge, jftuga)
- Fixed:        bad formated #include. (Thanks Helge)
- Fixed:        TCPLIsten, TCPConnect, UDPSend, UDPBind not checking bad ipaddr or port. (Thanks Helge)
- Fixed:        Invalid lines (Those without proper key=value pairs) would cause the returned data to be wrong. These lines are now stripped. (by Valik)
- Fixed:        Comments were not stripped on Windows 95/98/ME. (by Valik)
- Fixed:        Memory leak on GUIDelete if some pic control where used. (Thanks b8bboi)
- Updated:    v1.61 (23 May 2006)
- Fixed _GuiCtrlListViewSort() avoiding insert/removal of spaces. (gafrost)
- Changed test in _DateIsValid() test from <1900 to <1000 to allow
a startdate of 1600 used for UTC calculations. (JdeB)
- Fixed _GUICtrlListViewSort. (JPM,gafrost)
- Added _ClipPutFile() to misc.au3. (Piccaso)
- Updated _GUICtrlListViewSetItemSelState, added an optional focus state parameter. (gafrost)

16th May, 2006 - v3.1.1.124 (beta)

- Fixed:        Memory leak on object invoking error.
- Fixed:        StringRegExp returning string instead of array  withy flag=1.
- Fixed:        AutoItSc.bin size. (Thanks Zedna)
- Fixed:        GUICtrlSetImage for 16x16 icon not repainting. (Thanks mr.underperson)
- Added:       Some doc precision about running under a Windows 64-bit Edition. (Thanks FreeFry)
- Changed:    Exitcode 0x7ffff000-0x7fffffff are reserved for AutoIt. Exit of such code will produce a messagebox.
- Changed:    RegEnumKey and RegEnumVal return more precise @error to help diagnostic.
- Fixed:        Mouse... invalid button definition. (Thanks vollyman)
- Fixed:        Small precision in FileFindFirstFile doc about returning dir names too. (Thanks redndahead)
- Fixed:        Hyperlink in CLSID doc page. (Thanks Nitro322)
- Fixed:        IniDelete() could create an empty file if the file did not exist. (Thanks TheSaint, fixed by Valik)
- Fixed:        ToolTip Centering go around. (Thanks mr.underperson)
- Fixed:        $GUI_GR_RECT and $GUI_GR_ELLIPSE under win98. (Thanks Zedna)

06th May, 2006 - v3.1.1.123 (beta)

- Changed:    Empty parameter not allowed in COM reference.
- Fixed:        GUIGetCursorInfo on listview header. (Thanks aec)
- Fixed:        Func OnAutoItExit doc typo.
- Fixed:        DllCall @error not equal 3 when function not found.
- Fixed:        exitcode 0 when AutoIt exit on fatal error should be different from 0.
- Fixed:        ubyte can be used as Array. (Thanks Lazycat)
- Fixed:        TrayCreateItem doc precision. (Thanks Zedna)

01th May, 2006 - v3.1.1.122 (beta)

- Fixed:        DirCreate not creating subdir on dir with read/hidden/system attributes. (Thanks dash007, PeteW)
- Changed:    "GUIEventCompatibilityMode" Opt removed definetly use "GUIEventOptions".
- Fixed:        FileSetAttrib, FileSetTime destroy @workingdir.
- Fixed:        Some doc typos in the "Function Notes" page. (fixed by Herewasplato)
- Updated:    Suppression of a validation of interface checking. (by SvenP)

28th April, 2006 - v3.1.1.121 (beta)

- Fixed:        Some doc clarification in the "Function Notes" page. (fixed by Herewasplato)
- Changed:    doubleclick on titlebar trigger maximize/restore event. (Thanks livewire/Valik)
- Fixed:        Filecopy not creating subdir under Netware shared. (Thanks PeteW)
- Changed:    Upx 1.25->2.00
- Updated:    v1.60 (28 April 2006)
- Updated _GuiCtrlStatusBarResize example. (gafrost)
- Added 2 variables to GuiStatusBar.au3. (gafrost)
- Fixed typo in _ArraySort. (Knight)

21th April, 2006 - v3.1.1.120 (beta)

- Fixed:        FileSetAttrib doc example. (Thanks  Mhz)
- Fixed:        WinGetProcess and ProcessExist return same pid precision. (Thanks elgabionline, fixed by Valik)
- Fixed:        GUICreate WS_POPUP Centering. (Thanks elgabionline)
- Fixed:        Bad Notification on end of drag when $GUI_DROPACCEPTED not set on a control. (Thanks Ebenezer, gafrost)
- Fixed:        InetGet("abort") and exiting AutoIt with a download in progres now correctly stop the download immediately. (by Valik)
- Fixed:        @InetGetBytesRead Byte count could be wrong due to a race condition. (Thanks Rick, fixed by Valik)
- Updated:    v1.59 (20 April 2006)
- Updated _ProcessGetPriority to use 0x0400. (Valik)
- Added _GUICtrlEditSetRECT to GuiEdit.au3. (gafrost)
- Updated Email addresses in UDF's to avoid retrieval by search engines. (JPM)

14th April, 2006 - v3.1.1.119 (beta)

- Updated:    FAQ page. (by JdeB)
- Fixed:        open script in Gui concept page. (Thanks MadBoy)
- Fixed:        FileSetAttrib return 1 on non existing file. (Thanks Mhz)
- Fixed:        InetGet() could block the foreground execution even when run in background mode. (Thanks podws, fixed by Valik)
- Fixed:        GUISetBKColor freezing the display. (Thanks The Kandie Man,greenmachine)
- Updated:    Allow array to be initialized with another array in an element (see Dim doc). (by Nutster)
- Fixed:        FileOpen doc. (Thanks Zedna)

06th April, 2006 - v3.1.1.118 (beta)

- Changed:    Example and Include files are readonly. (Thanks herewasplato, by JdeB)
- Updated:    GUICtrlCreateRadio doc example. (by Smoke_N)
- Added:       An extra parameter in ControlSetText to force redraw. (Thanks ning, by Valik)
- Changed:    Opt("GUIEventCompatibilityMode", ) renamed in Opt("GUIEventOptions. both OK for this beta but will dropped in .122. (by Jon)
- Fixed:        empty parameter in $cmdline. (Thanks aec)
- Updated:    v1.58 (6 April 2006)
- updated _ProcessGetPriority() to accept either a name or PID argument. (valik)
- Fixed bug in _FileWriteLine() insert mode not inserting new line. (sasdad)

31th March, 2006 - v3.1.1.117 (beta)

- Added:       Value to TrayMenuMode (Option) to turn off auto radio menuitem checking (Thanks greenmachine, by holger)
- Fixed:        GUICtrlSetState $GUI_SHOW on tab with $TCS_BUTTON style. (Thanks DaLiMan, fixed by holger)
- Fixed:        GUICtrlCreateMonthCal positioning. (Thanks CyberSlug)
- Fixed:        ProcessWait, ProcessWaitClose, TrayTip timeout unit doc precision. (Thanks Confuzzled)
- Fixed:        CmdLine[] limited to 63 parameters. (Thanks Everdream Corp, CyberSlug)
- Updated:    "Check for Updates" (AutoUpdateIt) display the current install beta.(by strik3r0475)
- Updated:    TCPSend/TCPRecv Doc Examples. (by Larry)
- Fixed:        Bad tabitem creation when no tab defined.
- Fixed:        Bad combo disable 16-bit color under W2K. (Thanks wooltown)

26th March, 2006 - v3.1.1.116 (beta)

- Added:        StringRegExp Tutorial (by neogia)
- Added:        DllCall :cdecl or :stdcall thanks Jon now JPM can debug SQLite scripts (by Jon)
- Updated:    v1.57 (19 March 2006)
- Updated : GUICtrlTreeView
* Changed _GUICtrlTreeViewExpand (Parent GUI handle no longer needed) (Holger)
* Renamed _GUICtrlTreeViewItemGetTree to _GUICtrlTreeViewGetTree !!! (Holger)
* Added _GUICtrlTreeViewGetState (Holger)
* Added _GUICtrlTreeViewGetText (Holger)
* Added _GUICtrlTreeViewInsertItem (Holger)
* Added _GUICtrlTreeViewSetIcon (Holger)
* Added _GUICtrlTreeViewSetState (Holger)
* Added _GUICtrlTreeViewSetText (Holger)

23th March, 2006 - v3.1.1.115 (beta)

- Fixed:        For Next with boundary,stepping being a string (no conversion to  Float). (Thanks Jon, fixed by Jon))
- Fixed:        AutoIt3.exe high density icon. (by Jon)
- Fixed:        GUICtrlRegisterListViewSort() and some issues while script pausing. (by holger)
- Changed:    GUICtrlRegisterListViewSort() parameters maximum are 4 - less are OK. (by holger)
- Fixed:        ControlSetText() (backchange to normal behaviour before beta 3.1.1.73) (by holger)
- Fixed:        GUISetState(@SW_UNLOCK) force repainting.
- Fixed:        Internal cleaning of Send/ControlSend(), SendKeyDownDelay =5 by default. (by Jon)

17th March, 2006 - v3.1.1.114 (beta)

- Fixed:        StdxxxYyy PID reuse. (Thanks reggy, fixed by DaveF)
- Fixed:        RegRead MULTI_REG_SZ malformed key. (Thanks SvenP)
- Fixed:        Not updating anymore the official include dir. Use RemoveIcludeBeta.bat in beta\include\3.1.1 if you want to clean the official include folder.
- Fixed:        RegWrite Doc clarification.
- Fixed:        examples referring GUICtrlCreateCombo  with wrong size for Win2K SP4. (Thanks wooltown)
- Changed:    the default setting on Au3info so that it doesn't highlight controls. (by Jon)
- Fixed:        Some doc cleaning about cursor/arrow. (Thanks greenmachine)
- Fixed:        StringLeft,StringRight doc typos. (Thanks Torment)
- Fixed:        For Next with boundary,stepping being a string (no conversion to integer). (Thanks neogia)
- Updated:    v1.56 (15 March 2006)
- Updated _GUICtrlListViewSort Helpfile example. (gafrost)
- Updated _GUICtrlCombo examples updated to proper height. (gafrost)
- Updated GUIComboau3. Added #include <GUIConstants.au3>. (andyswarbs)

10th March, 2006 - v3.1.1.113 (beta)

- Fixed:    Aut2exe, Exe2Aut in .ZIP

10th March, 2006 - v3.1.1.112 (beta)

- Fixed:        ObjEvent help example. (Thanks cdkid)
- Updated:    Aut2Exe, Exe2Aut new compression algorithm. (by Jon)
- Fixed:        FileFindFirst doc precision about wilcards. (Thanks HfX)
- Fixed:        DriveMapDel /DriveMapAdd interaction. (Thanks MadBoy)
- Fixed:        Doc optional parameter setting. (Thanks MvGulik)
- Fixed:        GUICtrlDelete Doc remarks. (Thanks datskat)

03th March, 2006 - v3.1.1.111 (beta)

- Fixed:        #include recursion depth enforced. (by Valik)
- Changed:   #include search algorithm updated to be more consistent. (by Valik)
- Added:       Documented #include search order. (by Valik)
- Updated:    Some doc precision about IsDeclared(), Assign(), Eval(). (by Valik)
- Fixed:        GuiCtrlCreatePic w=h=0. (Thanks MvGulik)
- Fixed:        @OSVERSION for WIN_XP running under X64 edition. I hope. (Thanks The Kandie Man)
- Fixed:        Hidden input control  previously associated with updown control badly displayed during reshowing. (Thanks WFC)
- Fixed:        comparison case insensitive accentuated upper case. (Thanks Guillermo)
- Fixed:        GUICreate $WS_CHILD+$WS_VISIBLE w=0 or h=0 lead to crash AutoIt. (Thanks Valik)
- Updated:    v1.54 (23 February 2006)
- Added _GuiCtrlEditFind to GUIEDIT.AU3: - Find/Replace text in an Edit control. (gafrost)
- Added _FileWriteToLine to FILE.AU3: Writes text to a specific line in a file. (cdkid)
- Updated:    v1.55 (2 March 2006)
- Updated INetSmtpMail(),allow the "EHLO" to be send. (JPM)
- Added Attribute to _GUICtrlComboAddDir, _GUICtrlListAddDir. (gafrost)
- Added _GUICtrlListViewSetColumnHeaderText() to GuiListView. (gafrost)

Due to new #include search algorithm some problems can occurs with AU3Check.

21th February, 2006 - v3.1.1.110 (beta)

- Fixed:        Hidden Updown control badly displayed during resizing. (Thanks WFC)
- Fixed:        Extras\Check for Update (Extras\AutoUpdateIt\AutoUpdateIt.au3).
- Fixed:        Labels were not painted correctly on tab controls. (Thanks Dickb,fixed by Valik)

17th February, 2006 - v3.1.1.109 (beta)

- Fixed:        GUICtrlSetData on listview/listviewItem bad erasing. (Thanks HighGuy)
- Fixed:        GUICtrlCreateInput help typo. (Thanks LondonNDIB)
- Fixed:        SplashTextOn centered vertically with embeded empty lines. (Thanks HighGuy)
- Fixed:        SplashTextOn Memory Leak. (Thanks smiley, fixed by Larry)
- Fixed:        GUICtrlRead menuitem checked. (Thanks GEOSoft, fixed by holger)
- Updated:    v1.53 (16 February 2006)
- Fixed _GuiCtrlListViewDeleteItem: Listview items can't be deleted after sorting. (gafrost)

14th February, 2006 - v3.1.1.108 (beta)

- Updated:    v1.52 (8 February 2006)
- Fixed typo in _ArraySearch Helpfile. (theguy0000)
- Fixed _GuiCtrlListViewDeleteItem: Listview items can't be deleted after sorting. (gafrost)
- Fixed _ArraySort Local $t decleration. (gafrost)
- Fixed _GUICtrlComboAutoComplete() move Variable definitions to the stat of the function. (gafrost)
- Fixed _GuiCtrlStatusBarCreate : corrected variable declarations in the function. (gafrost)
- Added:       Setting error and extended in InetGet for debugging. purpose. Will be documented is suitable or removed in a following beta. Just post script,error and extended you will get the explanation if any.
- Fixed:        Graphic controls should always have a transparent background.

04th February, 2006 - v3.1.1.107 (beta)

- Fixed:        PixelCheckSum Doc related link. (Thanks herewasplato)
- Fixed:        Under certain conditions, GUICtrlSetPos() could cause a label to appear as if it had been painted multiple times. (Fixed by Valik)
- Changed:    GUICtrlSetBkColor(). (by Valik)
- Updated:    v1.51 (3 February 2006)
- Changed _InetGetSource to return "" when error occurs. (erebus)
- Changed Dim to Local in GuiStatusBar.au3. (Jdeb)
- Change _GuiCtrlStatusBarSetIcon that will allow removing the icon from normal status bar. (gafrost)
- Added version at the top of each UDF file.

30th January, 2006 - v3.1.1.106 (beta)

- Fixed:        Some hangups and undefined closes by using GUIRegisterMsg(). (Fixed by holger)
- Changed:   No more proceeding of Autoit's internal message procedures by default, see GUIRegisterMsg() for more infos. (by holger)
- Changed:   GUI's internal system timer, so only userdefined Timers can be 'monitored'; fixes also interacting problem between WM_TIMER-monitoring and TrayIcon-handling. (by holger)
- Changed:   GUIRegisterMsg() paramters maximum are 4 - less are OK. (by holger)

28th January, 2006 - v3.1.1.105 (beta)

- Fixed:        Event functions without a method name were not called. (Thanks Valik, fixed by SvenP)
- Fixed:        Event function with too many declared parameters could crash script. (Fixed by SvenP)
- Added:      Event Object .Stop() method to stop receiving events (see help). (by SvenP)
- Fixed:       Typos and grammatical issues in the COM documentation (Thanks Gene, fixed by SvenP).
- Updated:   Different example script in COM documentation about handling Events. (by SvenP)
- Fixed:       GUICtrlCreateObj: Keystrokes were not passed to controls that has embedded controls (Thanks Svennie, fixed by SvenP)

25th January, 2006 - v3.1.1.104 (beta)

- Fixed:        Some keystrokes are not accepted by ActiveX controls (thanx SlimShady, Svenny, fixed by SvenP)
- Added:       More Object information can now be retrieved with ObjName (see helpfile). (by SvenP)
- Fixed:        ACos() bad result. (Thanks shlan)
- Fixed:        Doc typo. (Thanks Helge)

20th January, 2006 - v3.1.1.103 (beta)

- Fixed:        Call with parameters doc. (Fixed by Valik)
- Fixed:        DllStructGetPtr($struct,$i) wrong ptr returned. (Thanks VicTT)
- Fixed:        DllCall doc for ordinals. (Fixed by holger)
- Fixed:        GUICtrlRegisterListViewSort doc typo. (Fixed by holger)
- Fixed:        "Windows Message Codes" in appendix doc tree. (Fixed by holger)
- Updated:    v1.50 (19 January 2006)
- Added _GUIStatusBar.au3 UDF's. (gafrost, rysiora, JdeB, tonedef, eltorro)
- Added _GUICtrlComboGetList to GUICombo.au3 which retrieves all items in a combobox (Valik)
- Fixed _INetSmtpMail() parameter variable name. (Thanks Wooltown/ by JPM)
- Added:       A specially formatted array can be passed to Call() and each argument in they  array will be treated as an argument to the function. See help-file for demonstration. (by Valik)
* Reverted fix in GUICtrlCreateObj to prevent crash with certain controls.
(Open bug: http://www.autoitscript.com/forum/index.php?showtopic=20530) (Thanks Randallc, fixed by SvenP)

18th January, 2006 - v3.1.1.102 (beta)

- Fixed:        @COM_EventObj doc typo. (Fixed by Valik)
- Fixed:        _INetSmtpMail() error doc. (Thanks walkabout)
- Fixed:        GUICtrlSetState(tabitem,@SW_SHOW) under creation bad tabitem display. (Thanks Helge)
- Fixed:         Additional error number in DllCall() if "function" can not be found in the DLL. + doc. (Fixed by Holger)
- Fixed:        _INetSmtpMail() again and I hope last. (Thanks Wooltown)
- Fixed:        Some docs. (Thanks Helge)
- Updated:    v1.49 (17 January 2006)
- Fixed bug in _ArrayPush() when Direction 1 is specified. (AnnA)
- Helpfile _ArraySearch example corrected. (Valuater)
- Removed obsolete parameters from _GUICtrlTreeViewSelectItem(), Scripts need updating! (JdeB)
- Fixed : _INetSmtpMail() (by JPM). (Thanks Wooltown, MikeOsdx)
- Updated all UDFs to get rid of any Errors from Au3Check v 1.50 will All checks enabled.
- Updated _ArrayDisplay() added Const to Byref of the first parameter. (Valik)
- Fixed bug in _PathFull when using root of a drive. (Valik)
- Fixed:        A for..in loop could fail undeserved on certain type of collections. (Fixed by SvenP)
- Fixed:        Controls created by GUICtrlCreateObj have now default window style WS_VISIBLE, so they can be seen on tabs. (Fixed by SvenP)
- Fixed:        Permanent fix of old bug 2005-10-18, related to deletion of a RichText control. (Fixed by SvenP)
- Added:       GUICtrlCreateObj now supports multiple GUIs. (by SvenP)
- Fixed:        Memory leak when GUICtrlCreateObj failed in some situations. (Fixed by SvenP)
- Fixed:        $DLG_TEXTVCENTER added to Constants.au3. (Thanks griaco)
- Fixed:        SetError(), SetExtended() can return a value. (Fixed by Valik)
- Added:      GUIRegisterMsg() to modify GUI WM_Message-routines at runtime. (by holger)
- Added:      GUICtrlListViewSortRegister() to create a real sorting routine for GUI ListView's. (by holger)
- Added:      TrayItemGetHandle() to get the internal handle of tray menu items. (by holger)
* Fixed ;        TraySetClick doc. (Thanks PartyPooper)
- Fixed:        cmdline /ErrorStdOut with /AutoIt3ExecuteLine. (Fixed by Valik)
- Added:       Call with parameters (Doc missing but just add parameters as needed). (by Valik)

10th January, 2006 - v3.1.1.101 (beta)

- Fixed:        _INetSmtpMail(). (Thanks JdeB, fixed by JdeB)
- Added:       @COM_EVENTOBJ. (by Valik)
- Fixed:        AutoIt crash when using embedded OBJ on 2 child GUI. (Thanks Valuater)
- Added:       DLLCall with ordinal entry point (waiting Doc). (by Holger)
- Fixed:        Support for the COM Currency (VT_CY) datatype. (Thanks dougie, fixed by SvenP)

07th January, 2006 - v3.1.1.100 (beta)

- Fixed:        SplashTexton Doc for opt=32. (Thanks griaco)
- Fixed:        ElseIf ... Then statement not detected. (Thanks VicTT)
- Fixed:        TCPRecv Doc. (Thanks pingpong24, fixed by Larry)
- Fixed:        Crash when using @IPADDRESSn and no network.
- Fixed:        Illegal #include with no error message. (Thanks VicTT)
- Updated:    v1.48 (7 January 2006)
- Fixed : _PathFull() 2 bugs. (by Valik)
- Fixed : _INetSmtpMail() @error 5 (by JPM). (Thanks Wooltown, MikeOsdx)
- Fixed : _StringEncrypt error return. (Thanks JerryD)
- Removed:  /c command line, only /AutoIt3ExecuteLine  working.

30th December, 2005 - v3.1.1.99 (beta)

- Added:      SplashTextOn opt=32 to center vertically.
- Fixed:       RegRead return right number of fields on REG_MULTI_SZ type. (Thanks davezub)
- Fixed:       DLLStructSetData element overflow. (Fixed by Larry)
- Added:      DLLStruct...Data BinaryString support. (by Larry)
- Fixed:       GUICtrlSetImage on a GUI defined with $WS_VISIBLE. (Thanks Matrix112)
- Fixed:       Fatal error $Object.ImageList.Images.Add($Array[0] & 'b'). (Thanks Arilvv)
- Fixed:       GuiCtrlSetState( ,$GUI_FOCUS) changing tab ordering. Need to create a new state $GUI_ONTOP for solving livewire problem (.93). (Thanks nick1812)
- Fixed:       Extra notification on first/default control after GUISetState(). (Thanks Larry)
- Fixed:       Allow Dragfile to any control. @GUI_DRAGFILE contain the filename to be used in the $GUI_EVENT_DROPPED. (Thanks wiredbits)
- Fixed:       COM ref warning about doc examples. (Thanks mr_unreliable, fixed by SvenP)
- Fixed:       FileRead($handle). (Thanks Vilux)
- Fixed:       Event notification on {enter} on an edit control. (Thanks effer)
- Updated:   UDF v1.47 (30 December 2005)
- Fixed _DateTimeFormat() to return LongTime notation for $sType=0 as specified in the Helpfile. (JdeB)
- Made Subject and Body optional in _InetSmtpMail(). (PartyPooper)

BUMP you have to change script which spawn other with the /c switch. Until beta 3.1.1.99 you will get a popup telling that the /c will soon be removed for ever.  Will be removed in 3.1.1.100.

23th December, 2005 - v3.1.1.98 (beta)

- Fixed:        HotKeySet("",... return 0 + doc typo. (Thanks Saunders, Helge)
- Fixed:        GuiCtrlSetState( ,$GUI_FOCUS) on button repainting. (Thanks erebus)
- Fixed:        _InetGetSource(). (Thanks erebus/ fixed by wOuter)
- Fixed:        ExpandVarStrings $$, ExpandEnvStrings %%. (Thanks LxP)
- Fixed:        GuiSetCursor(16),GuiCtrlSetCursor(16) hide the cursor.
- Fixed:        FileInstall in a compiled GUI whose name is not .exe or .a3x.
- Fixed:        $GUI_EVENT_MOUSE firing without any mouse movement.
- Fixed:        Typo in ASCII appendix. (Thanks beerman)
- Fixed:        WinWaitClose return doc. (Thanks ManuLeVrai)
- Updated:    UDF v1.46 (21 December 2005)
- Fixed doc for _FileReadToArray(). (LxP)
- Fixed doc and Example for _ArraySearch. (Knight)
- Fixed _ArraySearch return value in case not found to -1. (SolidSnake)
- Added _InetSmtpMail to Inet.au3. (Walkabout)

15th December, 2005 - v3.1.1.97 (beta)

- Fixed:        PixelSearch for 25% regression. (Fixed by Larry)
- Fixed:        $GUI_EVENT_DROPPED @GUI_DRAGID,@GUI_DROPID.

14th December, 2005 - v3.1.1.96 (beta)

- Fixed:        #include-once in main script. (Thanks randallc)
- Fixed:        Drag&Drop of listviewitem onto another listview. $GUI_ACCEPTFILES has been renamed in $GUI_DROPACCEPTED.
- Fixed:        PixelSearch performance. (Fixed by Larry)
- Fixed:        Send doc about minimum key repetition= 1. (Thanks LxP)

12th December, 2005 - v3.1.1.95 (beta)

- Fixed:        InetGet regression from .94. (Thanks Neil)

11th December, 2005 - v3.1.1.94 (beta)

- Fixed:        FileRead in raw mode on error skip read block. (Thanks VicTT)
- Updated:    onAutoItStart and onAutoItExit in the help index. (Thanks Zedna)
- Fixed:        INetGetSize, INetGet @error return. (Thanks PartyPooper)
- Fixed:        Docs typo. (Thanks PartyPooper, Helge)
- Fixed:        DLLStruct... return 1 on bad array passed. (Thanks kenn)
- Fixed:        GUICtrlSetPos with a Child window. (Thanks Saunders)
- Updated:    Windows Titles and Texts (Advanced) for "regexp=".
* Cleaned :    Old handle= in title definition. This parameter was not in the doc anymore since official release 3.1.1.
- Fixed:        Run("a.tmp") a.tmp being a compiled script. (Thanks Neil)
- Fixed:        TabStop order. (Thanks napgravy)
- Fixed:        StringSplit("a : b + "," : "). (Thanks g5mike)

Update your old script 3.1.0 for handle=. In a lot case the "handle=" & $gui was not working since 3.1.1.66 due to HWnd type.

07th December, 2005 - v3.1.1.93 (beta)

- Updated:   Include beta files are also stored in separate folders to anticipate no destruction of released includes as today.
- Added:      GUICtrlGetHandle(). (by Holger)
- Fixed:        DLLStruct... return 1 on error.
- Removed:  DLLStructDelete($Struct) use $Struct=0 even nothing if it is local.
- Updated:    Fatal error message if DLLCall cannot be executed.
- Fixed:        FileRead in raw mode return error. (Thanks VicTT)
- Updated:    DLLStructCreate can contain space. (Thanks LxP)
- Fixed:        FileRead no count non empty file. (Thanks AutoIt Smith)
- Fixed:        Background label bad firing when overlayed by an edit control. (Thanks livewire)
- Fixed:        FileOpen() doc typo. (Thanks Zedna)
- Fixed:        TraySetToolTip can be up to 128 with 2000/XP/2003. (Fixed by Holger)
- Fixed:        GUI updown control notification if change with keyboard. (Thanks Lemmens Peter)
- Updated:    Window title doc precision (not perfect). (Thanks MikeOsdx)

You have to update your script using DLLStructDelete.

02th December, 2005 - v3.1.1.92 (beta)

- Fixed:        AutoIt hard crash with /AutoItExecuteScript with no file. (Thanks LxP)
- Fixed:        TCPListen not registering. (Thanks Flyingboz, Fixed by Larry/Holger)
- Updated:    Some precision in Hello tutorial. (Thanks LxP)
- Updated:    UDF v1.45 (2 December 2005)
- Fixed _PathSplit(). Changed Dim $array[5] to Local $array[5]. (LxP)
- Updated _InetGetSource(), Remove stripping last character in return string. (w0uter)
- Fixed return value in _GUICtrlTreeViewDeleteItem when item id passed in. (gafrost)
- Updated GUI UDFs: Update Includes and Templates for use with external controls
Meaning controlID for autoit control, control hWnd for external control
Also replace all Dim statements with Local. (gafrost)

27th November, 2005 - v3.1.1.91 (beta)

- Changed:    /c command line switch change to /AutoIt3ExecuteLine to allow /c to be use by the scripter in compiled scripts. (Thanks ..., Valik, SlimShady)
- Updated:    /AutoIt3ExecuteScript scriptfilename allow compiled script to execute script already install or just install by fileinstall. (Thanks Valik, SlimShady)
- Fixed:        FileRead returning @error=-1 on empty file. (Thanks AutoIt Smith)

YOU have to change script which spawn other with the /c switch. for beta 3.1.1.99 you will get a popup telling that the /c will soon be removed for ever.

25th November, 2005 - v3.1.1.90 (beta)

- Fixed:        GUICreate with WS_VISIBLE do an implicit GUISetState(). (Thanks kjactive)
- Fixed:        ObjEvent error when function does not exist. (Thanks kjactive)
- Added:       FileCreateNTFSLink(). (by jpm)
- Updated:    FileRead() count optional to read the entire file. (by LxP)
- Updated:    Some doc clarification about command line switches. (Thanks MSLx Fanboy)
- Fixed:        RunWait related link in doc. (Thanks w0uter)
- Fixed:        Crash Autoit Ending after not closing file open in raw mode. (Thanks VicTT)
- Fixed:        StdoutRead with null StdIn, Stdout, Stderr applications. (Thanks PaulGX, fixed by DaveF)
- Updated:    Some doc precision in For...Next and For...In...Next. (by JdeB)
- Updated:    UDF v1.44 (25 November 2005)
- Fixed _ReplaceStringInFile to avoid adding CRLF when missing at the EOF. (JdeB)
- Added _ProcessGetName to Process.au3. (Erifash)

21th November, 2005 - v3.1.1.89 (beta)

- Fixed:        Compilation of include with #cs. (Thanks AutoIT Smith,gafrost)

19th November, 2005 - v3.1.1.88 (beta)

- Fixed:        Refreshing of dispayed tabitem after a tabitem delete.
- Fixed:        StringSplit($a," - ",1) string delimiter. (Thanks MHz)
- Updated:    Some checking in uninstaller waiting JON not agressive Uninstaller. Non AutoIt include are preserved.
- Fixed:        Some doc typos. (Thanks PartyPooper,Helge)
- Fixed:        Return code from delayed function as WinWait destroyed by Adlib execution. (Thanks BrianH, Valik)
- Fixed:        MouseGetCursor doc example. (Thanks PartyPooper)
- Fixed:        Invalid line continuation not detected. (Thanks MHz)
- Fixed:        FileInstall on same dir. (Thanks TiMa)
- Fixed:        GuiCtrlRead on ListViewItem doc precision. (Thanks SumTimWong,tonedeaf)
- Fixed:        Func definition with Byref and default value. (Thanks Fur)
- Fixed:        missing #ce in #include. Still Aut2Exe to be corrected too. (Thanks Fur)
- Updated:    UDF v1.43 (18 November 2005)
- Fixed _DateAdd() Typo's in helpfile. (Gene)
- Updated _INetMail() with new logic to support environment variables. (JPM)
- Updated _GUICtrlListViewDeleteItemsSelected() with Test for Array. (CatchFish)
- Added a Constant to GUIList.au3 and changed all examples. (gafrost)

07th November, 2005 - v3.1.1.87 (beta)

- Fixed:        @DesktopHeight/Width doc typo. (Thanks PartyPooper)
- Added:       VC8 compilation support. (by Valik)
- Fixed:        Float to Integer precision. (Thanks kalavo, fixed by Valik)
- Fixed:        Bad FatalError after Exit in UDF. Only the first FatalError will be displayed if any before Exit (Thanks LxP)
- Updated:    Internal change in Handle value.
- Fixed:        Integer to string conversion. (Thanks LxP)
- Fixed:        Crash if ObjEvent refer to a function having byRef parameter. (Thanks wisheu,DaleHolm)
- Fixed:        GuiCtrlSetData can delete a specific column. (Thanks Valuater,gafrost)
- Fixed:        memory leak on GuiDelete($tabitem with icon). (Fixed by Holger, jpm)
- Fixed:        StringMid($a,3). (Thanks LOULOU)
- Fixed:        StringSplit($a,""). (Thanks Valik)

03th November, 2005 - v3.1.1.86 (beta)

- Fixed:        String... on nonstring parameters. (Thanks Valik)
- Changed:    FileClose,File... suppression of AutoIt runtime error. (Valik suggestion)

03th November, 2005 - v3.1.1.85 (beta)

- Updated:    GuiCtrlCreateGraphic default size. (Thanks Sunblood, gafrost)
- Updated:    AutoIt3Help.exe (no KeyHH.exe need)
- Fixed:        ObjEvent() doc typo. (Thanks JdeB)
- Updated:    Several tabular display in Doc.
- Removed:   Binary(), IsBinary() to BinaryString(), IsBinaryString(). (Thanks Larry)
- Updated:    String... support BinaryString variables.
- Updated:    @OSVersion = WIN_6.0(Vista?), WIN_6.1(LongHorn?). (Thanks CyberSlug)
- Fixed:        Crash on Exit Autoit after using GUICtrlCreateObj and GuiCtrlDelete on another control. (Thanks kjactive)
- Fixed:        Console... doc related links. (Thanks Zedna)
- Fixed:        Empty command line parameter (""). (Fixed by Tylo, jpm)
- Updated:    ControlSend Doc to make clearer ref to control/window. (Thanks DaleHolm)
- Fixed:        @ScriptLineNumber not significant in compiled script. (Thanks /dev/null ,Fixed by Valik)
- Fixed:        FileCopy when creating subdir. (Thanks gcriaco)
- Fixed:        ControlClick doc precision. (Thanks Amen)
- Fixed:        Language->comments example. (Thanks Yves1Fix)
- Fixed:        IniReadSection doc. (Thanks PaulGX, fixed by Valik)
- Fixed:        bad var definition. (Thanks w0uter)
- Fixed:        Crash after GUICtrldelete of a control having the focus. (Thanks suthers, LxP)
- Updated:    UDF v1.42 (2 November 2005)
- Updated _ArrayToString documentation, changed parameter order. (Josbe)
- Updated _FileList2Array: removed checking for "." and ".." from the return from FileFindNextFile(). (SolidSnake)
- Added _SetDate and _SetTime to Date.au3. (/dev/null)
- Added _StringInsert to String.au3. (Celeri)
- Fixed bug in the _GUICtrlListViewDeleteItem. (gafrost)

18th October, 2005 - v3.1.1.84 (beta)

- Updated:    GUICtrlCreatePic("",... create an empty pic no more returning error. (Thank Larry, ...)
- Fixed:        Default keyword = -1 in arithmetic computation.
- Fixed:        False and False = False. (Thanks Valik,Fixed by Jon)
- Fixed:        Grey coloring of input/edit control when disabled. (Thanks Neil)
- Updated:    Binary doc example.
- Fixed:        Crash on AutoIt exit when GUiCtrlCreateObj used with some .OCX. Temporary go around waiting SvenP correction.
- Updated:    GUICtrlCreateEdit doc to include an example to how to have a richedit control using GUICtrlCreateObj. (Fixed by kjactive)
- Fixed:        FileClose,FileFindNextFile, FileRead, FileReadLine, FileWrite, FileWriteLine, PluginClose, DllClose return 0 on bad handle. (Thanks WoolTown)
- Fixed:        Bad index when opening help thru Scite editor. (Thanks Valik,Fixed by Cyberslug)

11th October, 2005 - v3.1.1.83 (beta)

- Removed:   MsgBox, SplashTextOn and TrayTip text convert binary string to hex for display. (Valik disagree)
- Updated:    UDF v1.41 (10 October 2005)
- Fixed BUG in _ReplaceStringInFile() always replacing multiple occurences on a single line. (Wooltown/LxP)
- Added _GUICtrlListSelectIndex to GuiList.au3 for single select listbox's. (gafrost)

10th October, 2005 - v3.1.1.82 (beta)

- Fixed:        FileCopy, FileInstall, DirCopy, FileMove replacing the same file. (Thanks PaulGX)
- Fixed:        DllStructCreate no more case sensitive but still space sensitive. (Thanks LxP)
- Fixed:        AutoIt Crash when creating a control on a minimized window. (Thanks Monter)
- Added:       MsgBox, SplashTextOn and TrayTip text convert binary string to hex for display.
- Fixed:        TCPSend, UDPSend really send Binary strings (I hope). (Sorry VicTT)
- Fixed:        GUICtrlSetImage icon. (Thanks Valuater)
- Updated:    UDF v1.41- (10 October 2005)
- Added _GUICtrlListSelectIndex to GUIList.au3. (gafrost)

07th October, 2005 - v3.1.1.81 (beta)

- Fixed:        Some doc typos. (Thanks VicTT,...)
- Fixed:        Reg... functions on IA64/X64.
- Fixed:        FileFindFirstFile() leak handles. (Thanks ChrisL, fixed by JdeB)
- Fixed:        @IpAddress when not network installed. (Thanks Coder demon)
- Added:       TCPSend, UDPSend can send Binary strings.
- Updated:    UDF v1.40 (5 October 2005)
- Fixed error in _ArrayToString example. (/dev/null)
- Changed _WeekNumberISO() to return the proper ISO weeknr.
Also removed startday parameter because ISO weeks always starts on Monday.
- Added _DateToDayOfWeekISO which returns the ISO day number. 0=Monday - 6= Sunday
- Updated:    UDF v1.39 (27 September 2005)
- Updated _InetGetSource. (w0uter)
- Fixed:        AutoIt crash on GuiCtrlCreateObj with bad object.
- Fixed:        ObjEvent returns "" on error.
- Fixed:        _GUICtrlListViewDeleteAllItems (Fixed by gafrost)
* Restriction : ControlListview cannot reference a 64-bit process as Explorer.

29th September, 2005 - v3.1.1.80 (beta)

- Fixed:        Bad autoit-v3.1.1.79-beta-Setup.exe due to MS spyware which destroy the NSIS. (Thanks Microsoft)

28th September, 2005 - v3.1.1.79 (beta)

- Fixed:        Reference to AutoIt functions in UDF doc.
- Fixed:        UDPRecv regression. (Thanks livewire)
- Fixed:        Tabitem icons. (Thanks Ghastly_MIB/Holger)
- Fixed:        Listview sorting with using styles: $LVS_SORTASCENDING and $LVS_SORTDESCENDING. (Thanks gafrost/Holger)
- Fixed:        @ProcessorArch on 64-bit Windows.
- Fixed:        StringLen(integer) returning 0. (Thanks 02Clams,SlimShady)

27th September, 2005 - v3.1.1.78 (beta)

- Fixed:        Real merging of Holger .77 submission. I just update the history!!! (Sorry Holger)

26th September, 2005 - v3.1.1.77 (beta)

- Fixed:        Binary, Isbinary in tree doc. (Thanks Josbe)
- Fixed:        Binary on nonstring variable. (Thanks MSLx Fanboy)
- Added:       Hex() support binary.
- Updated:    DriveGetDrive, DriveGetType, DriveSpaceFree, FileGetTime, WinGetClassList, WinGetClientSize, WinGetPos does not return 1 on error but 0 or "". (Thanks foggw)
- Fixed:        TCPRecv regression. (Thanks VicTT)
- Fixed:        StringRegExpReplace regression. (Thanks eJan)
- Fixed:        Memory overflow in customdraw operations in GUI while scrolling. (Fixed by Holger)
- Added:       icons for tab items. (by Holger)
- Added:       set bold font/painting for treeview items. (by Holger)
- Updated:    UDF v1.38 (26 September 2005)
- Fixed GUICtrlTreeViewDeleteItem() selection logic. (gafrost)
- Fixed GUICtrlTreeViewSelectItem() but removed Helpfile info because function is obsolete. (gafrost)

23th September, 2005 - v3.1.1.76 (beta)

- Fixed:        Toggle AU3 Beta underscore. (Thanks Frozenyam)
- Fixed:        FileOpen,FileMove Doc typos. (Thanks Holger)
- Updated:    GUI... optimisations. (By gafrost)
- Fixed:        bkcolor label on tab if ListViewItem. (Thanks HansH, fixed by Holger)
- Changed:   No more minimum size with GUICreate. (Thanks ...)
- Fixed:        $SS_CENTERIMAGE on pic control. (Thanks MrSpacely, fixed by Holger)
- Removed:   Added 1 to the result of \# to compensate for the fact that c-strings are 0-based and AutoIt strings are 1-based. (by Nutster)
- Fixed:        bug in line continuation inside strings. Line continuation now disabled inside strings. Use string concatenation instead. (Fixed by Nutster)
- Updated:    Optimize internal  trailing and leading (by Nutster)
- Changed:   Now strips all whitespace if a line is made entirely of whitespace, instead of aborting the function. (by Nutster)
- Updated:    GUISwitch doc precision.
- Updated:    Internal split of AutoIt and UDF helps.
- Fixed:         FileReadLine with line=0. (Thanks VicTT)
- Added:       Binary, isBinary Functions.
- Updated:    FileRead, FileWrite binary files, just read and write Thanks Binary type
- Changed:   TCPRecv, UDPRecv  removed Flag as a Binary string will be generated if needed.
- Updated:    UDF v1.37 (20 September 2005)
- Added _FileWriteFromArray() to file.au3. (jdeb)
- Updated _InetGetSource. (w0uter)
- Updated _TempFile with optional parameters. (hansh)
- Fixed documentation for _FileListToArray. (mlazovjp/Dickb)
- Some code optimization changes: GuiList, GuiTreeView, GuiEdit (gafrost)
- Fixed logic issue with _GUICtrlListViewSetColumnOrder and _GUICtrlComboGetEditSel. (jdeb)
- Fixed a few minor documentation issues.

Outstanding bugs: Regular Expression: "(?i)<(.+?)>(.*?)</\1>" not matching properly.

09th September, 2005 - v3.1.1.75 (beta)

- Fixed:        StringRegExp doc (Sorry Nutster I miss it)
- Fixed:        SendKeyDelay, SendKeyDownDelay when  no shift required. (Thanks PapyToxik)
- Fixed:        @HotKeyPressed added to macro doc. (Thanks JdeB)
- Added:       Fileopen, FileCopy, FileMove additional flag to create non existent subfolder. (by Holger)
- Fixed:        Bad GuiCtrlSetResizing when not first show has occured.

07th September, 2005 - v3.1.1.74 (beta)

- Added:        TCPRecv,UPDRecv optional parameter to convert received data in Hex. (Thanks FrashMX)
- Fixed:         _StringToHex, _HexToString return error. (Fixed by jpm)
- Updated:     RegRead doc. (Thanks gafrost)
- Fixed:         Plugins for AU3_SetString. (/dev/null/Jon)
- Added:       ContinueCase to keywords allowed after IF. (by Nutster)
- Changed:    Set _ to be a continuation character only after whitespace. It does not matter if a comment follows the continuation character or not. \ is not a continuation character. (by Nutster)
- Added:       Switch, EndSwitch, ContinueCase, Default to list of keywords in documentation file. (by Nutster)
* Update :      regular expression classes to match those in use by other regular expression engines. Added blank, graph, print, cntrl classes. (by Nutster) (MISSING DOC)
- Fixed:        bug in zero-count predictor that prevented characters from matching properly if skipped. (by Nutster)
- Changed:   Added 1 to the result of \# to compensate for the fact that c-strings are 0-based and AutoIt strings are 1-based. (by Nutster)
- Fixed:        bug that prevented pattern "^$" from matching an empty string. (by Nutster)
- Fixed:        listview repainting on tab. (Thanks HansH, fixed by Holger)
- Updated:    UDF v1.36 (5 September 2005)
- Updated _DateTimeFormat: Added option 5 which returns time in 24 hour HH:MM:SS format. (jdeb)
- Updated _NowTime: Added optional parameter to select the return format. (jdeb)
- Fixed Documentation _MouseTrap() (JPM)
- Fixed _GUICtrlTreeViewDeleteItem bug in delete of item after adding child items. (gafrost)
- Updated _StringToHex() and _HexToString() error testing. (JPM)
- Updated Doc return Value formating. (JPM)

2nd September, 2005 - v3.1.1.73 (beta)

- Fixed:        For...In...Next doc example. (Thanks quick_sliver007)
- Fixed:        @SW_TRAY... doc removal. (Thanks JoeCool)
- Fixed:        GuiCtrlCreateIcon icon size in multiple icon .ico file (Thanks this-is-me)
- Fixed:        Send("{SHIFTDOWN}") , ... before Jon reanalysis. (Thanks Potto)
- Fixed:        ControlSetText not refreshing group control. (Thanks gafrost, fixed by Holger)
- Updated:    Slight doc precision. (Thanks ...)
- Updated:    RegEnum... doc examples.
- Fixed:        Pic control size inside a group control. (Thanks van renier, fixed by Holger)
- Updated:    UDF v1.35 (31 August 2005)
- Fixed _IsPressed Example. (gafrost)

30th August, 2005 - v3.1.1.72 (beta)

- Added:       separate colors for listview/treeview items. (by Holger)
- Updated:    Gets more exactly position for contextmenu for listview/treeview items. (by Holger)
- Fixed:         a small flickering bug in CtrlSetImage() for treeview items. (Fixed by Holger)
- Changed:    TraySetState() optional parameter values. (by Holger)
!!! Breaks current beta scripts if used TraySetState(x) with optional parameter !!!
- Fixed:        GuiCtrlSetPos, GuiCtrlSetResizing use visible window. (Thanks Holger)
- Fixed:        Crash on rightclick on treeview or listview. (Fixed by Holger)
- Removed:   @UserFuncName to much overhead for simple script constraint. (By Jon)
- Added:       PluginOpen, PluginsClose. (By Jon)
- Updated:    UDF v1.34 (30 August 2005)
- Fixed _ArraySearch example to point to Array.au3. (Thanks beerman)
- Updated _IsPressed Added optional param to function for those that will use
the function heavily they can pass a handle to the function for the dll. (gafrost/w0uter)

28th August, 2005 - v3.1.1.71 (beta)

- Fixed:        GuiGetMsg returning on Input control change. (Thanks redndahead,Holger)
- Fixed:        GUICtrlCreateInput/Edit forcing WS_TABSTOP when ES_READONLY.
- Fixed:        Exit inside UDF. (Thanks LxP/Jon)
- Fixed:        Resizing of controls dynamically created. (Thanks HansH)
- Updated:    Some clarification on return value = none. (Thanks /dev/null)
- Added:      @UserFuncName useful for debugging. (by Kurt aka /dev/null)
- Updated:    UDF v1.32 (28 August 2005)
- Added _IsPressed (Ezzetabi/Jon)
- Updated Corrected return value for _MouseTrap if no params passed. (gafrost)
- Added _GUICtrlComboAutoComplete (gafrost)
- Restored correct example for _GUICtrlListViewGetItemText (jdeb)
- Added _ArrayPush to Array.au3 (hgeras)
- Added _ArraySearch to Array.au3 (SolidSnake)
- Added _ReplaceStringInFile to File.au3 (\dev\null)
- Updated:    UDF v1.33 (28 August 2005)
- Updated _ProcessGetPriority script logic and fixed example. (MSLx Fanboy)

26th August, 2005 - v3.1.1.70 (beta)

- Fixed:         GUI click return position(bad correction). (sorry Holger)

26th August, 2005 - v3.1.1.69 (beta)

- Updated:    GuiCtrlSetImage doc for Treeview/Listview. (by Holger)
- Updated:    Doc typos BitRotate doc. (Thanks ...)
- Fixed:        GuiCtrlCreateCombo and $CBS_DROPDOWNLIST color. (Thanks ..., fixed by Holger)
- Fixed:        GuiCtrlCreateDate and $DTS_UPDOWN. (Thanks ..., fixed by Holger)
- Fixed:        GUI click return position. (Fixed by Holger)
- Updated:    Internal code mainly keyword. (by Jon)
- Fixed:        HWND string concatanation. (Fixed by Valik)
- Fixed:        Au3Info dispalying styles (Bad update at icon change)
- Fixed:        GuiCtrlCreateTreeView doc example. (Thanks ..., fixed by Holger)
- Updated:    UDF v1.31 (13 August 2005)
- Updated _MouseTrap (gafrost)
- Updated _GUICtrlEditScroll: Added $SB_SCROLLCARET - Scrolls the caret into view. (gafrost)
- Added _ProcessGetPriority to Process.au3 (MSLx Fanboy)
- Added _FilePrint to File.au3 (Erifash)

12th August, 2005 - v3.1.1.68 (beta)

- Fixed:        FuncOnAutoItExit typo. (Thanks Saunders)
- Updated:    UDF v1.30
- Fixed _DayValueToDate() to return Day and Month in the proper format.
- Fixed _DateTimeFormat() to return HH:MM in proper 24 hour notation for $sType=0.
- Added:       BitRotate function. (By Nutster)
- Fixed:        direction in BitShift documentation. (By Nutster)
- Updated:    Made regular expression patterns \n and \r distinct in StringRegExp and StringRegExpReplace. Old \n became \N. (Thanks Valik, fixed by Nutster)
- Updated:    Internal code. (by Nutster)
* backup :     Aut2Exe allowing .a3x  with old logo.

11th August, 2005 - v3.1.1.67 (beta)

- Fixed:        _ArrayReverse example typo. (Fixed by gafrost)
- Fixed:        StringSplit doc clarification. (Thanks Zedna)
- Fixed:        lexer cache. (by Nutster)
- Fixed:        Fixed bug (again) in AutoItSetOption to the definition of MouseClickDragDelay. (Fixed by Nutster)
- Updated:   Internal code. (by Nutster)
- Removed:  Check to InitScript to scan all variables in the script and make sure they are well-formed, not beginning with digits. (by Jon)
- Fixed:        InputBox left,top values when not defined. (Thanks Saunders, fixed by jpm)
- Fixed:        Crash when deleting an input control. (Thanks HardCopy)
- Fixed:        BitShift, Break, BlockInput doc. (Thanks Andrea)
- Fixed:        FileFindNextFile return error.
- Added:      @ScriptLineNumber, @ProcessorArch
- Fixed:        MouseClick, WinFlash doc typo. (Thanks VicTT)

5th August, 2005 - v3.1.1.66 (beta)

- Fixed:        MouseClickDelay option. (Fixed by Nutster)
- Added:      Check to InitScript to scan all variables in the script and make sure they are well-formed, not beginning with digits. (by Nutstser)
- Updated:    Documentation for StringRegExp. (by Nutster)
- Changed:    Simplify StackStructure(internal). (by Nutster)
- Fixed:         GuiGetCursorInfo primary/secondary under nonXP. (Fixed by Holger)
- Fixed:         GuiCtrlSendMsg, TraySetState doc link. (Thanks LxP)
- Fixed:         Obj returning handle. (Fixed by SvenP)
- Added:       $GUI_WS_EX_PARENTDRAG Allow the label or pic control to be used as the title bar to drag the whole the parent window. (Thanks Josbe, ...)
- Updated:    ComRef doc.(by SvenP)
- Fixed:        Redim of array byRef parameter. (Thanks Valik, fixed by Nutster)
- Fixed:        GuiCtrlSetState($tabitem,$GUI_SHOW) on visible GUI. (Thanks 02clams)
- Fixed:        FileFindFirstFile doc. (Thanks Zedna)
- Updated:   New AutoIt Logo/icon. (by Jon)
- Added:      _MouseTrap() to Misc.au3. (by gafrost)
- Updated:   Internal ContinueCase perf optimisation. (by Nutster)
- Added:      _Singleton to Misc.au3. (Valik code+)
- Fixed:        ContinueCase type doc. (Thanks VicTT)
- Fixed:       _GUICtrlListViewSort if no items in listview. (Thanks SnowOfIce, fixed by gafrost)
- Added:     HWnd and IsHWnd functions. (By Valik)

28th July, 2005 - v3.1.1.65 (beta)

- Added:    Silent beta install no messagebox warning. (Thanks ...)
- Fixed:      Decompiler (beta) link.
- Added:    FileSaveDialog, FileOPenDialog with multiple filter groups. (by Holger)
- Fixed:      Weird behavior when resizing column of listview on a tab. (Thanks mooseydoom, fixed by Holger)
- Fixed:      _ArrayReverse_ doc. (Thanks VicTT, fixed by gafrost)
- Added:    Extra page in the uninstaller to clean all AutoIt installations. (for Valik)
- Fixed:      Default keyword check for third parameter of MsgBox. (Fixed by Nutster)
- Added:    Switch, EndSwitch structure. (by Nutster)
- Added:    ContinueCase keyword to have a case in Select or Switch continue executing in the next case. (by Nutster)

25th July 2005 - v3.1.1.64 (beta)

- Updated:    FileInstall doc precision. (Thanks Confuzzled, Saunders)
- Fixed:        GuiGetCursorInfo() doc. (Thanks VicTT)
- Fixed:        Run 4th parameter validity. (By DaveF)
- Added:      GUISetState(@SW_LOCK/@SW_UNLOCK)  to manage repainting. (Thanks 02clams)
- Fixed:        Crash in ObjEvent() if Event Interface could not be found. (Thanks lgodfrey, fixed by SvenP)
- Fixed:        Crash in ObjName() if description could not be found. (Fixed by SvenP)
- Added:      _GUICtrlListViewCopyItems to GUIListView.au3. (gafrost)
- Fixed:        _INetGetSource source/doc. (Thanks Zedna,VicTT)
- Updated:    Exe2Aut.exe works for any version .exe or .a3x. (By Jon)
- Added:      Icon-View in GUI-ListView. (By Holger)
- Fixed:        GuiCtrlSetData flickering.

22th July 2005 - v3.1.1.63 (beta)

- Removed:    Assign respect Opt("MustDeclareVars",1). (Thanks Valik/Jon)
- Fixed:          IsBool() doc. (Thanks Zedna)
- Fixed:          GuiCtrlSetPos lead to a bad resizing. (Thanks Valik)
- Added:        ObjName() function. Returns the name or the interface description for the given Object variable. (By SvenP)
- Fixed:          Object reference leaks in ObjEvent(). (By SvenP)
- Fixed:          _GUICtrlListViewGetCurSel() returns. (Thanks HighGuy, fixed by gafrost)
- Fixed:         Creation of item on non selected GUI. (Thanks gafrost, fixed by Holger)

20th July 2005 - v3.1.1.62 (beta)

- Fixed:        _GUICtrlListViewDeleteItemsSelected() (Thanks Burrup, fixed by gafrost)
- Fixed:        ObjCreate bad link in doc. (Thanks Zedna)
- Fixed:        @NumParams destroyed after UDF call. (Thanks blindwig)
- Fixed:        Control Creation on an active tab (GUISwitch). (Thanks Zedna)
- Fixed:        StringRegExp's group parentheses identification routine. A \( immediately followed by \) (or vice-versa) inside a group would cause problems. (Fixed by Nutster)
- Added:       class identification to StringRegExp. See documentation file for details. (By Nutster)
- Fixed:        InputBox width not working. (Thanks Saunders)
- Fixed:        GuiSetCoord typo (Thanks Zedna)
- Fixed:        Obj/COM Error Handling example (Thanks DaleHolm, fixed by SvenP)
- Added:      IsBool() functions. (By Nutster)
- Updated:    UDF v1.28
- Fixed _INetGetSource.au3 example (W0uter)
- Fixed _FileReadToArray(): added StringStripCR to avoid @CR characters in the Array values. (jdeb)
- Fixed _GUICtrlListViewDeleteItemsSelected was not working correctly (gafrost)

17th July 2005 - v3.1.1.61 (beta)

- Updated:    String...() examples. (By Nutster)
- Fixed:        Doc related links. (Thanks Zedna)
- Fixed:        GuiCtrlSetImage repainting. (Thanks Ejoc)
- Fixed:        InputBox, MsgBox default parameter. (Sorry Nutster for the bad modif I did to your code)
- Added:      ConsoleWriteError(). (By Valik)
- Added:      UDFs v1.27 (By JdeB/gafrost)
- Added _Radian() and _Degree() to Math.au3 (Erifash)
- Added _FileList2Array.au3 to File.au3 (Solid)
- Added _INetGetSource.au3 to Inet.au3 (W0uter)
- Fixed documentation for _ArraySort() (jdeb)

16th July 2005 - v3.1.1.60 (beta)

- Fixed:        GUICtrlSetData with float value. (Thanks Zedna)
- Changed:   Opt, InputBox, MsgBox can use default keyword (By Nutster)
- Added:      Aut2Exe small compile file .A3X. (by JON, yes sometime he writes code, in fact very good one)
- Added:      @AUTOITPID macro. (By Valik)
- Added:      ConsoleRead(). (By Dave)
- Fixed:        GUIGetCursorInfo() doc typo. (Thanks Burrup)
- Added:      COM properties or methods can now also be used immediately to array elements containing objects. (By SvenP)
- Added:      Usage of 'Default' keyword instead of empty arguments to COM functions (only valid if COM function supports it). (By SvenP)
- Added:      UDFs v1.25/26 (By JdeB/gafrost)
- Fixed _GUICtrlListViewGetNextItem. (gafrost)
- Fixed _GUICtrlListViewDeleteAllItems and _GUICtrlListViewDeleteItem when _GUICtrlListViewInsertItem used to populate the ListView. (gafrost)

14th July 2005 - v3.1.1.59 (beta)

- Added:     Default keyword can be used to replace -1 in AutoIt Functions call. (Thanks Valik)
- Fixed:       DllStructCreate doc typo. (Thanks Burrup)
- Fixed:       Com ref doc typo. (Thanks Confuzzled)
- Added:      UDFs v1.24 (By JdeB/gafrost)
- Fixed _GUICtrlListViewGetNextItem.au3 example (gafrost)
- Fixed _DateIsValid Documentation and Example.

13th July 2005 - v3.1.1.58 (beta)

- Fixed:        Repainting label modify by GuiCtrlSetData. (Thanks Holger)
- Fixed:        if $a = default (Thanks SlimShady)
- Fixed:        $a=30e-006. (Thanks Zedna)
- Fixed:        RegEnumVal return type in @error instead os @extended. (Thanks Mhz)

12th July 2005 - v3.1.1.57 (beta)

- Updated:    RegEnumVal return the type of the value in @Extended (by Holger)
- Fixed:        StringReplace("abc","","") returns 1 instead of "". (Thanks abel,JdeB)
- Fixed:        Execute() doc. (Thanks w0uter)
- Added:      WinMove with x,y =default will not move just resize. (Thanks SlimShady)
- Added:      IsKeyword(), default keyword can be used as parameter in a function call. (Thanks Valik)
- Fixed:        GUITreeViewItem notifies wrong on first setting focus on a GUITreeView. (Thanks LazyCoder, fixed by Holger).
- Fixed:        WinSetTrans return error.
- Added:      False and Bool keywords doc. (Thanks CyberSlug)
- Fixed:        Assign not creating/assigning macro variable. (Thanks Valik)
- Fixed:        Assign respect Opt("MustDeclareVars",1).
- Fixed:        GUICtrlCreateObj() no longer closes the object after the control (or GUI) has been deleted. (Fixed by SvenP)
- Updated:   GuiCtrlRead with Checbox, Radio, doc precision. (Thanks Burrup)
- Fixed:        Redeclare of local variable. (Thanks Valik, fixed by Nutster)
- Fixed:        Prevent Assign from assigning to a constant. (Fixed by Nutster)
- Fixed:        Crash Autoit in FileFindFirstFile on empty dir. (Thanks eJan)
- Fixed:        Array initialised as empty. (Thanks Valik, fixed by Nutster)
- Added:      UDFs v1.23 (By JdeB/gafrost)
- Updated _TimetoTicks: Make parameters optional defaulting to current time (slimshady)
- Corrected Example for _GUICtrlTreeViewGetParentHandle (gafrost)
- Fixed _StringEncrypt parameter redeclaration
- Added _GUICtrlTreeViewGetParentID to GuiTreeView (gafrost)

5th July 2005 - v3.1.1.56 (beta)

- Updated:    GuiGetCursorInfo doc. (Thanks asmodehn)
- Updated:    SplashImageOn, SplashTextOn doc. (Thanks erebus)
- Fixed:         Ping better return results. (Fixed by Holger)
- Updated:    Authors contributions.
- Updated:    UDPOpen, UDPBind return an array. UDPSend, UDPRecv use it instead of the socket/ip/port. (by /dev/null)
- Updated:    RegRead return the type of the value in @Extended (Thanks /dev/null)
- Fixed:        Window Titles and Text (Advanced) links doc (Thanks MSLx Fanboy)
- Fixed:        Mouse... returns.
- Fixed:        MouseClick, MouseUp bad behavior. (Thanks Saunders)
- Changed:   Split Eval()->Execute()
- Fixed:        FileFindFirstFile does not return anymore "." or "..".
- Fixed:        _GuiCtrlTreeView examples. (Fixed by gafrost)
- Added:      _GUICtrlTreeViewGetParentHandle(). (by gafrost)
- Fixed:        variables already declared in string.au3 (Fixed by jdeb)
- Fixed:        Crash in tray functions (Thanks SlimShady, fixed by Holger)

27th June 2005 - v3.1.1.55 (beta)

- Fixed:       ControlCommand  "GetCurrentSelection". (Thanks Larry, fixed by Larry)
- Added:     SetError setting optionally extended code.(by Valik)
- Fixed:       GUICtrlCreateObj doc (Sorry SvenP I miss it)
- Fixed:      bug in ByRef/Const keyword use in UDF's. (Fixed by Nutster)
- Fixed:      bug in UDF calling which allowed a trailing comma.  (Fixed by Nutster)
- Fixed:      Prevent constants from being used to initialize themselves in CONST keyword.  (Fixed by Nutster)
- Fixed:      bug in Const init.  (Fixed by Nutster)
- Fixed:      bug in Const array init.  (Fixed by Nutster)

26th June 2005 - v3.1.1.54 (beta)

- Fixed:      Send("+{end}"). (Thanks again JoeCool)
- Fixed:      Issues in GUICtrlCreateObj() concerning 'document objects'. Document objects are now working in a GUI, however not all functions have been implemented yet. (Fixed by SvenP)
- Fixed:      Some more issues when assigning object references to other object's properties. (Fixed by SvenP)

25th June 2005 - v3.1.1.53 (beta)

- Fixed:      Several issues in GUICtrlCreateObj(). (Fixed by SvenP)
- Fixed:      TCPRecv returning error(2) (Fixed by Larry)
- Added:    Assigning Object variables to other Objects properties ('propputref') (By SvenP)
- Fixed:      Object reference count bug in ObjCreate() since version 3.1.1.33. Objects would stay open after releasing their variable (Fixed by SvenP)
- Removed: bug in Const keyword to UDF parameters. (Waiting Nutster correction)
- Updated:  UDP functions now UDPSend need the ip:port. Doc examples (By /dev/null)

24th June 2005 - v3.1.1.52 (beta)

- Fixed:      UDPBind, UDPOpen return socket (Thanks /dev/null)
- Added:    UDPStartup, UDPShutdown (Thanks MSLx Fanboy,Added by /dev/null)
- Fixed:      GUIListView GUITab Const
- Fixed:      File...Dialog browse through links (Thanks livewire, fixed by /dev/null/Jon)
- Fixed:      Send("{SHIFTDOWN}") no permanent (Thanks aLiMan)
- Fixed:      TCPRecv() returning more error (Fixed by Larry)

23th June 2005 - v3.1.1.51 (beta)

- Updated:    TCPSend, TCPRecv examples (erifash/Larry)
- Added:       Const keyword to UDF parameters. (Thanks Jon/Nutster)
- Fixed:         Treeview painting under OS <XP (Fixed by holger)
- Fixed:         Listview extend style in GuiConstant.au3 and in Doc.
- Updated:    UDFs 1.21 (By JdeB/gafrost)
- Fixed Dim for $h_Tree in _GUICtrlTreeViewItemGetTree. (gafrost)
- Added variable passed in to _GUICtrlTreeViewItemGetTree and changed example to reflect this change for separator char. (gafrost)

20th June 2005 - v3.1.1.50 (beta)

- Updated:     UDFs 1.20 (By JdeB/gafrost)
- Removed the following functions from GuiListView.au3: (gafrost) _GUICtrlListViewSetBkColor _GUICtrlListViewSetTextBkColor _GUICtrlListViewSetTextColor
- Fixed _GUICtrlTreeViewDeleteItem() to deleted more than 2 levels deep. (gafrost)
- GUICtrlTreeView.au3 UDF's (gafrost)

20th June 2005 - v3.1.1.49 (beta)

- Added:        $COLOR_... in <Constants.au3> (Thanks  Steve8tch, Helge, Burrup)
- Updated:     GuiSwitch tabitemID optional parameter to allow dynamic control creation on a tabitem.
- Fixed:         TraySetOnEvent, DLLStructCreate, DllCall, UDP...doc. (Thanks Zedna,w0uter)
- Fixed:         Make sure that declaring a UDF parameter in a Local or Global statement will raise an error. (Thanks Tylo, fixed by Nutster)
- Fixed:         Bug with accelerator keys (Alt+...) and tabs. (Thanks CyberSlug)

15th June 2005 - v3.1.1.48 (beta)

- Fixed:         GuiGetCursorInfo with nonactive GUI (Thanks Helge)
- Removed:   Bad refresh on double GUICtrlSetPos : AutoBuilder cannot resize control. Cannot work around a Windows bug.
- Added:       Support for Type Libraries that don't register themselves using version 1.0 (like Crystal Report version 8.0) (By SvenP)

14th June 2005 - v3.1.1.47 (beta)

- Fixed:         GuiCtrlSetState disable on hidden control tab (Thanks Josbe)
- Fixed:         Send("+{END}t) (Thanks JoeCool)
- Added:       GuiCtrlSetImage for GuiListViewItem control (By Holger)
- Updated:    Internal optimisation in AutoItSetOption() (By Nutster)
- Fixed:        TrayItemGetText return  (Thanks ..., fixed by Holger)
- Updated:    GuiCtrlSetColor, GuiCtrlSetBkColor, GuiCtrlSetImage for ListviewItem control. (by Holger)
- Added:       Option to ObjEvent to retrieve the name of the current Error Handler function (By SvenP)
- Added:       Preliminary GUICtrlCreateObj() support (bugware !). (By SvenP)

10th June 2005 - v3.1.1.46 (beta)

- Changed:    Opt() with just the "option" return the current value. (Thanks Saunders)
- Fixed:         Opt("GUIDataSeparatorChar",...) can be used in listview and listviewitem.  (Thanks Saunders)
- Fixed:         ContextMenu position (Thanks HighGuy, fixed by Holger)
- Updated:    UDFs 1.19 (By JdeB/gafrost)
- Fixed some merge issues.

9th June 2005 - v3.1.1.45 (beta)

- Fixed:    Internal change in array updating  bad merge (Sorry Tylo)
- Fixed:    GuiCtrlSetState on control tab (Thanks HighGuy)
- Fixed:    Tray/contextmenu treeview ... (Fixed by Holger)
- Updated:    UDFs 1.18 (By JdeB/gafrost)
- Fixed descending sort issue in multi dimension arrays.
- Fixed _GUICtrlListViewSort() top handle numeric values correctly. (gafrost)
- Renamed _GUICtrlListViewGetColumnOrderArray to _GUICtrlListViewGetColumnOrder
Also corrected documentation for _GUICtrlListViewGetColumnOrder.
Returns a "|" delimited string instead of an array, now matches
the _GUICtrlListViewSetColumnOrder in the data type. (gafrost)

7th June 2005 - v3.1.1.44 (beta)

- Fixed:    Crash using ContextMenuItem under NT4. (Thanks dash007, fixed by Holger)
- Added:   requested Regular Expression features: (by Nutster)
a) Add \-, \], and \^ to available escaped characters in sets.
b) Add \b for backspace to sets and to regular escaped characters.
c) Add \D, \S, and \W to be compliments of \d, \s and \w.
d) Add \e to match escape character.
e) Add (?: ... ) to be a non-capturing group. That is the group does not get stored in the array.
f) Add (?i) option to make case-INsensitive match
g) Add (?-i) option to use case-sensitive matching (default)
h) Add (?i: ... ) to be a non-capturing, case-insensitive group
i) Add (?-i: ... ) to be a non-capturing, case-sensitive group
- Added:    Floor and Ceiling function (by Nutster)
- Updated:  UDFs 1.17 (By JdeB/gafrost)
- Added _GUICtrlSliderGetPos functions in GUISlider.au3 (gafrost)
- Fixed _ArraySort lockup Bug.

5th June 2005 - v3.1.1.43 (beta)

- Fixed:    uninstaller deleting AutoIt Window info link. (Thanks Valik)
- Fixed:    Crash when using Obj (Thanks foggw, fixed by Tylo)

3rd June 2005 - v3.1.1.42 (beta)

- Fixed:    GuiCtrlSetData on inactive tabitem not refreshing active item. (Thanks DaleHolm)
- Fixed:    ControlSend (...,"{CTRLDOWN}b{CTRLUP})
- Fixed:    _ArraySort (by JdeB)
- Fixed:    ControlSend doc on "Windows control command"/game (Thanks phillip123adams , fixed by Jon)
*

Fixed :    Internal change in Array updating (Fixed by Tylo)
- Updated:    UDFs 1.16 (By JdeB/gafrost)
- Fixed _ArraySort to cope with Mixed values and string entries.
- Added _GUISlider??? functions in GUISlider.au3 (gafrost)

- Added _GUICtrlListViewInsertColumn, _GUICtrlListViewInsertItem, _GUICtrlListViewJustifyColumn,

_GUICtrlListViewSetColumnOrder, _GuiCtrlListViewSetItemCount, _GUICtrlListViewSort (gafrost)

27th May 2005 - v3.1.1.41 (beta)

- Fixed:    Doc on  @EXITMETHOD in  Func OnAutoItExit(). (Thanks JoeCool)
- Fixed:    Prevent StringRegExpReplace from replacing on a zero-character match. (Thanks ..., fixed by Nutster)

26th May 2005 - v3.1.1.40 (beta)

- Added:        "OnAutoItExit" called on system shutdown or user logoff. (Thanks JoeCool)
- Fixed:          Doc on Func OnAutoItStart(), Func OnAutoItExit(), @EXITMETHOD, @EXITCODE (Thanks CyberSlug)
- Fixed:          OnAutoItExit() call on Fatal error. (Thanks CyberSlug, Valik)
- Fixed:          Opt("GUIDataSeparatorChar", "\") (Thanks Saunders)
- Fixed:          TreevieItem notify when clicking a second time on the same item. (Thanks ..., fixed by Holger)

23th May 2005 - v3.1.1.39 (beta)

- Fixed:        GuiCtrlSetState on non active tab. (Thanks DaleHolm)
- Updated:    UDFs 1.15 (By JdeB/gafrost)
- Added 2 Functions to GuiListView.au3: _GUICtrlListViewSetItemSelState and _GUICtrlListViewSetItemText (gafrost)
- fixed type in _GUICtrlListViewGetExtendedListViewStyle helppage.
- fixed typo in _ViClose helppage.

22th May 2005 - v3.1.1.38 (beta)

- Updated:    UDFs 1.14 (By JdeB/gafrost)
- Fixed _GUICtrlListGetSelItems: returned array, was an array of string numbers now an array of numbers. (gafrost)
- Fixed _GUICtrlListViewGetSelectedIndices returned array, was an array of string numbers now an array of numbers. (gafrost)
- Updated _GUICtrlListSetHorizontalExtent documentation. (gafrost)
- Fixed:        Some flickering in GUICtrlSetImage. (Thanks Smed)

21th May 2005 - v3.1.1.37 (beta)

- Fixed:    Creating an Object on a remote computer failed under alternate credentials. Fixed. The username/password arguments are now available to ObjCreate(). (Fixed by SvenP)
- Fixed:      GUIListView.au3 defining _GUICtrlListViewColumnOrderArray (Fixed by JdeB/gafrost)

19th May 2005 - v3.1.1.36 (beta)

- Fixed:         DllStructGetSize badly reinserted.
- Fixed:         StringRegExp doc (Fixed by Nutster)
- Updated:    UDFs 1.13 (By JdeB/gafrost)
- Added _GUICtrlListViewSetCheckState (gafrost)
- Fixed _GUICtrlListViewGetCurSel: If more than 1 item in listview had same data was returning
the index of the 1st instance, now correctly returns the index of item selected. (gafrost)
- Added _GUICtrlMonthCal???? function located in GuiMonthCal.au3 (gafrost)

19th May 2005 - v3.1.1.35 (beta)

- Fixed:     DllStructGetSize badly remove. (Thanks foggy)
- Fixed:    Some doc Typo. (Thanks KXM)

19th May 2005 - v3.1.1.34 (beta)

- Changed:     Eval ("expression") implying hazardeous functions will be rejected. (Thanks SvenP, Jon, Valik, Nutster)
- Fixed:          When an Object variable was placed in a return statement in a UDF, it would not be released on function exit (Thanks w0uter).
- Added:        Array initialization (By Nutster).

18th May 2005 - v3.1.1.33 (beta)

- Added:        Suppression of message box on Eval with expression errors (Thanks DaleHolm,...)

17th May 2005 - v3.1.1.32 (beta)

- Added:    Appendix defining AutoIt3 limits.
- Fixed:      GuiCtrlSetGraphic doc typo. (Thanks Smed)
- Added:    Eval("expression"). (Thanks SvenP)
- Added:    Ability to use empty parameters in COM functions (like $Object.Method(, , ,"value"). Note that parameters ending with a comma (like $Object.Method("value", ) are not allowed! (Thanks Steve8tch/SvenP)
- Added:    UDP... functions (not sure they work as I never be able to have sample true Fur!!!)
- Added:    Beep() and WinFlash() functions (By Layer)

15th May 2005 - v3.1.1.31 (beta)

- Fixed:     FOR..IN loops previously terminated a script when the given object could not be enumerated. Now, the loop will be skipped silently by default. An error can however still be caught using the AutoIt COM Errorhandler. (Fixed by SvenP)
- Added:    Ability to use a default COM Event function, in case the event names of an object are unknown (see documentation). (By SvenP)
- Fixed:    Some objects could not be created with ObjCreate() using the Dispatch interface. (Fixed by SvenP)
- Fixed:    When a COM Error Handler was created and deleted afterwards (by unassigning it's variable), AutoIt could crash when a COM Error occurs. (Fixed by SvenP)
- Fixed:    When an AutoIt script error occured within a FOR..IN loop and no COM Error handler was installed, it could crash AutoIt on exit. (Fixed by SvenP)
- Fixed:    Using an Array in COM IADS-filter methods did not work. (Fixed by SvenP)
- Removed: Ability to initialize arrays in DIM and CONST keywords.(seems to introduce regression)

13th May 2005 - v3.1.1.30 (beta)

- Fixed:        GuiGetCursorInfo on tab (Thanks Josbe)
- Updated:   UDFs  1.0.12 (by gafrost/JdeB)
- Added _GUICtrlListViewGetCheckedState to GuiListView. (gafrost)
- Update several Helpfile pages for the _GUI?? functions. (gafrost)
- Update _ChooseColor. (gafrost)
- Updated _Now(),_NowDate(), _NowTime that it defauts to mm/dd/yyyy and hh:mm:ss when the pc's format isn't found in the registry (Win9X).
- Fixed:        Const definition (Fixed by Nuster).
- Fixed:        GuiCtrlCreateIcon default size 32,32

12th May 2005 - v3.1.1.29 (beta)

- Fixed:        GuiCtrlSetPos on Icon control (Thanks Burrup)
- Fixed:        FileOpenDialog, FileSaveDialog doc on update @workingDir.

11th May 2005 - v3.1.1.28 (beta)

- Fixed:        Bad refresh on double GUICtrlSetPos (Thanks Valik)
- Fixed:        extra GUI_EVENT_RESIZED at first click (Thanks Valik)
- Fixed:        COM StorageGroups (Thanks ybuan, fixed by SvenP)

10th May 2005 - v3.1.1.27 (beta)

- Fixed:        RegRead under Windows 2000 (Thanks LOULOU, datskat)
- Fixed:        Dim example (Thanks LOULOU)

10th May 2005 - v3.1.1.26 (beta)

- Fixed:        AutoIt Info focus with magnify option (Thanks Blue_Drache)
- Fixed:        DLLCall set @error on bad parameter. (Thanks Fur)
- Fixed:        Windows centering of GUICreate
- Fixed:        Cmd line option cohabitation /c and /errorstdout (Fixed by SvenP)
- Fixed:        String "0" is false in boolean comparison (Fixed by SvenP)
- Fixed:        RegExp : Indicate the pattern is invalid if a closing round bracket is not found for a group.
- Fixed:        RegExp: excessive group clearing from regular expression predictor
- Added:      Ability to initialize arrays in DIM and CONST keywords.
- Updated:    docs for DIM .

8th May 2005 - v3.1.1.25 (beta)

- Updated:   UDFs  1.11 (by gafrost/JdeB)

- Added GuiEdit.au3 which has a number of _GUIEdit??? functions for Edit controls. (gafrost)
- Updated _ChooseColor, _ChooseFont and _GUI??? function due to DllStruct renaming. (gafrost)
- Corrected wParam to variable name in _GUICtrlEditLineIndex.txt   (gafrost)
- Fixed example and include for $CB_GETDROPPEDCONTROLRECT   (gafrost)
- Typo in Example: _GUICtrlComboGetEditSel.au3    (gafrost)

- Fixed:        Crash when compiling with a specified icon (Thanks ..., fixed by JdeB)

7th May 2005 - v3.1.1.24 (beta)

- Removed:   DLLStruct ... functions (by Jpm)
* Merged :     DLLStructElementPtr in DLLStructGetPtr (by Jpm)

7th May 2005 - v3.1.1.23 (beta)

- Fixed:         Opt("GUICoorMode",2) doc (Thanks KSum)
- Fixed:         DLLStructCreate  return error (Fixed by Ejoc)

5th May 2005 - v3.1.1.22 (beta)

- Fixed:         ChooseColor and _ChooseFont doc (Sorry JdeB : bad merging).
- Fixed:         FileOpenDialog, FileSaveDialog,  HotKeySet doc (Thanks SvenP)
- Fixed:         StringInStr return 0 when searching for "" (Thanks JdeB)
- Changed:    GUICtrlSetGraphic default colors(black, transparent)
- Added:       GUICtrlSetGraphic bkColor : $GUI_GR_NOCOLOR
- Added:       DLLStructElementPtr (By Ejoc)
- Fixed:         duplicate formal parameters in UDF's. (Thanks DaveF, fixed by Nutster)

3nd May 2005 - v3.1.1.21 (beta)

- Fixed:    GUICtrlRead doc  in advanced mode (Fixed by Holger).
- Fixed:    GUICtrlRead return on expanded TreeviewItem (Fixed by Holger)
- Added:  AutoIt Info Style and exStyle for the control under the mouse.
- Fixed:    MemGetStats >2Gb (Fixed by Valik).
- Fixed:    _GUICtrlComboSetHorizontalExtent.txt (gafrost)
- Added:  _ChooseColor and _ChooseFont to Misc.au3 (gafrost)

2nd May 2005 - v3.1.1.20 (beta)

- Added:      _GUITab Functions located in GuiTab.au3. (gafrost)
- Fixed:        Doc about Expand...Strings.
- Added:      Opt("GuiDataSeparatorChar",...) (Thanks -=|GO7|=-, SlimShady,...)
- Fixed:       Return value of StringRegExp when a group is used and the user does not want the array.
- Fixed:       bug that allowed run-away recursion in CRegExp::compare_group() when a group can map to no characters. This caused a stack overflow that killed the program.
- Fixed:       Com crash (Thanks steve8tch)

1st May 2005 - v3.1.1.19 (beta) com27/28

- Fixed:       Rewrote AutoIt3-Array to COM-Array conversion. Can now handle the total number of Array dimensions that are allowed in AutoIt3. (Fixed by SvenP).
- Fixed:       Std... doc (Fixed by DaveF).
- Fixed:       "Check for update" to reference new beta download area.
- Fixed:      GUISetFont and Input Control not displayed (Thanks HighGuy).
- Fixed:      Typo on GUICtrlSetFont  (Thanks Smed).
- Fixed:      GUI_GR_COLOR default backcolor (Thanks CyberSlug).
- Fixed:      GUICtrlCreateListViewItem with more field than column. (Thanks SvenP).
- Fixed:      GUICtrlDelete of a Listview control lead to crash after recreation with more columns (Thanks SvenP).
- Added:    Unary NOT operations on strings are now allowed. A NOT operation on a non-empty string will result in FALSE.
- Changed:  Rewrote some COM documentation.

28th April 2005 - v3.1.1.18 (beta)

- Fixed:       TrayItemSetOnEvent,  TrayItemDelete doc.
- Added:     DLLStruct... (Thanks Ejoc : I hope JON agree with this new area).
- Fixed:       GUICtrlSetState for Menu/menuitem, TrayItemSetstate (Fixed by Holger).
- Fixed:       GUICtrlSetData for list or combo not inserting (Thanks kjactive).
- Fixed:       sizing/resizing of list control : not too good but window does strange think with height size (Thanks kjactive).
- Fixed:       _ArrayTrim  (merge Udf 1.08) (Thanks JdeB).
- Fixed:       WinSetTrans doc (Thanks Valik)

28th April 2005 - v3.1.1.17 (beta)

- Fixed:       Bad merge of @HOTKEYPRESSED (Sorry Holger)
- Fixed:       Date.au3 (Thanks JoeCool, fixed by gafrost,JdeB)
- Changed:  boolean-to-string conversion.  To stay compatible with existing expressions, a boolean false will be converted into a "0" and a boolean true into a "1".

26th April 2005 - v3.1.1.16 (beta)

- Fixed:        some doc typo
- Changed:   $GUI_EVENT_RESIZE ->  $GUI_EVENT_RESIZED no Opt (Thanks Valik).
- Fixed:        UDF udapted (thanks JdeB...)
- Fixed:        Boolean comparisation with integer values as rightpart argument did always return 'false'. Now it is 0->false, anything <> 0 -> true (thanks Novack)

25th April 2005 - v3.1.1.15 (beta)

- Fixed:      TCPListen min/max number of parameters (was not fixed) (Thanks Larry)
- Added:    $GUI_EVENT_RESIZE with Opt("GUIEventCompatibilityMode",1) (Thanks Valik).
- Fixed:      Doc on resizing (Thanks Valik)
- Fixed:      Resizing of Combo control (Thanks CyberSlug)
- Changed: GUICtrlCreateList forced style LBS_NOTIFY (Thanks Valik).
- Fixed:      $GUI_NOTODAY... constants values. (Thanks Saunders).
- Fixed:      Run use of 3rd param when 4th par is defined (Thanks Valik/DaveF).
- Fixed:      Tray/HotKeySet Doc (Thanks ..., fixed by Holger).

25th April 2005 - v3.1.1.14 (beta) COM26 merge

- Fixed:      TCPRecv doc (Thanks Larry).
- Fixed:      TCPListen min/max number of parameters (Thanks Larry)
- Added:    GUICtrlCreateMonthCal (Thanks ...)
- Fixed:      Optimized For..In loop for Arrays. It should run a bit faster now.
- Added:    Usage of COM 'default properties' is now supported (Thanks KXM).
- Fixed:      Some minor documentation changes (Thanks DaleHohm).
- Fixed:     GUICtrlCreateTab disapearing (Thanks SlimShady).

24th April 2005 - v3.1.1.13 (beta)

- Changed:    UDF and UDF docs (Thanks JdeB).
- Changed:    STD I/O controlled by fourth, bit-flag parameter to Run() with $STDxxx_CHILD constants.
- Updated:    doc files for Run, AutoItSetOption, StderrRead, StdinWrite, StdoutRead, macros, TOC.
* Moved :      Stdxxxyyy functions to Process Management section of docs
- Removed:   Options ProvideRunStderr, ProvideRunStdin, ProvideRunStdout.
- Changed:    Tray... to TrayItem... renaming.
- Added:      @HotKeyPressed macro (Thanks Holger).
- Fixed:        Some fixes in Tray functions.
- Fixed:        GUICtrlSetStyle(..., $GUI_SS_DEFAULT_INPUT/EDIT) (to have all forced values).
- Fixed:        GUICtrlSetStyle refresh now the window.
- Added:      TCP functions from Au3Xtra (Thanks Larry).

21th April 2005 - v3.1.1.12 (beta) COM25 merge

- Fixed:    more than 15 GUI creation (Thanks Wb_Freekill, herewasplato)
- Fixed:    Reference count problem when passing an Object variable as COM-function argument (Thanks dwerznec).
- Fixed:    Memory leak in COM-Array conversions.

20th April 2005 - v3.1.1.11 (beta) COM23/24 merge

- Fixed:    VC7 warnings (Fixed by  SvenP).
- Fixed:    An Object reference leak in DLLCall().
* Added:   Support for Arrays returned from COM functions.
- Fixed:     A FOR..IN loop would still start when an Array contained no elements.
- Changed: Return,@error, @extended have to be explicit to be return by an UDF (Thanks Valik)

19th April 2005 - v3.1.1.10 (beta) COM22 merge

- Fixed:    When a COM method fails on variable assignment, it would silently discard the variable assigment. Changed that, so it will now produce a fatal COM-Error, unless the user has installed it's own errorhandler.
- Fixed:     Two Object reference leaks in DLLCall().
- Fixed:     Minor memory leak in line tokens of type Object.
- Fixed:     A boolean value as default value in a function declaration was not allowed.
- Fixed:     Minor memory release bug in ObjEvent().

18th April 2005 - v3.1.1.9 (beta) dev only

*

Fixed :    doc @error setting
*

waiting Valik fixes on return @error/@extended

17th April 2005 - v3.1.1.8 (beta)

*

Fixed :    GuiCtrlSetStyle ES_READONLY on input/edit control (Thanks Burrup)
*

Fixed :    Arguments in COM Methods did not accept expressions or other COM Objects.

15th April 2005 - v3.1.1.7 (beta) COM20 merge

*

Added :    +=, -=, *=, /= operators (Thanks Tylo)
*

Added :    Keywords 'false' and 'true'. Currently only supported in function arguments. In other assignments they will be converted to integers.
*

Added :    Full boolean support.

14th April 2005 - v3.1.1.6 (beta) COM19 merge

*

Fixed :    Reference leaks in Object Enumerator.
*

Fixed :    Object reference not released in ObjGet().
*

Fixed :    Object references not being released in FOR..IN loops.

12th April 2005 - v3.1.1.5 (beta)

- Fixed:      Doc for "GUIEventCompatibilityMode"

11th April 2005 - v3.1.1.4 (beta)

- Changed:     Opt("GUISpecialEventMode',1) by  Opt("GUIEventCompatibilityMode',1).
- Added:        GuiCtrlRead return ControlID if Opt("GUIEventCompatibilityMode',2) (Thanks CyberSlug).

10th April 2005 - v3.1.1.3 (beta) COM18 merge

*

Fixed :      Variant_Datatype ReInit() didn't release any Objects.
*

Fixed :      Double backslashes are no longer required in ObjGet() filename parameter.
*

Added :    idispatch_ptr support in DllCall(). (by Valik)

10th April 2005 - v3.1.1.2 (beta)

- Fixed:      TraySetIcon default id  (Thanks .../Holger).
- Added:    right-click for List/Treeview control  (By Holger).
- Fixed:      regexp crash (Thanks Valik/David)

3.1.1 (7th Apr, 2005) (Release)
- Fixed: @OSVersion did not work for Windows Server 2003
- Fixed: $LVS_EX_FULLROWSELECT in GuiConstants.au3 was defined $LBS...
- Fixed: @YDAY was incorrect (one day out)

3.1.0 (7th Feb, 2005) (Release)

- Added: GUI creation capabilties
- Added: DllCall(), DllOpen(), DllClose()
- Added: ControlListView()
- Added: WinList()
- Added: DirGetSize()
- Added: IniReadSectionNames(), IniReadSection()
- Added: InetGet(), InetGetSize()
- Added: HttpSetProxy(), FtpSetProxy()
- Added: FtpBinaryMode (Option)
- Added: Ping()
- Added: ControlGetHandle()
- Added: WinGetProcess() and ProcessList()
- Added: SetExtended()
- Added: WinSetTrans()
- Added: Assign()
- Added: ConsoleWrite()
- Added: @AutoItExe macro
- Added: Const keyword
- Added: Optional parameter support for user functions
- Added: "main", "primary", "menu", "secondary" added as valid mouse button types
- Added: ExpandVarStrings (Option)
- Added: The user functions OnAutoItStart() and OnAutoItExit() are called during startup/exit
- Added: OnExitFunc (Option)
- Added: (Internal) Native HWND datatype added to variants

- Removed: URLDownloadToFile() (Replaced by InetGet())

- Changed: For loops automatically declare the counter variable as a Local variable
- Changed: IniDelete() can also delete entire sections
- Changed: StringReplace() also returns the number of replacements in the @extended macro
- Changed: StringMid() the "count" parameter is now optional (assumes remainder of the string)
- Changed: PixelChecksum() now has optional step parameter
- Changed: Control...() functions now accept the Control ID as an extra way to identify a control
- Changed: InetGet() function can download in the background
- Changed: Reg...() functions no longer give a hard error when an unknown key is used.
- Changed: The mouse and pixel functions now have an additional "client area" mode
- Changed: Added WIN_2003 to the possible values for @OS_VERSION
- Changed: AU3Spy.exe renamed to AU3Info.exe
- Changed: Major upgrades to the AutoIt Window Spy (control highlighting, magnify)
- Changed: FileSelectFolder supports an initial directory as well as a root directory
- Changed: File functions no longer give fatal errors when -1 is used as a handle
- Changed: (Internal) new quicker variable lookup using a binary tree
- Changed: (Internal) new shared process memory class used for StatusBarGetText()
- Changed: (Internal) Unified structure stacks (If, Func, Select, While, Do, For)
- Changed: (Internal) Variant rewrite (now handles int32, int64, double, string, HWND data)

- Fixed: Memory leak in SplashImageOn()
- Fixed: Expressions like "$var = $var" will now give an error if the variable wasn't previously defined
- Fixed: StringFormat() with \\ characters
- Fixed: Under rare situations after closing a script AutoIt3.exe would still appear in task manager for a while
- Fixed: Certain paths like @WindowsDir were incorrect under Windows Terminal Server
- Fixed: FileSetTime() systems in non-GMT timezones had incorrect results
- Fixed: FileMove() with UNC paths (does a real move when in the same dir rather than a copy).
- Fixed: ^ operator
- Fixed: Chr()
- Fixed: StatusBarGetText() failed when used with no "Text" parameter
- Fixed: InputBox() didn't return focus to the previously active window

3.0.102 (4th August, 2004) (Release)

- Major Change: Colors now default to the standard RGB format rather than the previous BGR format.

    This affects PixelSearch, PixelGetColor.

    The "ColorMode" option has been added to allow old scripts to run with the old BGR mode, just
    place this line at the top of your script to use the old method:

    Opt("ColorMode", 1)

- Added: DriveMapAdd(), DriveMapDel() and DriveMapGet()
- Added: @SW_SHOWDEFAULT, @SW_SHOWMAXIMIZED, @SW_SHOWMINIMIZED, @SW_SHOWMINNOACTIVE,
        @SW_SHOWNA, @SW_SHOWNOACTIVATE, @SW_SHOWNORMAL
- Added: FileGetShortcut()
- Added: Predefined $CmdLineRaw variable now holds the original command line in full
- Added: @DesktopDepth
- Added: ReDim
- Added: Command line option /ErrorStdOut
- Added: More command line params for Aut2Exe.exe: /nodecompile and /comp 0-4  (compression level, 4=best)
- Added: Process ID (PID) support for Process...() and Run() functions
- Added: ProcessSetPriority()
- Added: Decompiler (Exe2Aut) added
- Added: PixelChecksum()
- Added: Strings starting with "0x" are converted from hex when used numerically
- Added: Multi-directory #include <> paths
- Added: MouseWheel()
- Added: FileRecycleEmpty()
- Added: RegEnumKey() and RegEnumVal()

- Changed: TimerStart() renamed to TimerInit().  TimerStop() renamed to TimerDiff()
- Changed: FileSelectFolder() flag parameter changed
- Changed: REG_MULTI_SZ values allow double NULL values.
- Changed: BirOr(), BitAnd() and BitXOR() take up to 255 parameters
- Changed: Icon and windowstate options added to FileCreateShortcut()
- Changed: RunAsSet() supports extra profile handling options
- Changed: RegWrite() now accepts just the keyname in order to create a keyname with no value
- Changed: "Allow Decompilation" option added to Aut2Exe
- Changed: Aut2Exe gives feedback during compilation and gives the option to abort
- Changed: Compiled scripts run/extract much faster when using FileInstall and medium/large files
- Changed: Max number of user function limits removed
- Changed: Max number of variable limits removed
- Changed: -1 does no sleep at all for Send/Mouse delays (SendKeyDelay, etc...)
- Changed: Optional occurance parameter added to StringInStr()
- Changed: Optional default filename added to FileOpenDialog() and FileSaveDialog()
- Changed: Registry functions accept 4 letters keys (HKLM instead of HKEY_LOCAL_MACHINE, etc.)
- Changed: Remote registry keys are accepted in the form "\\computername\key\subkey"
- Changed: AutoItSetOption returns the previous setting
- Changed: (Internal)  Built-in function lookups completely rewritten
- Changed: (Internal) String functions speeded up (concat in astring and variants)
- Changed: (Internal) ControlSearch modified to include the windowsearch

- Fixed: FileGetSize() works on >2GB files and in-use files
- Fixed: The expression: If "non-blank" And 1 - now evaluates as true
- Fixed: /c command line use in compiled scripts
- Fixed: ToolTip() when the mouse is near the bottom of the screen
- Fixed: StringIsDigit()
- Fixed: Process... functions under NT4 unable to see certain processes
- Fixed: Some keywords incorrectly allowed after a THEN keyword
- Fixed: (Internal) Hotkey registering logic

3.0.101 (11th Mar, 2004) (Release)
- Added: MemGetStats()
- Fixed: Compatibility problem under Windows 95a
- Fixed: Some minor help file typos corrected

3.0.100 (29th Feb, 2004) (Release)
- Added: WinTextMatchMode (Option)
- Fixed: ExitLoop and ContinueLoop failed during a recursive function
- Fixed: Sleep(0) (or < 0 ) no longer hangs
- Fixed: $ with no name was allowed as a variable
- Fixed: For Loop bug when used in recursion
- Fixed: FileGetLongName() return value
- Fixed: @UserProfileDir under 9x
- Fixed: IsDeclared()
- Fixed: Random()

3.0.94 (21st Feb, 2004) (Beta)

SCRIPT BREAKING CHANGES for FileReadLine and FileWriteLine:

FileWriteLine now automatically writes a DOS @CRLF pair UNLESS the last character of
the string to write is already @CR or @LF (to make it possible to write non-DOS text files)

FileReadLine will correctly read a DOS, UNIX or MAC line (@CRLF, @LF and @CR terminated respectively).

FileWrite and FileRead added to add further support.

CHANGE YOUR SCRIPTS AS FOLLOWS:

From: FileWriteLine($handle, "line" & @LF)
To: FileWriteLine($handle, "line" & @CRLF) or FileWriteLine($handle, "line")

From: FileWriteLine($handle, "line")
To: FileWrite($handle, "line")

- Added: FileWrite() and FileRead()
- Changed: FileReadLine() and FileWriteLine()
- Added: ToolTip()
- Added: Eval() and IsDeclared()
- Added: CaretCoordMode (AutoItSetOption)
- Added: WinGetCaretPos()
- Added: WinGetState()
- Added: MustDeclareVars (AutoItSetOption)
- Added: Editors page in help
- Changed: EnvSet()
- Changed: WinShow() renamed to WinSetState()  (With WinShow() as an alias)
- Fixed: Splash() and moveable flag (and -1 default flag in options)
- Fixed: Odd elseif error message showing wrong line
- Fixed: Crashes with bad function calls: MsgBox(MsgBox(MsgBox))
- Fixed: HotKey crashes when unregistering a key that was not registered

- Fixed: (Internal) WinWaitDelay, SendKeyDelay, etc type commands now more accurate (previously only accurate to 10ms (NT) or 55ms (9x))
- Fixed: (Internal) Execute() recursion limit dropped to 384 levels
- FIxed: (Internal) Calls to Util_AttachThreadInput will not attach to hung windows
- Fixed: (Internal) some RegRead/RegWrite sizing problems (Ta, Chris)

3.0.93 (12th Feb, 2004)
- Added: SendAttachMode (AutoItSetOption)
- Added: Opt() is an alias for AutoItSetOption() :)
- Added: Doc updates
- Added: WinSearchChildren (AutoItSetOption)
- Changed: Splash and Progress functions have a "moveable" option
- Changed: StringStripWS (new strip all ws mode)
- Changed: InputBox (timeout param)
- Changed: Hot keys are no longer buffered when the script is paused.
- Fixed: REG_MULTI_SZ support
- Fixed: TrayIconDebug not showing correct filename
- Fixed: ControlClick, ControlCommand("CHECK")
- Fixed: Control functions now using return values rather than @error where appropriate.
- Fixed: Error with '' quotes in Aut2Exe
- Fixed: StringFormat()
- Fixed: Lexer checks that potential user function calls are for existing functions
- Fixed: Input thread attachment in Send() ( check Send("{... down}") still works)

- Changed: (Internal) Removed the only sscanf call and replaced with own code - saves 4KB.

3.0.92 (6th Feb, 2004)

Note: Script breaking changes to ControlLeftClick(), FileFindFirstFile(), SendSetCapslockState()

- Added: Dec()
- Added: BitNOT(), BitXOR(), BitShift()
- Added: TrayIconDebug (AutoItSetOption)
- Added: Dim single-line initialization and multiple variables
- Added WinTitleMatchMode 4 (AutoItSetOption)
- Added: #comments-start and #comments-end for multiline comments
- Added: DirCopy()
- Added: DirMove()
- Added: Controls will be checked by visible text as well as classname (waves to Chris :) )
- Added: Macros: @USERPROFILEDIR, @HOMEDRIVE, @HOMEPATH, @HOMESHARE, @LOGONSERVER, @LOGONDOMAIN, @LOGONDNSDOMAIN
- Removed: SendSetCapslockState() - Use Send("{CAPSLOCK on/off}")
- Changed: FileFind works differently (handles used and multiple finds now supported)
- Changed: ControlLeftClick() renamed to ControlClick() and options added.
- Changed: Window Spy options added and ability to freeze display
- Changed: StringSplit will return each char if delimiters are ""
- Changed: WinMenuSelectItem return value
- Changed: optional variation added to PixelSearch()
- Changed: optional step value added to PixelSearch()
- Changed: FileMove() overwrite flag added
- Changed: *.* assumed if a directory is used in FileCopy/FileMove/FileDelete
- Fixed: @TempDir under certain conditions
- Fixed: Hotkeys were ignored while another hotkey function was running

- Changed: (Internal) DirRemove changed
- Changed: (Internal) Sendkeys tweaked A LOT

3.0.91 (29th Jan, 2004)
- Added: Options: MouseClickDelay, MouseClickDownDelay, MouseClickDragDelay (AutoItSetOption)
- Added: REG_BINARY type for RegRead() and RegWrite()
- Added: FileChangeDir()
- Added: ControlCommand() - added GETCURRENTSELECTION
- Added: Added some standard library includes (See Program Files\AutoIt3\Include\)
- Added: SendKeyDownDelay (AutoItSetOption) (alters the amount a time a key is held down before released)
- Added: AutoIt returns an exit code of 1 if script could not be loaded
- Added: FileSetAttrib(), FileSetTime()
- Added: In Au3_Spy pixel colour is also shown in hex
- Fixed: While loops failing when used in recursive functions of themselves... (!?)
- Fixed: Small line coninuation _ bug
- Fixed: URLDownloadToFile()
- Fixed: FileRecycle() not always working
- Fixed: FileRecycle() return value
- Fixed: Relative #include use
- Fixed: Smart boolean comparision re-added
- Fixed: FileFindFirst() not releasing memory when called multiple times
- Changed: FileGetTime outputs strings with leading 0s when required
- Changed: Default value of Local/Global/Dim is the String "" (equates to 0 when used as a number)

- Changed: (Internal) More scriptfile.cpp optimization
- Changed: (Internal) Execute() recursion levels limited to 512 to prevent stack overflows

3.0.90 (20th Jan, 2004)
- Fixed: Serious nested IF bug

- Changed: (Internal) Rollback of variabletable.cpp and stacks/vectors

3.0.89 (19th Jan, 2004)
- Added: Method for standard library functions and includes
- Added: #include < > support (must be fully installed to work)
- Added: #include-once directive (put at the top of a file to make sure it is only
       included once)
- Added: @UserName and @TempDir macros
- Fixed: Nasty fatal bug in 3.0.88

3.0.88 (18th Jan, 2004)
- Added: ElseIf
- Changed: All block structures (IF/WHILE/FOR, etc.) are now checked before execution.
- Fixed: Some single hotkeys not working
- Fixed: Better detection of illegal nesting, e.g.:
         if 1 = 1
           while 1
         endif
           wend

- Changed: (Internal) lots of error checking code removed as a nice side effect of
         initial block structure checking
- Changed: (Internal) windows string functions (lstrcmp etc) moved back to C versions
         due to massive performance penalty

3.0.87 (15th Jan, 2004)
- Changed: Aut2Exe stores files it can't compress (.zip etc) rather than expanding
- Fixed: Aut2Exe crashing if FileInstall used a file less than 4 bytes
- Fixed: Aut2Exe crashing with uncompressable files
- Fixed: RegRead not working correctly with large DWORD values
- Fixed: NOT fixed when skipped during a boolean expression

- Changed: (Internal) variable_table.cpp rewritten
- Changed: (Internal) All stacks/vectors replaced with templated code

3.0.86 (12th Jan, 2004)
- Added: Enhanced boolean comparisons
- Added: Send can hold keys down, e.g. Send("{a down}") will hold the A key down (only works usefully with games)
- Fixed: 0 ^ 0 = 1
- Fixed: on_top parameter of ProgressOn()
- Fixed: No longer hanging with blank search in StringReplace()
- Fixed: Asc() giving -1 in some cases
- Fixed: Tray icon's tip not updating when un-pausing
- Changed: Single keys of 0-9, a-z can no longer be used as hotkeys if alt,ctrl or win is NOT also used.

- Changed: (Internal) FPU assembler used for advanced math (sin,cos,pow, etc) functions due to
         exe size problems under VC7

3.0.85 (9th Jan, 2004)
- Added: HotKeySet()
- Added: Abs(), Sin(), Cos(), Tan(), ASin(), ACos(), ATan(), Sqrt(), Log(), Exp()
- Added: ^ operator
- Added: Round()
- Added: Call()
- Changed: IniWrite/IniDelete() return 0 if they fail
- Changed: No longer need to use virtual keys for FileCreateShortcut()
- Fixed: Return value for FileCopy/FileInstall()
- Fixed: Incorrect use of ExitLoop/ContinueLoop trapped

- Changed: (Internal) Send() tweaking
- Fixed: (Internal) Function calling/scope slightly bugged (Adlib, Hotkey)

3.0.84 (30th Dec, 2003)
- Added: New window WinTitleMatchMode of 3 (for exact title match)
- Added: Some more details added to helpfile
- Changed: The key # is no longer used as a delimiter but as a left Win key combination.  So
           Send("#e") now presses the left win+e keys.  I don't think anyone actually used
           it as a delimiter anyway - it was just a left over from v1 and it never made
           lines easier to read anyway
- Changed: FileReadLine() and FileWriteLine() modified so that they optionally accept a filename
           instead of a filehandle for "quick 'n' dirty" file access - I'm sure this will be
           popular :)

3.0.83 (30th Dec, 2003)
- Changed: Due to popular demand, by default functions now return 0 for error and 1 for success.
           This affects the following functions: FileWriteLine, CDTray, DriveSetLabel, DirCreate,
           DirRemove, FileCopy, FileMove, FileDelete, FileInstall, ClipPut, URLDownloadToFile,
           RunAsSet, Shutdown, RegWrite, RegDelete, WinWait, WinWaitActive, WinWaitClose, WinWaitNotActive,
           ProcessWait, ProcessWaitClose.  If you were using the return values of one of
           these functions then please check your scripts.

- Changed: ControlSend() supports {} (for most things at least...)

3.0.82 (29th Dec, 2003)
- Added: Files installed with FileInstall() now have original timestamps (created/modified)
- Added: IsNumber()
- Fixed: Number to string conversions and general float parsing

- Changed: (Internal) FileInstall() compression code updated

3.0.81
- Fixed: Yet more bugs with single line IF - regretting adding this feature already...
- Fixed: Bugs with NOT operator and the new variant code
- Fixed: Bug with clicking CANCEL on the open script window (introduced in 3.0.80)
- Fixed: StringIs... functions failing when using numbers as parameters

- Fixed: (Internal) VectorVariant modified to allow reference access to variants (instead of copying everytime)

3.0.80 (15th Dec, 2003)
- Changed: Number to String conversions tweaked
- Fixed: Massive bug fixed with arrays introduced in 3.0.76
- Fixed: Line continuation crash

- Changed: (Internal) script reading code updated for Aut2Exe and merged with AutoIt

3.0.79 (15th Dec, 2003)
- Added: Lines can be continued over many lines - use _ at the end of a line to continue it (as VBScript)
- Added: Single line IF statements possible
- Changed: Maximum line length (including total of combined lines) increased from 1023 to 4095 characters.
- Changed: "Then" keyword in IF statements no longer optional (helps with single line IFs)

e.g.
MsgBox(0, "Test", "This is some text _
    And more text _
    And even more text")

3.0.78 (15th Dec, 2003)
- Changed: Variants work differently - no longer a seperate INTEGER type
- Changed: Float() changed to Number()

    All numbers now 15digit precision (internal C double type)
    Also affects Random() you will get floating point numbers back unless you use Int()
        with the result

3.0.77 (30th Nov, 2003)
- Added: New option "TrayIconHide" (AutoItSetOption)
- Changed: "AutoIt -" prefix removed from compiled a script's tray icon
- Changed: Compiled script's file properties point to a custom web page
- Fixed: Tray icon should redraw after an explorer crash

3.0.76 (30th Nov, 2003)
- Fixed: Couple of bugs with ContinueLoop and ExitLoop
- Fixed: Statements like $test[$test[0]] now working

3.0.75 (30th Nov, 2003)
- Added: ControlGetFocus()
- Added: Local and Global keywords
- Changed: Dim (along with Local/Global) can now be used as in vbscript to declare variables
- Changed: FileOpenDialog() uses "|" as the delimiter instead of ","
- Fixed: PixelSearch()
- Fixed: SoundPlay()...maybe
- Fixed: Splash() sizing issues

3.0.74
- Added: Hex notation for integer numbers ($var = 10 or $var = 0xa)
- Added: MouseDown(), MouseUp()
- Added: TrayTip()
- Fixed: PixelCoordMode not working correctly
- Fixed: Compiled exes not producing random numbers

3.0.73
- Added: New option "RunErrorsFatal" (AutoItSetOption)
- Added: New option "ExpandEnvStrings" (AutoItSetOption)
- Changed: FileMove() moves/renames without affecting timestamps - can also be used
           for directories
- Changed: RegRead/RegWrite() now supports REG_EXPAND_SZ
- Changed: Extra options added to FileGetTime()
- Changed: Extra 250ms delay added to start and end of mouse drags
- Fixed: Odd error message fixed where a user function contained a badly formatted line

3.0.72
- Fixed: Compiler was ignoring comments near FileInstall() functions
- Fixed: Memory leak in StatusBarGetText()
- Fixed: PixelGetColor
- Added: New option "PixelCoordMode" (AutoItSetOption)

3.0.71
  Get ready for some script rewriting...*holds up banner with BETA written on it :) *

- Added: ControlSend()
- Added: Framework for AutoItSetOption() - note: this function replaces all
         functions like WinSetDelay, SendSetDelay, MouseSetMode, etc.
- Removed: MouseSetMode(), SendSetCapslockMode(), SendSetDelay(), WinSetDelay(), WinSetDetectHiddenText()
           WinSetTitleMatchMode()

3.0.70
- Fixed: SoundPlay()
- Removed: AutoItWinShow(), AutoItWinWrite(), AutoItWinGetText()
- Changed: ControlCommand() (updated with Larry's recent changes)
- Changed: RegRead() extended error codes
- Added: FileFindFirstFile(), FileFindNextFile()
- Added: AutoItWinGetTitle()
- Added: WinGetClientSize()
- Added: EnvUpdate()
- Added: SoundSetWaveVolume()
- Added: FileGetLongName(), FileGetShortName()
- Added: TimerStart(), TimerStop()

3.0.69
- Fixed: Small delay added into mouseclick functions
- Fixed: FileGetVersion()
- Fixed: WinMenuSelectItem()
- Fixed: StringSplit() buffer overrun

3.0.68
- Added: FileGetAttrib(), WinMenuSelectItem(), FileGetVersion()
- Added: Added options to ControlCommand()

- Changed: (Internal) Larry's nFlag functions split

3.0.67
- Changed: InputBox() narrowed slightly
- Fixed: AutoIt icon not refreshing if Return was used at top level of script
- Fixed: Crash with extra long lines fixed
- Fixed: @OS_VERSION weirdness fixed

- Changed: (Internal) MessagePump handled differently and recursion level of Execute() tracked

3.0.66
- Changed: StringSplit() returns full string in array if no delimiters matched (and count=1 not 0)
- Fixed: Crash related to window titles and text fixed.

3.0.65
- Added: ControlCommand() option GetCurrentLine
- Fixed: Possible bug with optional "Then" statement fixed
- (Internal) Window searching functions altered to check for hung windows

3.0.64
Fixed: IniWrite/Delete() functions were not flushing immediately under 9x.
Added: Errors now include the file name that contained the error

3.0.63
- Changed: ControlCommand() various internal changes.
- Fixed: MsgBox() character limit bug fixed
- Changed: Can now specify a custom time for AdlibEnable()

3.0.62
- Fixed: Aut2Exe icon changing code bugged
- Changed: Timing of "paused" flash and icon modified a little.

3.0.61
- Fixed: FileOpenDialog()
- Changed: (Internal)Encryption code modified - check compiling thoroughly
- Added: AutoIt icon flashes when in paused state

3.0.60
- Changed: Aut2Exe strips version info from compiled script. (Hoping to be custom versioninfo in future)
- Fixed: FileGetSize() (change made, unsure if problem fixed)
- Fixed: FileMove wasn't supported on 9x (9x has no MoveFileEx function, Dave... :) )

3.0.59
- Fixed: InputBox was not returning "" on cancel

3.0.58
- Fixed: The window text searching in AutoIt was not the same as AU3_Spy or WinGetText()
- Added: InputBox() (and very nice it is too...)
- Added: FileMove()

3.0.57
- Fixed: MsgBox under 9x was doing odd things with timeouts - tried something else.

3.0.56
- Fixed: Selecting the default icon in Aut2Exe was not saved between sessions
- Fixed: @OSLang under NT4...
- Added: SysTabControl32 tabbing

3.0.55
- Changed: Better icon support added to Aut2Exe
- Changed: (Internal) upx.exe called during the compiler to compress data -
    necessary to do it this way as you can't edit the resources of a compressed
    exe
- Changed: SoundPlay()

3.0.54
- Fixed: Compiled scripts with custom icons were failing
- Fixed: @OS_LANG under 9x

3.0.53
- Added: StringSplit()

3.0.52
- Changed: SoundPlay() option to wait added
- Added: ChangeIcon support back in Aut2Exe (32x32x16) - Slightly better than v2 in that
        a multiimage iconfile can be used - although only the 32x32x16 image is actually used.

3.0.51
- Fixed: Aut2Exe still used ' comments when including files -whoops.

3.0.50
- Changed: (Internal)A little error checking added to the lexer
- Added: @TAB, @COMSPEC
- Changed: MouseClick() parameters changed
- Added: MouseClickDrag()

3.0.49
- Fixed: Statusbar in Aut2Exe with Visual Styles
- Changed: Single line comment character is now ;
- Changed: ' and " may now be used for strings

3.0.48
- Added: StringIsFloat(), StringIsInt()
- Fixed: MsgBox() wasn't returning -1 on timeout
- Fixed: StringReplace() error if string to replace was at end of string
- Changed: StringReplace() count is now optional (assumes global)
- Added: Aut2Exe and AutoIt3 now use Visual Styles

3.0.47
- Changed: FileExists() to work with wildcards
- Changed: Extra options added to AutoItWinShow()
- Changed: RegRead returns the string "" in addition to @error if the (default) key was requested
    and not found.
- Fixed: DriveGetDrive()  (still an a: drive bug to find though)

3.0.46
- Fixed: RegDelete() return value when value does not exist
- Fixed: CDTray() open/closed problems
- Fixed: FileSelectFolder() crash due to missing initialisers

3.0.45
- Changed: Set...() functions renamed (SendSetDelay, WinSetDelay, etc.)
- Added: StatusbarGetText()

3.0.44
- Added: Break()
- Fixed: DriveStatus()
- Fixed: RegDelete()

3.0.43
- Fixed: @OSLang for 2000+
- Added: Hex(), AutoItWinGetText()
- Changed: UBound() back to how it was again (same as VBScript syntax)

3.0.42 (30th Aug, 2003)
- Tweaked: Mouse coords were 1 pixel out
- Added: MouseSetMode() to allow for screen _and_ relative coords - yay everyone's happy

3.0.41 (30th Aug, 2003)
- Fixed: Bug with invalid filehandles (again!).
- Changed: Mouse commands may now work on multiple monitors.
- Fixed: $CmdLine wasn't working correctly for compiled scripts.
- Fixed: The operator == wasn't properly comparing strings
- Fixed: INI functions, filename now doesn't need ".\file.ini" to work in the current directory
- Fixed: Bug in Run() directory would not be set if last parameter was used

3.0.40
- Added: Windows API error messages added onto errors for the Run() commands
    (directory invalid, bad logon, etc).

3.0.39 (29th Aug, 2003)
- Added: RunAsSet() (2000/XP only)
- Added: FileRecycle()

3.0.38 (28th Aug, 2003)
- Changed: WinGetText now correctly takes note of detecthiddentext setting
- Added: StringStripWS()
- Added: DriveGetLabel(), DriveGetSerial(), DriveGetFileSystem(),
        DriveSetLabel(), DriveGetType(), MouseGetCursor()

3.0.37
- Changed: Compression tweaked in Aut2Exe

- Changed: UBound($array) now returns number of dimensions
- Renamed all the IsUpper/IsAlpha, etc functions to StringIsUpper/StringIsAlpha, etc.
- Added: IsFloat(), IsArray(), IsInt(), IsString()
- Added: Mod()

3.0.36
- Fixed: Main dialog in Aut2Exe
- Added: New compression code (slower but better at higher levels)

3.0.35
- Added: FileInstall() support
- Added: SplashImageOn(), SplashTestOn(), SplashOff()
- Added: ProgressOn(), ProgressOff(), ProgressSet()
- Added: Compression level option in Aut2Exe

3.0.34
- Fixed: subscript must be > 0 in Dim statement
- Added: Compiled script reading code added
- Added: @Compiled
- Added: Aut2Exe

3.0.33 (22nd Aug, 2003)
- Added: Case Else
- Added: @DesktopWidth, @DesktopHeight
- Fixed: CDTray - closed/close
- Fixed: Incorrect reference passing of global variables
- Fixed: Bad file handle causing a crash in FileWrite/Read/Close
- Fixed: Crash with badly formatted Func statements
- Parsing speeded up (doubled the speed)
- Optimized string handling in variants

3.0.32 (20th Aug, 2003)
- Started proper version logging :)

First public beta binary - 4th Mar, 2003.

Development started - 20th Jan, 2003.


UDFs 重新命名

自 v3.2.9.3 版就開始使用的 _GUICtrlXXXYYY() 已重新命名為 _GUICtrlXXX_YYY() 但不做任何功能上的變動，除了下面清單所說明的則外。

至於 XXX 等同於 "Combo" 和 "List" 這些都修改為 "ComboBox" 和 "ListBox"。他們可以在 GuiComboBox.au3 和 GuiListBox.au3 內找到，所以 #include 檔也將需要如此修改。

舊版 | 新版 | 註解
_GUICtrlComboAddDir | _GUICtrlComboBox_AddDir | 參數換回、以及 $vAttrib->$iAttrib。
_GUICtrlComboAutoComplete | _GUICtrlComboBox_AutoComplete | $sText, $s_WTitle, $s_WText 參數省略。
_GUICtrlComboFindString | _GUICtrlComboBox_FindString | 或是 _GUICtrlComboBox_FindStringExact >> 若 $fexact 被使用。
_GUICtrlComboGetList | _GUICtrlComboBox_GetList | $sDelimiter 支援使用 Opt。("GUIDataSeparatorChar")
_GUICtrlComboInsertString | _GUICtrlComboBox_InsertString | 換回參數值。
_GUICtrlComboSelectString | _GUICtrlComboBox_SelectString | 換回參數值。
_GUICtrlComboSetItemHeight | _GUICtrlComboBox_SetItemHeight | 換回參數值。

舊版 | 新版 | 註解
_GUICtrlEditFind | _GUICtrlEdit_Find | $hGui 參數移除。
_GUICtrlEditFindText |  | 『已過時淘汰不用』
_GUICtrlEditGetRECT | _GUICtrlEdit_GetRECT | 返回變更。
_GUICtrlEditGetSel | _GUICtrlEdit_GetSel | 返回變更。
_GUICtrlEditSetRECT | _GUICtrlEdit_SetRECT | 返回變更。

舊版 | 新版 | 註解
_GUICtrlIpAddressClear | _GUICtrlIpAddress_ClearAddress | 已重新命名。
_GUICtrlIpAddressDelete | _GUICtrlIpAddress_Destroy | 已重新命名。

舊版 | 新版 | 註解
_GUICtrlListAddDir | _GUICtrlListBox_Dir | 參數換回、以及 $vAttrib->$iAttrib。
_GUICtrlListAddItem | _GUICtrlListBox_AddString | 已重新命名。
_GUICtrlListClear | _GUICtrlListBox_ResetContent | 已重新命名。
_GUICtrlListCount | _GUICtrlListBox_GetCount | 已重新命名。
_GUICtrlListDeleteItem | _GUICtrlListBox_DeleteString | 已重新命名。
_GUICtrlListGetInfo | _GUICtrlListBox_GetListBoxInfo | 已重新命名。
_GUICtrlListGetItemRect | _GUICtrlListBox_GetItemRect | 返回變更。
_GUICtrlListGetLocale | _GUICtrlListBox_GetLocale | $fDec 省略。
_GUICtrlListGetSelState | _GUICtrlListBox_GetSel | 已重新命名。
_GUICtrlListInsertItem | _GUICtrlListBox_InsertString | 已重新命名。
_GUICtrlListSelectedIndex | _GUICtrlListBox_GetCurSel | 已重新命名。
_GUICtrlListSelectIndex | _GUICtrlListBox_SetCurSel | 已重新命名。
_GUICtrlListSelItemRange | _GUICtrlListBox_SelItemRange | 換回參數值。
_GUICtrlListSetSel | _GUICtrlListBox_SetSel | 換回參數值。

舊版 | 新版 | 註解
_GUICtrlListViewFindItem | _GUICtrlListView_FindInText | _GUICtrlListView_FindItem, _GUICtrlListView_FindNearest, _GUICtrlListView_FindParam, _GUICtrlListView_FindText
_GUICtrlListViewGetBackColor | _GUICtrlListView_GetBkColor | 已重新命名。
_GUICtrlListViewGetCheckedState | _GUICtrlListView_GetItemChecked | 已重新命名。
_GUICtrlListViewGetCurSel | _GUICtrlListView_GetNextItem | 已重新命名。
_GUICtrlListViewGetItemText | _GUICtrlListView_GetItemText | 項目可以是指令或 _GUICtrlListView_GetItemTextString。
_GUICtrlListViewGetNextItem | _GUICtrlListView_GetNextItem | $i_direction 參數變動。
_GUICtrlListViewGetSubItemsCount | _GUICtrlListView_GetColumnCount | 已重新命名。
_GUICtrlListViewInsertColumn | _GUICtrlListView_InsertColumn | 可選擇是否換回參數值。
_GUICtrlListViewInsertItem | _GUICtrlListView_InsertItem | _GUICtrlListView_SetItemText 欄位>1
_GUICtrlListViewSetColumnHeaderText | _GUICtrlListView_SetColumn | 換回參數值。
_GUICtrlListViewSetColumnOrder | _GUICtrlListView_SetColumnOrder | $order 必須分開使用。
_GUICtrlListViewSetCheckState | _GUICtrlListView_SetItemChecked | 已重新命名。
_GUICtrlListViewSetItemSelState | _GUICtrlListView_SetItemSelected | 或是 _GUICtrlListView_SetItemFocused。
_GUICtrlListViewSetItemText | _GUICtrlListView_SetItemText | 換回參數值。
_GUICtrlListViewSort | _GUICtrlListView_SimpleSort | 已重新命名。

舊版 | 新版 | 註解
_GUICtrlMonthCalGet1stDOW | _GUICtrlMonthCal_GetFirstDOWStr | 已重新命名。
_GUICtrlMonthCalGetColor | _GUICtrlMonthCal_GetColorArray | 已重新命名。
_GUICtrlMonthCalGetMinReqRECT | _GUICtrlMonthCalGetMinReqRECT | 已重新命名。
_GUICtrlMonthCalSetColor | _GUICtrlMonthCal_SetColor | 返回變更。
_GUICtrlMonthCalSet1stDOW | _GUICtrlMonthCal_SetFirstDOW | 已重新命名。
_GUICtrlMonthCalSetDelta | _GUICtrlMonthCal_SetMonthDelta | 已重新命名。

舊版 | 新版 | 註解
_GUICtrlStatusBarCreateProgress |  | 『已過時淘汰不用』
_GUICtrlStatusBarDelete | _GUICtrlStatusBar_Destroy | 已重新命名。
_GUICtrlStatusBarGetParts | _GUICtrlStatusBar_GetCount | 已重新命名。
_GUICtrlStatusBarGetTip | _GUICtrlStatusBar_GetTipText | 已重新命名。
_GUICtrlStatusBarGetUnicode | _GUICtrlStatusBar_GetUnicodeFormat | 已重新命名。
_GUICtrlStatusBarSetIcon | _GUICtrlStatusBar_SetIcon | 可選擇換回參數值。
_GUICtrlStatusBarSetParts | _GUICtrlStatusBar_SetParts | $hGUI 參數取消。
_GUICtrlStatusBarSetUnicode | _GUICtrlStatusBar_SetUnicodeFormat | 已重新命名。

舊版 | 新版 | 註解
_GUICtrlTabGetItemRECT | _GUICtrlTab_GetItemRect | 返回變更。

舊版 | 新版 | 註解
_GUICtrlTreeViewDeleteAllItems | _GUICtrlTreeView_DeleteAll | 已重新命名。
_GUICtrlTreeViewDeleteItem | _GUICtrlTreeView_Delete | $hGUI 參數移除。
_GUICtrlTreeViewExpand | _GUICtrlTreeView_Expand | 選擇性參數換回。
_GUICtrlTreeViewGetParentID | _GUICtrlTreeView_GetParentParam | 已重新命名。
_GUICtrlTreeViewGetTree | _GUICtrlTreeView_GetTree | $sSeparator 支援使用 Opt。("GUIDataSeparatorChar")


最近期版本 - 腳本修正補遺

最近期版本 - 腳本修正補遺 (Script Breaking Changes in Recent Versions)

此頁面包括了一系列近期版本更新以來所做的所有『重要』修正，我們幾乎可以十分肯定這些對存在的腳本足以造成重大影響。請在升級版本時詳細且小心地閱讀它們，若您已經不再參與測試版的發展，假設這些存在問題讓您非常介意的話，那麼您將有需要修改您的腳本。

2008年12月24日 - v3.3.0.0

AutoIt:

  • 對 Windows 9x 和 Windows NT 4.0 作業系統的支援已被正式移除。若您仍有需要的話，請使用 AutoIt v3.2.12.1 版。
  • @ProcessorArch 修改為 @OSArch 因為它很容易被混淆。
  • RegRead() 和 RegWrite() 不再保持使用 REG_BINARY 的十六進位字串類型 - 會強制使用原生二進位資料。

AutoItX:

  • 原始的 DLL 版本目前用的是 Unicode 專屬字串 (LPWSTR 和 LPCWTSR)。；若你仍舊須要 ANSI 字串那麼請繼續用v3.2.12.1 版。雖然在最早期的替代方案是使用 "wrapper" 函數簡單地進行 Unicode 及 ANSI 間的轉換，不過某些函數的選擇是有限的 (WinWait... 和 Send)，它們須有一個 ANSI 版，但是微軟官方無論如何是不會打算新增 ANSI 版本的，除非有很重要的需求才有可能。

UDFs:

  • N/A

2008年5月16日 - v3.2.12.0

AutoIt:

  • RunAsSet() 已經移除了。它使用新的：RunAs() 和 RunAsWait() 函數取而代之；它們不斷被擴充加強，擁有稍好一點的安全性 (仍然不建議您將重要的密碼存在腳本內) 和更多的功能機制。
  • 選項：RunErrorsFatal 已經移除了。
    Run(), RunWait(),
    ShellExecute()
    和 ShellExecuteWait() 現在全部都已設定好當無法執行應用程式的 @error 值。AutoIt 將不會在遇到某個無法執行的程式時，就拋出一個致命錯誤。
  • StdoutRead(),
    StderrRead() 和
    ConsoleRead() 皆已做過意義重大的改變。他們不會只是卡死在那兒，而是立即返回。參數同樣也已做過修改，要再讀取出計算參數是不太可能的。取值參數現已搬移為第二個，第三個參數現在可由您指定返回到二進位資料格式的資料 (預設是文字)；
    巨集 @extended 現在也擁有位元/字元的數量讀取能力了。
  • StdinWrite(),
    ConsoleWrite() 和
    ConsoleWriteError() 在送出二進位資料時也會有不同的行為，二進位資料會寫入 AS-IS 以取代先前轉換成字串的模式。還有，從這些函數返回的數值已改成寫入位元數，一般為 1 的數值被換掉了。
  • 已移除：ColorMode 選項 ( Opt() )。
  • 修復：Random(Min,Max,1)。先前這個永遠不會真正地返回 Max， 所以若 Max 狀況在一個腳本中反常地頻繁出現，就需要把它改一下。

UDFs:

(請查閱 此論壇 關於這些變動的細節和討論串。)

  • GUIConstants.au3 跟 GUIConstantsEx.au3 是一樣的。此意味許多使用進階 GUI 功能的腳本，則須要使用附加的 #include 陳述式聲明將包括前一版且不正確常數的檔案都 "include" 起來。
  • GUIDefaultConstants.au3 不存在了。您現在須使用 #include 針對您需要的控制類型聲明，對應各個常數檔。例如： ListBoxConstants.au3, ComboConstants.au3, EditConstants.au3 ...等等。
  • _ArrayCreate() 檔案們都移除了。但函數目前仍舊還在， 不過在往後的版本上可能移除。腳本可能須更新為使用群組初始化語法將之建立進 AutoIt 。

2007年11月25日 - v3.2.10.0

AutoIt

  • DllCall()：short_ptr, long_ptr, int_ptr 聲明類型。各別為使用 short*, long* 和 int*。

UDFs

  • _GUICtrlXXXYYY() 重新命名為 _GUICtrlXXX_YYY() 不做任何功能上的變動，請見：UDFs 重新命名。


特別聲明（Special Announcement）

關於此翻譯文件（About this doc）

此文件是由 yonken 根據 AutoIt v3 官方說明文件完全原創１翻譯。您瀏覽/分發/使用此文件即表示您已閱讀並同意接受本聲明。

因時間匆忙的緣故，少量翻譯內容並沒有完全保持和英文原文的一致，同時也有少量冗余陳述式被刪減，這些部分使用了本人認為讀者能夠了解的模式進行翻譯；
為便於讀者更好地了解文件的某些內容，本人在這些地方增加了些許（英文原文沒有的）註解/範例腳本/相關說明；
本人認為，官方文件不適合缺乏寫程式經驗的初學者作為教程使用，因為它的內容相對簡略，並假設使用者已有其它語言（比如BASIC）的寫程式基礎，希望讀者注意到這一點。

（注意：如果遇到無法開啟文件內嵌腳本的情況，請確認翻譯文件的同一目錄下是否有 Examples 資料夾（如果沒有請將翻譯文件放到 AutoIt 的安裝目錄下（比如 D:\AutoIt3））。）

分發許可（Permiton）

您可以隨意引用本翻譯文件的部分段落，此外您還可以在 同意並滿足了以下所有條件之後 對此翻譯文件（部分或全部內容）進行任意的分發、修改和/或發佈（且不必事先通知原翻譯者yonken）：

1、無論以何種形式發佈都必須在所發佈文件/頁面的顯眼部分註明原作者（yonken）及來源；
2、分發或發佈的文件不得出售，不能用於商業目的。

免責聲明（Disclaimer）

本人不對任何由於本翻譯文件造成的損害２承擔責任，對此翻譯文件錯誤之處的更正也並非本人的義務。

此翻譯文件是為了給國內（中國）的 AutoIt 腳本語言學習者（或使用者）提供一個中文的參考文件而作，本著共享與交流技術的精神，我已盡了最大的努力，但由於本人水平有限，加之官方文件中相關專業術語較多（況且官方的文件也有細節錯誤），翻譯錯誤及不當之處難免有之，如果您碰到這些錯誤（內含翻譯失誤、語法錯誤、排版及文字錯誤等），望與本人 聯繫（e-mail）。

我的 blog：http://yonken.blogcn.com

相關說明：１指所有翻譯頁面均完全由本人獨立思考並翻譯，未曾參考或抄襲任何其他人（或組織）的任何相關作品（或文章），如果您在其它未註明來源的文章中看到雷同的部分則必定是對方抄襲；２內含但不限於因本人翻譯錯誤而導致您對技術內容了解失誤所造成的損失（無論是何種形式的損失）。

This is the CHINESE SIMPLIFIED language edition of AutoIt (v3.1.1) helpfile.

Translated by yonken (Released: 2006-07-18)

Blog:http://yonken.blogcn.com

Contact me: yonken at 163 dot com


TESTTest-IE6.au3

 ; 範例腳本，示範如何使用 COM 事件函數
; 須至少為 AutoIt beta version 3.1.1.104 !
;
; 也可以檢視：http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/internetexplorer.asp

; 我們使用一種非常簡單的 GUI 視窗，來示範事件的結果
#include "GUIConstantsEx.au3"
$GUIMain=GUICreate ( "事件測試", 600,500 )
$GUIEdit=GUICtrlCreateEdit ( "測試記錄：" & @CRLF, 10, 20, 580, 400)
$GUIProg=GUICtrlCreateProgress ( 10, 5, 580, 10)
$GUIExit=GUICtrlCreateButton ( " 關閉 ", 250, 450, 80, 30)
GUISetState () ;顯示視窗

; 我們準備將 Internet Explorer 做為測試對象
$oIE=ObjCreate("InternetExplorer.Application.1")
With $oIE
.Visible=1
.Top = (@DesktopHeight-400)/2
.Height=400 ; 讓它的大小比我們的視窗還小一些
.Width=600
.Silent=1 ; 不顯示 IE 對話框
$IEWnd=HWnd(.hWnd) ; 記住視窗不予更動，以免使用者將視窗關閉
EndWith

; 我們選擇用 Internet Explorer 的溝通介面 'DWebBrowserEvents' 因為 IE 是示範對象
; 用諸如 Visual Studio 和 Adobe Acrobat Reader 這類的編輯器修改，如您已將 IE-外掛 套件安裝過的話，
; AutoIt 可能將無法自行找到目前使用的介面
$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")
if @error then
Msgbox(0,"AutoIt COM 測試", _
"ObjEvent：無法使用事件介面 'DWebBrowserEvents' 錯誤碼：" & hex(@error,8))
exit
endif

; 現在我們開始來示範載入網頁
$URL = "http://www.AutoItScript.com/"
$oIE.Navigate( $URL )
sleep(1000) ; 給它一些時間載入網頁

GUISwitch ( $GUIMain ) ; 換回我們所用的視窗，避免 IE 讓焦點失焦

; 等待使用者關閉視窗
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE or $msg = $GUIExit Then ExitLoop
Wend

$EventObject.Stop ; 告訴 IE 我們不想要再收到事件了
$EventObject=0 ; 結束 Event 物件
If WinExists($IEWnd) then $oIE.Quit ; 關閉 IE 視窗
$oIE=0 ; 將 IE 從記憶體區塊中移除 (並非必要)

GUIDelete () ; 移除 GUI 視窗

exit ; 示範結束

; 一些 Internet Explorer 的事件函數
; 也可以檢視：http://msdn.microsoft.com/workshop/browser/webbrowser/reference/objects/webbrowser.asp

Func IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
; 請注意：這邊所說的宣告跟 MSDN 網站那種是不一樣的
GUICtrlSetData ( $GUIEdit, "BeforeNavigate 函數：" & $URL & " 旗標：" & $Flags & " tgframe函數：" & $TargetFrameName & " 載入後的時間： " & $PostData & " 檔頭(Hdrs)：" & $Headers & " 取消事件：" & $Cancel & @CRLF , "append" )
EndFunc

Func IEEvent_ProgressChange($Progress,$ProgressMax)
If $ProgressMax > 0 Then
GUICtrlSetData($GUIProg, ($Progress * 100) / $ProgressMax )
EndIf
EndFunc

Func IEEvent_StatusTextChange($Text)
GUICtrlSetData ( $GUIEdit, "IE 修改的狀態文字： " & $Text & @CRLF , "append" )
EndFunc

Func IEEvent_PropertyChange( $szProperty)
GUICtrlSetData ( $GUIEdit, "IE 修改的資源內容：" & $szProperty & @CRLF , "append" )
EndFunc

Func IEEvent_DownloadComplete()
GUICtrlSetData ( $GUIEdit, "IE 完成的瀏覽動作：" & @CRLF , "append" )
EndFunc

Func IEEvent_NavigateComplete($URL)
; 請注意：這邊所說的宣告跟 MSDN 網站那種是不一樣的
GUICtrlSetData ( $GUIEdit, "IE 完成的 URL 載入：" & $URL & @CRLF , "append" )
EndFunc

Func IEEvent_($EventName)
; 這是一個選擇性事件，用來擷取未定義的事件
; 參數內含事件被稱呼的名稱
GUICtrlSetData ( $GUIEdit, "無法擷取的事件：" & $EventName & @CRLF , "append" )
EndFunc


>>>> 視窗訊息 <<<<
標題：	WinZip v12 中文化 v1.1 安裝
類型：	#32770
位置：	324, 252
大小：	503, 360
樣式：	0x94CA0844
ExStyle：0x00010100
控制碼:	0x006A0748

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	2
ClassnameNN：	Button2
進階資訊 (類型)：	[類型：Button; 實例物件：2]
ID：	1
文字：	下一步(&N) >
位置：	324, 302
大小：	75, 21
點選控制座標：	59, 4
樣式：	0x50010001
ExStyle：0x00000004
控制碼: 0x006107F0

>>>> 滑鼠訊息 <<<<
位置：	710, 582
游標 ID：2
色彩：	0xEDDDDC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
下一步(&N) >
取消(&C)
歡迎使用 WinZip v12 中文化 v1.1 安裝精靈
這個精靈將指引你完成 WinZip v12 中文化 v1.1 的安裝進程。

在開始安裝之前，建議先關閉其他所有應用程式。這將允許\\「安裝程式」更新指定的系統檔案，而不需要重新啟動你的電腦。

按一下 [下一步(N)] 繼續。

>>>> 隱藏文字訊息 <<<<
Nullsoft Install System v2.36
Nullsoft Install System v2.36


>>>> 視窗訊息 <<<<
標題：	WinZip v12 中文化 v1.1 安裝
類型：	#32770
位置：	324, 252
大小：	503, 360
樣式：	0x94CA0844
ExStyle：0x00010100
控制碼:	0x00C70704

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	2
ClassnameNN：	Button2
進階資訊 (類型)：	[類型：Button; 實例物件：2]
ID：	1
文字：	安裝(&I)
位置：	324, 302
大小：	75, 21
點選控制座標：	26, 1
樣式：	0x50010001
ExStyle：0x00000004
控制碼: 0x00B3077C

>>>> 滑鼠訊息 <<<<
位置：	677, 579
游標 ID：2
色彩：	0xB69891

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
< 上一步(&P)
安裝(&I)
取消(&C)
Nullsoft Install System v2.36
Nullsoft Install System v2.36
安裝 / 還原
安裝/還原
 備份
請注意：勾選 "備份" 選項，會佔用您一些磁碟空間，但可還原成英文版。
安裝
還原 上一次備份

>>>> 隱藏文字訊息 <<<<


>>>> 視窗訊息 <<<<
標題：	WinZip v12 中文化 v1.1 安裝
類型：	#32770
位置：	324, 252
大小：	503, 360
樣式：	0x94CA0844
ExStyle：0x00010100
控制碼:	0x0108051C

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	2
ClassnameNN：	Button2
進階資訊 (類型)：	[類型：Button; 實例物件：2]
ID：	1
文字：	下一步(&N) >
位置：	324, 302
大小：	75, 21
點選控制座標：	51, 5
樣式：	0x50010001
ExStyle：0x00000004
控制碼: 0x001105BC

>>>> 滑鼠訊息 <<<<
位置：	702, 583
游標 ID：2
色彩：	0x634513

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
< 上一步(&P)
下一步(&N) >
取消(&C)
Nullsoft Install System v2.36
Nullsoft Install System v2.36
安裝完成
安裝程式已成功地執行完成。
已完成

>>>> 隱藏文字訊息 <<<<
顯示細節(&D)


>>>> 視窗訊息 <<<<
標題：	WinZip v12 中文化 v1.1 安裝
類型：	#32770
位置：	324, 252
大小：	503, 360
樣式：	0x94CA0844
ExStyle：0x00010100
控制碼:	0x0108051C

>>>> 控制項訊息 <<<<
類型：
實例物件：
ClassnameNN：
進階資訊 (類型)：
ID：
文字：
位置：
大小：
點選控制座標：
樣式：
ExStyle：
控制碼: 0x001105BC

>>>> 滑鼠訊息 <<<<
位置：	616, 264
游標 ID：2
色彩：	0xCDBFAC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
< 上一步(&P)
完成(&F)
取消(&C)
正在完成 WinZip v12 中文化 v1.1 安裝精靈
WinZip v12 中文化 v1.1 已安裝在你的系統。
按一下 [完成(F)] 關閉此精靈。

>>>> 隱藏文字訊息 <<<<
Nullsoft Install System v2.36
Nullsoft Install System v2.36
安裝完成
安裝程式已成功地執行完成。


>>>> 視窗訊息 <<<<
標題：	WinZip?12.0 Setup
類型：	#32770
位置：	367, 178
大小：	413, 134
樣式：	0x94C000CC
ExStyle：0x00050101
控制碼:	0x001A0162

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	1
ClassnameNN：	Button1
進階資訊 (類型)：	[類型：Button; 實例物件：1]
ID：	1
文字：	&Setup
位置：	323, 10
大小：	75, 23
點選控制座標：	42, 6
樣式：	0x50010001
ExStyle：0x00000004
控制碼: 0x0018022C

>>>> 滑鼠訊息 <<<<
位置：	735, 218
游標 ID：2
色彩：	0xECDDDB

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
&Setup
Cancel
&Info...
Thank you for your interest in WinZip!

Click the "Setup" button to install WinZip 12.0.

>>>> 隱藏文字訊息 <<<<


>>>> 視窗訊息 <<<<
標題：	WinZip Setup - Google Toolbar
類型：	#32770
位置：	261, 216
大小：	444, 368
樣式：	0x94C800C4
ExStyle：0x00010101
控制碼:	0x001601C0

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	2
ClassnameNN：	Button2
進階資訊 (類型)：	[類型：Button; 實例物件：2]
ID：	512
文字：	&Do not install the Google Toolbar.
位置：	33, 211
大小：	182, 16
點選控制座標：	147, 4
樣式：	0x50010009
ExStyle：0x00000004
控制碼: 0x00260212

>>>> 滑鼠訊息 <<<<
位置：	444, 455
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
You can also choose to install the optional and free Google Toolbar from Google, Inc.
The Google Toolbar allows you to:
*  Search the Web from any site.
*  Eliminate annoying pop-up ads.
*  Fill out Web forms instantly with AutoFill.
Choose whether you want the free Google Toolbar installed, then click Continue.
&Install the Google Toolbar for Firefox.
&Do not install the Google Toolbar.
You can remove the Google Toolbar at any time.
By installing the Google Toolbar, you agree to abide by Google's Terms of Use and Privacy Policy.
Terms of Use
Privacy Policy
Continue

>>>> 隱藏文字訊息 <<<<


>>>> 視窗訊息 <<<<
標題：	WinZip 12.0 Setup
類型：	MsiDialogCloseClass
位置：	323, 238
大小：	506, 387
樣式：	0x14CA0000
ExStyle：0x00040100
控制碼:	0x0023022C

>>>> 控制項訊息 <<<<
類型：	Static
實例物件：	4
ClassnameNN：	Static4
進階資訊 (類型)：	[類型：Static; 實例物件：4]
ID：	1444
文字：	WinZip features include:

* Quick and easy zip and unzip for Zip files
* Smaller Zip files using best method compression
* Convenient support for RAR, 7Z, ISO and more
* E-mail support, including Zip and E-Mail from Explorer
* 128-bit and 256-bit AES encryption
* Photo compression with JPEG compression technology
* Internal image viewer for zipped images (Pro only)
* Direct zip from camera (Pro only)
* Automation of repetitive zipping tasks (Pro only)

Click Next to continue.
位置：	182, 77
大小：	304, 224
點選控制座標：	186, 95
樣式：	0x50020000
ExStyle：0x00000020
控制碼: 0x004E052A

>>>> 滑鼠訊息 <<<<
位置：	694, 434
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
&Next >
< &Back
Cancel
Welcome to the WinZip 12.0 Installation Wizard
WinZip features include:

* Quick and easy zip and unzip for Zip files
* Smaller Zip files using best method compression
* Convenient support for RAR, 7Z, ISO and more
* E-mail support, including Zip and E-Mail from Explorer
* 128-bit and 256-bit AES encryption
* Photo compression with JPEG compression technology
* Internal image viewer for zipped images (Pro only)
* Direct zip from camera (Pro only)
* Automation of repetitive zipping tasks (Pro only)

Click Next to continue.
ExitImage

>>>> 隱藏文字訊息 <<<<


>>>> 視窗訊息 <<<<
標題：	WinZip 12.0 Setup
類型：	MsiDialogCloseClass
位置：	323, 238
大小：	506, 387
樣式：	0x14CA0000
ExStyle：0x00040100
控制碼:	0x00350162

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	3
ClassnameNN：	Button3
進階資訊 (類型)：	[類型：Button; 實例物件：3]
ID：	1035
文字：	I &accept the license agreement
位置：	161, 272
大小：	266, 17
點選控制座標：	114, 8
樣式：	0x50012004
ExStyle：0x00000000
控制碼: 0x00080688

>>>> 滑鼠訊息 <<<<
位置：	601, 542
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
I &do not accept the license agreement
I &accept the license agreement
&Next >
< &Back
Cancel
WinZip License Agreement
WinZip License
Registered Version
This registered license is for users who have obtained from WinZip Computing a valid registration code for WinZip? 12. If you have not obtained a valid registration code for WinZip? 12, see the section titled WinZip Evaluation License.
Your Agreement to this License
This License only applies to the executable code for the English-language version of the WinZip 12 software and any accompanying distributable files, data and materials ("WinZip"). You should carefully read the following terms and conditions before using, installing, copying, or distributing WinZip. Unless otherwise agreed in a writing signed by an authorized representative of WinZip Computing, S.L. ("WinZip Computing"), your use, installation, copying, or distribution of WinZip indicates your acceptance of this agreement ("License"). You understand and agree that the terms and conditions of this License are the only terms and conditions applicable to your purchase of this License or use of WinZip and any additional or different terms specified, referenced, and/or incorporated by any document provided by you or on your behalf are hereby rejected by WinZip Computing.
All registered copies of WinZip allow access to WinZip's Standard software features. Copies of WinZip registered using a Pro registration code also will allow access to the additional WinZip Pro software features. For a complete description of WinZip's Standard and Pro features, refer to www.winzip.com.
Please read the license terms below. If you do not agree to all of the terms and conditions of this License, then do not use, install, copy, or distribute WinZip. In addition, if you paid a license fee to WinZip Computing or an authorized WinZip Computing reseller, you may return to WinZip Computing or the reseller, as applicable, a copy of the registration code, registration file, or activation code, if any, and a signed Affidavit of De-Installation and Non-Use in the form set forth on the WinZip.com website, within thirty (30) days after purchase, for a full refund of the license fee.
The terms and conditions of this License describe the permitted use and user(s) of each Licensed Copy of WinZip.
Scope of License
Subject to the terms of this License, WinZip Computing grants to you, for each Licensed Copy, a limited, non-exclusive, non-transferable, royalty-free, license to install and use WinZip, solely for your personal or internal business purposes.
If you have purchased a single-user license you have the right to install and use a single copy of WinZip on one computer or workstation for non-simultaneous use by one or more persons and install a second copy of WinZip on another computer or workstation for the exclusive use of the person who is the primary user of the first copy of WinZip. If you have purchased a multi-user license you have the right to install or access a copy of WinZip on multiple computers up to the number of "Licensed Copies" that you have acquired, as determined below.
You may not give, transfer or sell copies of WinZip to your customer(s), or any third party, in whole or in part, nor include copies of WinZip, in whole or in part, in, or with, products you sell.
Each Licensed Copy may be accessed through a network, provided that you have purchased a Licensed Copy for each workstation that will access WinZip through the network. For instance, if 8 different workstations will access WinZip on the network, you must purchase 8 Licensed Copies of WinZip, regardless of whether the 8 workstations will access WinZip at different times, or concurrently.
For purposes of this License,
1.	if you have paid for a Single-User Standard License and received a valid Standard Registration Code, you are deemed to have a single "Licensed Copy" of WinZip, and are authorized to access all software features, except those designated as Pro features;
2.	if you have paid for a Single-User Pro License and received a valid Pro Registration Code, you are deemed to have a single "Licensed Copy" of WinZip, and are authorized to access all software features, including those designated as Pro features;
3.	if you have paid for a Multi-User Standard License and received a valid Standard Registration File or Code, you or your organization are deemed to have acquired a number of "Licensed Copies" of WinZip equal to the number of copies indicated in the documents issued by WinZip Computing when granting the license and are authorized to access all software features, except those designated as Pro features;
4.	if you have paid for a Multi-User Pro License and received a valid Pro Registration File or Code, you or your organization are deemed to have acquired a number of "Licensed Copies" of WinZip equal to the number of copies indicated in the documents issued by WinZip Computing when granting the license, and are authorized to access all software features, including those designated as Pro features.
WinZip includes WinZip Self-Extractor Personal Edition, which may be used to create an unlimited number of freely distributable, royalty-free, self-extracting Zip files. These self-extracting Zip files contain, among other things, a portion of WinZip Self-Extractor Personal Edition, including copyrighted software, proprietary notices, and identifying information (the "Extraction Software"). You may not alter or modify the Extraction Software, nor permit anyone else to do so.
If you have purchased a Multi-User Standard License or Multi-User Pro License, you are responsible for duplicating and distributing WinZip for use in accordance with the terms of this License, and for monitoring the number of copies of WinZip installed and used by your organization and you agree that upon request from WinZip Computing or WinZip Computing's authorized representative, you will within thirty (30) days fully document and certify the number of copies of WinZip you have installed. Under a Multi-User License, you may install WinZip only on computers operated by, or on behalf of, your organization.  Subject to United States export restrictions referenced below, other applicable laws and regulations, including the laws of countries other than the United States of America, and the other limitations set forth in this License, you may install and access Licensed Copies of WinZip on computers located anywhere in the world.  For more information regarding multi-user licenses, please visit the WinZip Computing website at www.winzip.com.
All rights of any kind in WinZip which are not expressly granted in this License are entirely and exclusively reserved to and by WinZip Computing. WinZip is protected by the United States copyright laws and other applicable national and international laws and treaties.
You may use, install and distribute WinZip solely as expressly provided in this License. You may not rent, lease, loan, sublicense, modify, translate, reverse engineer, decompile, disassemble, or create derivative works based on, WinZip, in whole or in part, nor permit anyone else to do so. You may not make access to WinZip available to others in connection with a service bureau, application service provider, or similar business, nor permit anyone else to do so. The license granted hereunder includes no rights in or to the source code version of WinZip.
Warranty Disclaimers and Liability Limitations
WinZip, and any and all accompanying software, files, data and materials, are distributed and provided "AS IS" and with no warranties of any kind, whether express or implied, including, without limitation, any warranty of merchantability or fitness for a particular purpose. Neither WinZip Computing nor any of its affiliates or licensors warrant, guarantee, or make any representations regarding the use of, or the results of the use of, WinZip. Neither WinZip Computing nor any of its affiliates or licensors warrants that the operation of WinZip will be uninterrupted or error-free, or that the use of any passwords and/or encryption features will be effective in preventing the unintentional disclosure of information contained in any file. You acknowledge that good data processing procedure dictates that any program, including WinZip, must be thoroughly tested with non-critical data before there is any reliance on it, and you hereby assume the entire risk of all use of the copies of WinZip covered by this License. This disclaimer of warranty constitutes an essential part of this License.
Except to the extent expressly prohibited by applicable statutes, WinZip Computing, its affiliates or licensors shall not be liable for any damage or financial loss arising out of the use of, or inability to use, WinZip. Any liability of WinZip Computing, its affiliates or licensors will be limited exclusively to refund of any license or registration fee paid to WinZip Computing. Except to the extent expressly prohibited by applicable statutes, in no event shall WinZip Computing, or its principals, shareholders, officers, employees, affiliates, licensors, contractors, subsidiaries, or parent organizations, be liable for any direct, indirect, incidental, consequential, special, or punitive damages whatsoever relating to the use of WinZip, or to your relationship with, WinZip Computing, its affiliates or licensors (including, without limitation, loss or disclosure of data or information, loss of profit, revenue, business opportunity or business advantage, or business interruption), whether based upon a claim or action of contract, warranty, negligence, strict liability, contribution, indemnity, or any other legal theory or cause of action, even if advised of the possibility of such damages.
In addition, in no event does WinZip Computing authorize you or anyone else to use WinZip in applications or systems where WinZip's failure to perform can reasonably be expected to result in a significant physical injury, or in loss of property, or loss of life. Any such use is entirely at your own risk, and you agree to hold WinZip Computing, its affiliates or licensors harmless from any and all claims or losses relating to such unauthorized use.
U.S. Government End Users
WinZip is a "commercial item" as that term is defined at 48 C.F.R. 2.101. Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4, all U.S. Government end users acquire WinZip and any related documentation with only those rights set forth in this License.
Export Restrictions
WinZip is subject to certain export restrictions of the United States Government. If you are (a) in a country to which export from the United States is restricted for anti-terrorism reasons, or a national of any such country, wherever located, (b) in a country to which the United States has embargoed or restricted the export of goods or services, or a national of any such country, wherever located, or (c) a person or entity who has been prohibited from participating in United States export transactions by any agency of the United States Government, then you may not install, download, access, use, or license WinZip. By accepting this License, you warrant and represent to WinZip Computing that (1) you do not match the criteria set forth in (a), (b), or (c) above, (2) that you will not export or re-export WinZip to any country, person, or entity subject to U.S. export restrictions, including those persons and entities that match the criteria set forth in (a), (b), or (c) above, and (3) that neither the United States Bureau of Industry and Security, nor any other U.S. federal agency, has suspended, revoked, or denied your export privileges.
General
WinZip, including, without limitation, the information included in its accompanying distributable files, data and materials and any activation code and registration code files or information, and the know-how embodied in WinZip, is confidential and trade secret information (the "Proprietary Information") that is proprietary to and solely owned or licensed by WinZip Computing, together with all related copyrights and trademarks relating thereto. You agree to maintain the Proprietary Information in strictest confidence for the benefit of WinZip Computing and its licensors. You shall not sell, license, publish, display, distribute, disclose, or otherwise make available or allow to be made available the Proprietary Information, including, without limitation, any activation codes, registration codes, or registration files, to any third party nor use such Proprietary Information except as authorized by this License. The obligations under this paragraph shall survive any termination or cancellation of the License.
This License is the complete statement of the agreement between the parties on the subject matter, and merges and supersedes all other or prior understandings, purchase orders, agreements, and arrangements.
You may not assign, sublicense, subcontract, or otherwise transfer any of your rights or obligations or delegate any of your duties under this License, in whole or in part, without the prior written consent of WinZip Computing. Notwithstanding anything to the contrary, any assignment of this License or any rights or obligations hereunder is contingent upon the intended assignee agreeing to be bound by the terms of this License and all responsibilities and obligations of the assignor hereunder.
This License shall be governed by the laws of the State of Connecticut, without regard to Connecticut choice-of-law rules. Exclusive jurisdiction and venue for all matters relating to this License shall be in courts and fora located in the State of Connecticut, and you consent to such jurisdiction and venue.
There are no third-party beneficiaries of any promises, obligations, or representations made by WinZip Computing herein.
Any waiver by WinZip Computing of any violation of this License by you shall not constitute, nor contribute to, a waiver by WinZip Computing of any other or future violation by you of the same provision, or any other provision, of this License.
If any part of this License or the application thereof to any person or circumstance is for any reason held invalid or unenforceable, it shall be deemed severable, and the validity of the remainder of this License, or the applications of such provision to other persons or circumstances, shall not be affected thereby.

WinZip License
Evaluation Version
This license applies to the evaluation version of WinZip?. If you do not have an evaluation version of WinZip, see the section titled WinZip Registered License.
Your Agreement to this License
This License only applies to the executable code for the English-language version of the WinZip 12 software and any accompanying distributable files, data and materials ("WinZip"). You should carefully read the following terms and conditions before using, installing, copying, distributing, or transmitting this software. By using, installing, copying, distributing, or transmitting WinZip without registering your copy of WinZip, you agree to all of the terms of this evaluation license agreement ("License"). Refer to www.winzip.com for information about pricing, multi-user licensing, and registration options.
All registered copies of WinZip allow access to WinZip's Standard software features. Copies of WinZip registered using a Pro registration code will also allow access to the additional WinZip Pro software features. For a complete description of WinZip's Standard and Pro features, refer to www.winzip.com.
Please read the license terms below. If you do not agree to all of the terms and conditions of this License, then do not use, install, copy, distribute, or transmit WinZip.
Scope of License
This is not free software. Subject to the terms below, you are hereby licensed by WinZip Computing, S.L. ("WinZip Computing") to use for evaluation purposes only one (1) copy of WinZip, on one (1) computer or workstation, without charge, for a period of 45 days after you first install WinZip on any computer or workstation. If you want to use this software after the 45-day evaluation period, you must acquire from WinZip Computing for a fee a single-user license or multi-user license for WinZip. Refer to www.winzip.com for information about Standard and Pro license pricing, multi-user licensing, and ordering options. Use of WinZip after the expiration of the 45-day evaluation period without acquiring such a license from WinZip Computing is outside the scope of this License and a violation of U.S. and international copyright laws.
Subject to all of the terms of this License, you may, without making any payment to WinZip Computing:
a.	give exact copies of WinZip personally and without charge of any kind to anyone for evaluation purposes only, subject to the terms of this License, using tangible media of any kind or via e-mail (but not in a bulk mailing or through unsolicited bulk e-mails);
b.	distribute exact copies of WinZip for evaluation purposes only, subject to the terms of this License, if done exclusively by allowing downloads through the public Internet and without charge of any kind; and
c.	make as many exact copies of WinZip as you wish, for purposes of distribution as described in (a) and (b) above.
For purposes of the foregoing, an "exact copy" of WinZip means a file that is identical, at the time you create the copy, to the WinZip distribution file available at http://www.winzip.com.
You are specifically prohibited from charging, or requesting donations, for any distributed copies, however made, or from distributing such copies with other products of any kind, commercial or otherwise, without prior written permission from WinZip Computing. Also, you are specifically prohibited from charging, or requesting donations, for providing access to any hyperlink or other method that allows a user to create or transfer electronically copies of WinZip.
WinZip Computing reserves the right to revoke any or all distribution rights at any time, for any or no reason.
Self-extracting Zip files created by WinZip's Self-Extractor Personal Edition component contain, among other things, a portion of WinZip Self-Extractor Personal Edition, including copyrighted software, proprietary notices, and identifying information (this portion is the "Extraction Software"). You may not alter or modify the Extraction Software, nor give anyone permission to do so. Under no circumstances are you licensed to distribute self-extracting Zip files created by the evaluation version of WinZip Self-Extractor.
All rights of any kind in WinZip which are not expressly granted in this License are entirely and exclusively reserved to and by WinZip Computing. You may use WinZip solely as expressly provided in this License. WinZip is protected by the United States copyright laws and other applicable national and international laws and treaties. You may not rent, lease, sublicense, modify, translate, reverse engineer, decompile, disassemble, or create derivative works based on, WinZip, in whole or in part, nor permit anyone else to do so. You may not make access to WinZip available to others in connection with a service bureau, application service provider, or similar business, nor permit anyone else to do so. The license granted hereunder includes no rights in or to the source code version of WinZip.
WinZip includes a user selectable feature to check for software updates. By selecting the option to check for updates automatically, or manually invoking the feature, you are consenting to allow WinZip Computing to download and install updated non-executable files (such as screen files) to your computer without further notice. Before WinZip downloads and installs any updated executable files, WinZip will request your express consent.
Warranty Disclaimers and Liability Limitations
WinZip, and any and all accompanying software, files, data and materials, are distributed and provided "AS IS" and with no warranties of any kind, whether express or implied, including, without limitation, any warranty of merchantability or fitness for a particular purpose. Neither WinZip Computing nor any of its affiliates or licensors warrant, guarantee, or make any representations regarding the use of, or the results of the use of, WinZip. Neither WinZip Computing nor any of its affiliates or licensors warrants that the operation of WinZip will be uninterrupted or error-free, or that the use of any passwords and/or encryption features will be effective in preventing the unintentional disclosure of information contained in any file. You acknowledge that good data processing procedure dictates that any program, including WinZip, must be thoroughly tested with non-critical data before there is any reliance on it, and you hereby assume the entire risk of all use of the copies of WinZip covered by this License. This disclaimer of warranty constitutes an essential part of this License.
Except to the extent expressly prohibited by applicable statutes, WinZip Computing, its affiliates or licensors shall not be liable for any damage or financial loss arising out of the use of, or inability to use, WinZip. Any liability of WinZip Computing, its affiliates or licensors will be limited exclusively to refund of any license or registration fee paid to WinZip Computing. Except to the extent expressly prohibited by applicable statutes, in no event shall WinZip Computing, or its principals, shareholders, officers, employees, affiliates, licensors, contractors, subsidiaries, or parent organizations, be liable for any direct, indirect, incidental, consequential, special, or punitive damages whatsoever relating to the use of WinZip, or to your relationship with WinZip Computing, its affiliates or licensors (including, without limitation, loss or disclosure of data or information, loss of profit, revenue, business opportunity or business advantage, or business interruption), whether based upon a claim or action of contract, warranty, negligence, strict liability, contribution, indemnity, or any other legal theory or cause of action, even if advised of the possibility of such damages.
In addition, in no event does WinZip Computing authorize you or anyone else to use WinZip in applications or systems where WinZip's failure to perform can reasonably be expected to result in a significant physical injury, or in loss of property, or loss of life. Any such use is entirely at your own risk, and you agree to hold WinZip Computing, its affiliates or licensors harmless from any and all claims or losses relating to such unauthorized use.
U.S. Government End Users
WinZip is a "commercial item" as that term is defined at 48 C.F.R. 2.101. Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4, all U.S. Government end users acquire WinZip and any related documentation with only those rights set forth in this License.
Export Restrictions
WinZip is subject to certain export restrictions of the United States Government. If you are (a) in a country to which export from the United States is restricted for anti-terrorism reasons, or a national of any such country, wherever located, (b) in a country to which the United States has embargoed or restricted the export of goods or services, or a national of any such country, wherever located, or (c) a person or entity who has been prohibited from participating in United States export transactions by any agency of the United States Government, then you may not install, download, access, use, or license WinZip. By accepting this License, you warrant and represent to WinZip Computing that (1) you do not match the criteria set forth in (a), (b), or (c) above, (2) that you will not export or re-export WinZip to any country, person, or entity subject to U.S. export restrictions, including those persons and entities that match the criteria set forth in (a), (b), or (c) above, and (3) that neither the United States Bureau of Industry and Security, nor any other U.S. federal agency, has suspended, revoked, or denied your export privileges.
Termination
Immediately upon expiration of the 45-day evaluation period for the license granted hereunder, you shall immediately discontinue any and all use of WinZip and you shall within ten (10) days delete from your computer(s) all electronic copies of WinZip, including all or any part thereof. All provisions of this License that by their nature are intended to survive the expiration of the license granted hereunder shall survive and remain in full force and effect.
Indemnification
At your own expense, you shall indemnify, defend, and hold harmless WinZip Computing, its affiliates and licensors, and their directors, officers, trustees, shareholders, employees, agents, successors and assigns from and against any and all claims, expenses, losses, damages, costs, liabilities and judgments, including without limitation reasonable attorneys' fees and expenses, arising out of or relating to any claim resulting from or related to: (i) any use by you of WinZip other than as expressly allowed by this License or in a manner inconsistent with any accompanying documentation; (ii) any breach of this License by you; or (iii) any violation of applicable law by you, your directors, officers, trustees, shareholders, employees, subsidiaries, agents, successors and assigns.
General
WinZip, including, without limitation, the information included in its accompanying distributable files, data and materials and any related activation code and registration code files or information, and the know-how embodied in WinZip, is confidential and trade secret information (the "Proprietary Information") that is proprietary to and solely owned or licensed by WinZip Computing, together with all related copyrights and trademarks relating thereto. You agree to maintain the Proprietary Information in strictest confidence for the benefit of WinZip Computing and its licensors. You shall not sell, license, publish, display, distribute, disclose, or otherwise make available or allow to be made available the Proprietary Information, including, without limitation, any activation codes or registration code files, to any third party nor use such Proprietary Information except as authorized by this License. The obligations under this paragraph shall survive any termination or cancellation of the License.
This License is the complete statement of the agreement between the parties on the subject matter, and merges and supersedes all other or prior understandings, purchase orders, agreements, and arrangements.
This License shall be governed by the laws of the State of Connecticut, without regard to Connecticut choice-of-law rules. Exclusive jurisdiction and venue for all matters relating to this License shall be in courts and fora located in the State of Connecticut, and you consent to such jurisdiction and venue.
There are no third-party beneficiaries of any promises, obligations, or representations made by WinZip Computing herein.
Any waiver by WinZip Computing of any violation of this License by you shall not constitute, nor contribute to, a waiver by WinZip Computing of any other or future violation by you of the same provision, or any other provision, of this License.
You acknowledge and agree that monetary damages alone would not be an adequate remedy in the event of a material breach by you of your obligations or agreements under this License and that, in such event, WinZip Computing or any of its affiliates shall be entitled to injunctive relief to require you to comply with its obligations hereunder. Any remedy available under this License shall be cumulative and not exclusive of any other remedy available WinZip Computing or any of its affiliates under this License, at law or in equity.
If any part of this License or the application thereof to any person or circumstance is for any reason held invalid or unenforceable, it shall be deemed severable, and the validity of the remainder of this License, or the applications of such provision to other persons or circumstances, shall not be affected thereby.

WinZip? Copyright ? 1991-2008 by WinZip International LLC.
All rights reserved.

You must agree with the license agreement below to proceed.
License Agreement
 WinZip 12.0
top16

>>>> 隱藏文字訊息 <<<<
&Reset


>>>> 視窗訊息 <<<<
標題：	WinZip 12.0 Setup
類型：	MsiDialogCloseClass
位置：	323, 238
大小：	506, 387
樣式：	0x14CA0000
ExStyle：0x00040100
控制碼:	0x003101DE

>>>> 控制項訊息 <<<<
類型：	Static
實例物件：	6
ClassnameNN：	Static6
進階資訊 (類型)：	[類型：Static; 實例物件：6]
ID：	1601
文字：	You can choose not to install WinZip 12.0 by clicking Cancel to exit the WinZip Installation Wizard.
位置：	40, 133
大小：	416, 40
點選控制座標：	257, 26
樣式：	0x50020000
ExStyle：0x00000000
控制碼: 0x00130660

>>>> 滑鼠訊息 <<<<
位置：	623, 421
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
&Next >
< &Back
Cancel
Select a folder where the application will be installed.
Destination Folder
top16
Destination Folder
You can choose not to install WinZip 12.0 by clicking Cancel to exit the WinZip Installation Wizard.
 WinZip 12.0
The WinZip Installation Wizard will install the files for WinZip 12.0 in the following folder.

To install into a different folder, click the Browse button, and select another folder.
B&rowse
C:\Program Files\WinZip\

>>>> 隱藏文字訊息 <<<<


>>>> 視窗訊息 <<<<
標題：	WinZip 12.0 Setup
類型：	MsiDialogCloseClass
位置：	323, 238
大小：	506, 387
樣式：	0x14CA0000
ExStyle：0x00040100
控制碼:	0x002B01AC

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	5
ClassnameNN：	Button5
進階資訊 (類型)：	[類型：Button; 實例物件：5]
ID：	1628
文字：	Include &Quick Pick in the taskbar tray.
位置：	85, 164
大小：	396, 18
點選控制座標：	38, 7
樣式：	0x50032002
ExStyle：0x00000000
控制碼: 0x000F0648

>>>> 滑鼠訊息 <<<<
位置：	449, 433
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
&Next >
< &Back
Cancel
Check the items you want installed:

Recommended setting for first-time users: check all boxes.
&Explorer shell extension.
Include &Quick Pick in the taskbar tray.
Include WinZip in the &Start menu.
Include WinZip on the &desktop.
 WinZip 12.0
top16
Explorer Configuration
The following information is used by WinZip 12.0.

>>>> 隱藏文字訊息 <<<<


>>>> 視窗訊息 <<<<
標題：	WinZip 12.0 Setup
類型：	MsiDialogCloseClass
位置：	323, 238
大小：	506, 387
樣式：	0x14CA0000
ExStyle：0x00040100
控制碼:	0x00370552

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	6
ClassnameNN：	Button6
進階資訊 (類型)：	[類型：Button; 實例物件：6]
ID：	1779
文字：	&Optimize for best compression
位置：	41, 149
大小：	273, 17
點選控制座標：	134, 3
樣式：	0x50012004
ExStyle：0x00000000
控制碼: 0x00920530

>>>> 滑鼠訊息 <<<<
位置：	501, 414
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
&Next >
< &Back
Cancel
&Legacy compression
&Optimize for best compression
Please select the default compression method for WinZip.
Default Compression Method

This default can be changed at any time in the Miscellaneous tab of WinZip�s Configuration Options. You can also override the default compression method on a case by case basis in the compression dialog.
top16
 WinZip 12.0
if you want to make the smallest Zip files possible by taking advantage of the latest advances in Zip compression technology (including JPEG compression).
if you need WinZip to create Zip files that are 100% compatible with older Zip utilities.

>>>> 隱藏文字訊息 <<<<


>>>> 視窗訊息 <<<<
標題：	WinZip 12.0 Setup
類型：	MsiDialogCloseClass
位置：	323, 238
大小：	506, 387
樣式：	0x14CA0000
ExStyle：0x00040100
控制碼:	0x00C3013A

>>>> 控制項訊息 <<<<
類型：	Static
實例物件：	1
ClassnameNN：	Static1
進階資訊 (類型)：	[類型：Static; 實例物件：1]
ID：	1490
文字：	Click Next to begin the installation, click the Back button to re-enter the installation information, or click Cancel to exit the wizard.
位置：	40, 86
大小：	386, 34
點選控制座標：	264, 3
樣式：	0x50020000
ExStyle：0x00000000
控制碼: 0x00410520

>>>> 滑鼠訊息 <<<<
位置：	630, 351
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
&Next >
< &Back
Cancel
Click Next to begin the installation, click the Back button to re-enter the installation information, or click Cancel to exit the wizard.
 WinZip 12.0
Click Next to begin installation.
top16
Ready to Install the Application

>>>> 隱藏文字訊息 <<<<
Ready to Modify the Application
Ready to Repair the Application
Ready to Resume WinZip 12.0 installation


>>>> 視窗訊息 <<<<
標題：	WinZip Setup
類型：	#32770
位置：	340, 267
大小：	471, 328
樣式：	0x14C000C4
ExStyle：0x00050101
控制碼:	0x00180614

>>>> 控制項訊息 <<<<
類型：
實例物件：
ClassnameNN：
進階資訊 (類型)：
ID：
文字：
位置：
大小：
點選控制座標：
樣式：
ExStyle：
控制碼: 0x00410520

>>>> 滑鼠訊息 <<<<
位置：	803, 317
游標 ID：2
色彩：	0xF4F8FC

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
< &Back
&Next >
Choose "Classic" or "Wizard", then click "Next"
You can start with the "Classic" or "Wizard" interface.  It is easy to switch between the two interfaces, and you can always change the default later.
WinZip Classic is the more powerful of the two interfaces and is recommended if you are comfortable with Windows and Zip files. Most WinZip users choose this interface.
The WinZip Wizard automates the most common tasks involving Zip files and is most useful for users who are new to Windows and Zip files.
Start with WinZip &Classic
&Start with the WinZip Wizard

>>>> 隱藏文字訊息 <<<<
&WinZip Classic
&Help
Close


>>>> 視窗訊息 <<<<
標題：	WinZip Setup
類型：	#32770
位置：	340, 267
大小：	471, 328
樣式：	0x14C000C4
ExStyle：0x00050101
控制碼:	0x005B0580

>>>> 控制項訊息 <<<<
類型：
實例物件：
ClassnameNN：
進階資訊 (類型)：
ID：
文字：
位置：
大小：
點選控制座標：
樣式：
ExStyle：
控制碼: 0x002E05E6

>>>> 滑鼠訊息 <<<<
位置：	635, 272
游標 ID：2
色彩：	0xD4C9B6

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
< &Back
&Next >
Click "Next" to continue.
&Express setup (recommended)
&Custom setup (for advanced users)
Express Setup associates WinZip with archives, creates a program group, and puts WinZip icons on the desktop and Start menu.

>>>> 隱藏文字訊息 <<<<
&WinZip Classic
&Help
Close


>>>> 視窗訊息 <<<<
標題：	WinZip Setup
類型：	#32770
位置：	340, 267
大小：	471, 328
樣式：	0x14C000C4
ExStyle：0x00050101
控制碼:	0x005B0580

>>>> 控制項訊息 <<<<
類型：
實例物件：
ClassnameNN：
進階資訊 (類型)：
ID：
文字：
位置：
大小：
點選控制座標：
樣式：
ExStyle：
控制碼: 0x002E05E6

>>>> 滑鼠訊息 <<<<
位置：	648, 278
游標 ID：2
色彩：	0xD6CBB8

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
< &Back
&Next >
WinZip needs to associate itself with your archives.
Associations allow WinZip to be used to open archives from My Computer, Windows Explorer, etc.
Click "Next" to associate WinZip with all supported archive types.  Click "Associations" if you want more information or would like to specify the archive types with which WinZip is associated.
&Associations...

>>>> 隱藏文字訊息 <<<<
&WinZip Classic
&Help
Close


>>>> 視窗訊息 <<<<
標題：	WinZip 12.0 Setup
類型：	MsiDialogCloseClass
位置：	323, 238
大小：	506, 387
樣式：	0x14CA0000
ExStyle：0x00040100
控制碼:	0x003202A2

>>>> 控制項訊息 <<<<
類型：	Button
實例物件：	2
ClassnameNN：	Button2
進階資訊 (類型)：	[類型：Button; 實例物件：2]
ID：	1038
文字：	&Finish
位置：	325, 325
大小：	74, 22
點選控制座標：	48, 8
樣式：	0x50032001
ExStyle：0x00000000
控制碼: 0x001B0662

>>>> 滑鼠訊息 <<<<
位置：	699, 595
游標 ID：2
色彩：	0xEBDAD7

>>>> 狀態列訊息 <<<<

>>>> 可見文字訊息 <<<<
ExitImage
WinZip 12.0 has been successfully installed.

Click the Finish button to exit this installation.
< &Back
&Finish
Cancel
&Launch WinZip 12.0
&View Quick Start

>>>> 隱藏文字訊息 <<<<
WinZip 12.0 has been successfully uninstalled.


#cs ----------------------------------------------------------------------------
 AutoIt 版本：3.3.0.0
 作者：    wellss
 腳本名稱：WinZip 12.0 全自動安裝
 腳本函數：如下示範
#ce ----------------------------------------------------------------------------

; 執行 WinZip 安裝程式
Run("winzip120.exe")

; 初始化安裝畫面
WinWaitActive("WinZip?12.0 Setup", "&Setup")
Send("^s")

; 選擇是否安裝 Google 工具列
WinWaitActive("WinZip Setup - Google Toolbar", "The Google Toolbar")
ControlClick("WinZip Setup - Google Toolbar","" ,"Button2")
Send("{ENTER}")

; WinZip 12.0 特色概觀
WinWaitActive("WinZip 12.0 Setup", "WinZip features include")
Send("!n")

; 授權同意書
WinWaitActive("WinZip 12.0 Setup", "License Agreement")
ControlClick("WinZip 12.0 Setup","" ,"Button3")
Send("!n")

; WinZip 安裝位置
WinWaitActive("WinZip 12.0 Setup", "Destination Folder")
Send("!n")

; 選擇捷徑選項
WinWaitActive("WinZip 12.0 Setup", "Explorer Configuration")
ControlClick("WinZip 12.0 Setup","" ,"Button5")
Send("!n")

; 選擇預設壓縮層級
WinWaitActive("WinZip 12.0 Setup", "Default Compression Method")
ControlClick("WinZip 12.0 Setup","" ,"Button6")
Send("!n")

; WinZip 最後安裝確認
WinWaitActive("WinZip 12.0 Setup", "Ready to Install the Application")
Send("!n")

; 選擇介面
WinWaitActive("WinZip Setup", "Choose ""Classic""")
Send("!c")
Send("!n")

; 安裝類型 (自訂/快速)
WinWaitActive("WinZip Setup", "Express Setup associates WinZip")
Send("!e")
Send("!n")

; 選擇檔案關聯
WinWaitActive("WinZip Setup", "WinZip needs to associate itself")
Send("!n")

; 完成自動化安裝
WinWaitActive("WinZip 12.0 Setup", "Click the Finish button")
ControlClick("WinZip 12.0 Setup","" ,"Button2")

; 等待 WinZip 視窗載入，然候關閉主畫面和提示
WinWaitActive("WinZip Tip of the Day")
WinClose("WinZip Tip of the Day")
WinWaitActive("WinZip")
WinClose("WinZip")

; 執行 WinZip 中文化程式
Run("WinZip_tw_112_Chinese.exe")

; 中文化歡迎畫面
WinWaitActive("WinZip v12 中文化 v1.1 安裝", "這個精靈將指引你")
Send("!n")

; 選擇是否備份
WinWaitActive("WinZip v12 中文化 v1.1 安裝", "安裝 / 還原")
Send("!i")

; WinZip 中文化完成
WinWaitActive("WinZip v12 中文化 v1.1 安裝", "安裝程式已成功")
WinActivate("WinZip v12 中文化 v1.1 安裝", "安裝程式已成功")
Send("!n")

; 結束安裝精靈
WinWaitActive("WinZip v12 中文化 v1.1 安裝", "關閉此精靈")
WinActivate("WinZip v12 中文化 v1.1 安裝", "關閉此精靈")
ControlClick("WinZip v12 中文化 v1.1 安裝","" ,"Button2")

; 自解壓縮對話框
If WinExists("WinZip Self-Extractor") Then
Send("!y")
EndIf

; 關閉網頁
WinWaitActive("[ACTIVE]")
WinClose("[ACTIVE]", "")

EXIT