前言:據我瞭解需要編寫AutoHotkey/AutoIt腳本來實現自動化操作的用戶很多都是網管,其它則可能是一些個人用戶,他們一般都具有相當的技術水平,而且都希望能借助腳本來完成某些以往需要人工操作的重複性勞動,但限於語言條件上的限制可能對官方的幫助文檔有較難理解之處。為方便讀者,我將從最簡單的說起,每個示例盡可能同時給出相應的AHK和AU3版本代碼。本文將盡可能用較通俗的語言描述,但並不打算講解語法基礎,所以不一定適合新手閱讀。
文中涉及到的AHK/AU3版本:
AutoHotkey
1.0.44 .08
AutoIt
3.1.1
一、關於腳本
1、什麼是腳本?- 這是個非常「流行」的術語了,通俗而言腳本([size=10.5pt]Script)一般都是指根據某種語法規則編寫的具有特定格式的文本文件。可能大家已經聽說過很多種腳本:[size=10.5pt]VBScript、[size=10.5pt]JScript、[size=10.5pt]PHP、[size=10.5pt]ASP、[size=10.5pt]JSP、[size=10.5pt]CGI、[size=10.5pt]CS腳本,甚至遊戲外掛腳本。[size=10.5pt]
- 這些腳本文件都是可執行文件,可執行相應的操作。[size=10.5pt]
- AHK 腳本文件擴展名:[size=10.5pt]*.ahk
- AU3 腳本文件擴展名:[size=10.5pt]*.au3
複製代碼 2、腳本和程序的不同?- 嚴格來說,所謂「程序」就是指以各種編程語言(比如說[size=10.5pt]C/C++/C#/Delphi)編寫、由編譯器編譯好後的二進制文件,一般就是機器代碼,可由系統執行。而腳本則是只是些純文本文件,包含了各種定義好的命令,這一點很像批處理文件。這樣,我們得出一個簡單的結論,那就是用戶一般無法獲得「程序」的源代碼,我們只能進行反彙編把它逆向還原為彙編語言代碼(或其它),當然,也有些「程序」是可以獲得源代碼的(比如[size=10.5pt]Java);腳本則是用戶可直接查看的代碼文件,而[size=10.5pt]AHK/AU3則提供了把腳本文件「轉換」成[size=10.5pt]exe文件的方法。[size=10.5pt]
複製代碼 3、腳本如何運行?- 腳本是「解釋性」的語言,它的運行依賴一個「解釋器」,由這個解釋器來「翻譯並解釋」腳本的每條命令(或者說代碼),然後執行相應操作。如果不嚴格定義的話,[size=10.5pt]HTML和[size=10.5pt]Java都可以認為是解釋性語言。[size=10.5pt]AHK/AU3的主程序(分別是[size=10.5pt]AutoHotkey.exe和[size=10.5pt]AutoIt3.exe)就是它們的「解釋器」,上面提到腳本可「轉換」成可脫離相應的解釋器而獨立運行的[size=10.5pt]exe可執行文件,而我們還可以使用相應的工具把它們「還原」成腳本文件,由此我們完全可以這麼理解:腳本代碼是被「壓縮」到這個[size=10.5pt]exe文件中,解釋器也是在裡面,在運行[size=10.5pt]exe時實際上是先「解壓」腳本代碼然後運行解釋器並解釋該腳本。[size=10.5pt]
複製代碼 4、如何創建腳本?- 使用資源管理器的右鍵菜單即可創建相應腳本文件,或者新建一個文本文件後改擴展名即可。[size=10.5pt]
複製代碼 5、稍微介紹一點語法規則?- [size=10.5pt]A)對[size=10.5pt]AHK而言,每個內建的功能都是以「命令」的形式提供:[size=10.5pt]
- [size=10.5pt]Command, param1, param2,…
- 而[size=10.5pt]AU3則以「函數」的形式提供:[size=10.5pt]
- [size=10.5pt]Function(param1, param2, …)
- 命令或函數中被符號「[size=10.5pt][」和「[size=10.5pt]]」圍住的參數是可選參數,表示在使用這些命令或函數時可省略它們(不給出具體數值)。[size=10.5pt]
- 若某個參數含有空格,則最好使用雙引號圍住該參數。[size=10.5pt]
- [size=10.5pt]B)解釋器自上而下(從第一行到最後一行)「解釋」腳本的每行語句,除非遇到「[size=10.5pt]Return」、「[size=10.5pt]Goto」、「[size=10.5pt]Gosub」、「[size=10.5pt]Exit」等語句、函數、熱鍵或其它能使腳本「跳」到某個標識符的條件成立。[size=10.5pt]
- C)關鍵字和標識符(包括變量名、命令名、函數名等)都不區分大小寫。
複製代碼 二、運行程序或打開文件
1、運行程序- Run t命令或者函數用來運行外部可執行文件,AHK還可利用它來直接打開文件。
- [size=10.5pt]AHK:[size=10.5pt]
- Run, 目標文件 [, 工作目錄, Max|Min|Hide|UseErrorLevel, 輸出PID變量]
- AU3:
- Run ( "文件名" [, "工作目錄" [, 標誌]] )
- 【示例 [size=10.5pt]2.1.1 】[size=10.5pt]
- AHK:
- [size=10.5pt]Run, Notepad.exe
- [size=10.5pt]AU3:[size=10.5pt]
- [size=10.5pt]Run("Notepad.exe")
- 上面的示例中都沒有給出程序「[size=10.5pt]Notepad.exe」的路徑,為什麼仍能執行?這是因為它們都會自動在腳本所在目錄下搜尋目標文件,如有則運行,否則就到系統文件夾([size=10.5pt]%PATH%)中搜尋。[size=10.5pt]
- 注意:[size=10.5pt]
- [size=10.5pt]A)某些程序必須給定「工作目錄」才能成功運行![size=10.5pt]
- [size=10.5pt]B)給出完整的文件路徑有助於輕微提高程序的可靠性。[size=10.5pt]
- [size=10.5pt]C)[size=10.5pt]AHK的[size=10.5pt]Run命令可以用來運行程序和直接打開文件,而[size=10.5pt]AU3的[size=10.5pt]Run函數則只能用來運行程序(可執行文件)或傳遞參數讓某個程序打開目標文件。[size=10.5pt]
- 當然,運行程序的功能還不僅僅是這麼簡單,我們還可以指定運行程序的初始狀態,比如讓運行的記事本窗口以最大化狀態顯示(或者最小化、隱藏):[size=10.5pt]
- 【示例 [size=10.5pt]2.1.2 】[size=10.5pt]
- [size=10.5pt]AHK:[size=10.5pt]
- [size=10.5pt]Run, Notepad.exe, , Max
- [size=10.5pt]AU3:[size=10.5pt]
- [size=10.5pt]Run("Notepad.exe", "", @SW_MAXIMIZE)
- [size=10.5pt]
複製代碼 2、打開文件- 前面已經提到,[size=10.5pt]AHK的[size=10.5pt]Run命令可以直接打開文件,而[size=10.5pt]AU3的[size=10.5pt]Run函數則只能用來運行程序,因此在打開文件的方式上有點不同:[size=10.5pt]AHK腳本中可直接給出目標文件,而[size=10.5pt]AHK將自動運行該文件的關聯程序來打開它;而[size=10.5pt]AU3則必須由用戶自己傳遞參數讓某個程序打開目標文件。
- 【示例 [size=10.5pt]2.2.1 】[size=10.5pt]
- [size=10.5pt]AHK:[size=10.5pt]
- [size=10.5pt]Run, MyFile.txt
- [size=10.5pt]Run, Notepad.exe MyFile.txt
- [size=10.5pt]AU3:[size=10.5pt]
- [size=10.5pt]Run("Notepad.exe MyFile.txt")
- [size=10.5pt]
複製代碼 3、以命令行形式運行程序- 可以考慮運行系統的命令行解釋器([size=10.5pt]cmd.exe/command.com),然後指定要執行的命令並傳遞參數。[size=10.5pt]
- 假設我們要執行命令「[size=10.5pt]dir C:\WINDOWS\system 32」 ,用以列出指定目錄的所有文件及子目錄。[size=10.5pt]
- 【示例 [size=10.5pt]2.3.1 】[size=10.5pt]
- [size=10.5pt]AHK:[size=10.5pt]
- [size=10.5pt]Run, %ComSpec% /k dir C:\WINDOWS\system32
- [size=10.5pt]AU3:[size=10.5pt]
- [size=10.5pt]Run(@ComSpec & " /k dir C:\WINDOWS\system32")
- 注意:[size=10.5pt]
- [size=10.5pt]A)[size=10.5pt]ComSpec是腳本內建的用以指示命令行解釋器位置的變量或宏。[size=10.5pt]
- [size=10.5pt]B)[size=10.5pt]/k 參數表示「執行字符串指定的命令但保留」,若改為[size=10.5pt] /c 則表示「執行字符串指定的命令然後終斷」。對此比較直觀的解釋是[size=10.5pt] /k 將在執行完命令後保留命令提示窗口,而[size=10.5pt] /c 則將在執行完命令之後關閉命令提示窗口。[size=10.5pt]
- [size=10.5pt]C)符號「[size=10.5pt]&」是[size=10.5pt]AU3定義的字符串連接符。[size=10.5pt]
- [size=10.5pt]
複製代碼 4、特殊應用- [size=10.5pt]A)打開網頁[size=10.5pt]
- 【示例 [size=10.5pt]2.4.1 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- [size=10.5pt]Run, www.autohotkey.com
- [size=10.5pt]Run, %A_ProgramFiles[size=10.5pt]%\Internet Explorer\IEXPLORE.EXE www.autohotkey.com
- [size=10.5pt]AU3:[size=10.5pt]
- [size=10.5pt]Run(@ProgramFilesDir & "\Internet Explorer\IEXPLORE.EXE www.autohotkey.com")
- [size=10.5pt]B)打開特殊文件夾[size=10.5pt]
- 系統的某些特殊文件夾被定義了相應的CLSID(請查看幫助文檔),我們可利用它來打開相應的文件夾,比如打開回收站:
- 【示例 [size=10.5pt]2.4.2 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- Run ::{645ff040-5081-101b -9f 08-00aa 002f 954e}
- [size=10.5pt]AU3:[size=10.5pt]
- 不適用![size=10.5pt]
- [size=10.5pt]C)運行控制面板工具[size=10.5pt]
- 微軟已經為我們提供了通過命令行打開控制面板某個工具或項目的方式,比如打開系統屬性窗口:[size=10.5pt]
- 【示例 [size=10.5pt]2.4.3 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- Run control sysdm.cpl
- [size=10.5pt]AU3:[size=10.5pt]
- Run("control sysdm.cpl")
- 關於訪問控制面板項目的詳細介紹請查看此文:文章地址。
- [size=10.5pt]D)指定搜索位置並打開搜索窗口[size=10.5pt]
- 假設我們要打開一個搜索窗口,而且要指定搜索位置,比如[size=10.5pt]C:\:[size=10.5pt]
- 【示例 [size=10.5pt]2.4.4 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- Run, find C:\
- [size=10.5pt]AU3:[size=10.5pt]
- 不適用![size=10.5pt]
- [size=10.5pt]E)顯示指定文件的屬性窗口[size=10.5pt]
- 假設我們要打開文件「[size=10.5pt]MyFile.txt」的屬性窗口,則使用關鍵字[size=10.5pt]properties 然後接上目標文件即可:[size=10.5pt]
- 【示例 [size=10.5pt]2.4.5 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- Run, properties MyFile.txt
- [size=10.5pt]AU3:[size=10.5pt]
- 不適用![size=10.5pt]
- 注意:[size=10.5pt]AHK在退出前將自動關閉打開的屬性窗口![size=10.5pt]
- [size=10.5pt]F)用「資源管理器」打開指定文件夾[size=10.5pt]
- 我們知道使用[size=10.5pt]Run, explorer C: 或[size=10.5pt]Run("explorer C:") 即可打開指定的文件夾,可是有時候我們需要在資源管理器中打開它,這時可使用關鍵字[size=10.5pt] explore:[size=10.5pt]
- 【示例 [size=10.5pt]2.4.6 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- Run, explore C:
- [size=10.5pt]AU3:[size=10.5pt]
- run("explorer.exe /e,C:\")[size=10.5pt]
- [size=10.5pt]G)打印指定文件[size=10.5pt]
- 要打印指定文件,可使用關鍵字[size=10.5pt] print:[size=10.5pt]
- 【示例 [size=10.5pt]2.4.7 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- Run, print MyFile.txt
- [size=10.5pt]AU3:[size=10.5pt]
- 不適用!
- [size=10.5pt]F)用「資源管理器」打開指定文件夾[size=10.5pt]
- 我們知道使用[size=10.5pt]Run, explorer C: 或[size=10.5pt]Run("explorer C:") 即可打開指定的文件夾,可是有時候我們需要在資源管理器中打開它,這時可使用關鍵字[size=10.5pt] explore:[size=10.5pt]
- 【示例 [size=10.5pt]2.4.6 】[size=10.5pt]
- [size=10.5pt]
- AHK:[size=10.5pt]
- Run, explore C:
- [size=10.5pt]AU3:[size=10.5pt]
- 不適用!
- [size=10.5pt]run("explorer.exe /e,d:\")
- [size=10.5pt]
- [size=10.5pt]這樣就可以做到你說的樹狀型打開目標文件夾了!
複製代碼 |