平台簡介
AutoHotkey 是一款 免費的、Windows平台下 開放原始碼的 熱鍵腳本語言。
功能
通過傳送鍵盤或滑鼠的鍵擊動作命令來實現幾乎所有操作的自動化。您可以自己編寫 宏(AutoHotkey Script) 或者使用宏錄製器(AutoScriptWriter)來生成;
為鍵盤,遊戲操縱桿和滑鼠創建 熱鍵。 事實上任何的按鍵、按鈕或組合鍵都可以被設定為熱鍵;
可以對Windows各類型視窗進行匹配以及相關屬性調整(例如:透明、隱藏、置頂、改變大小等);
當鍵入您自定義的縮寫時可以 擴展縮寫。例如, 鍵入“btw”就可以自動擴展為“by the way”;
創建自定義的數據輸入表格、用戶界面、選單等標準控制項以及ActiveX 組件(例如IE瀏覽器控制項)等。詳情請看 圖形界面 部分;
映射 鍵盤、遊戲操縱桿和滑鼠上的按鍵或按鈕;
運行現有的AutoIt v2腳本並用 新功能 來增強它們;
將腳本檔案編譯 成EXE執行檔,使得程式在沒有安裝AutoHotkey的機器上得以運行;
藉助 相關工具 以實現更強大的功能;
更多關於熱鍵的說明
AutoHotkey 可令鍵盤、遊戲操縱桿和滑鼠的所有潛能都發揮出來。例如,除了典型的Control、Alt和Shift鍵之外,你還可以定義Win鍵(徽標鍵)和Capslock鍵作為調節鍵。 而實際上你還可以設定任意的鍵盤按鍵或滑鼠按鍵作為調節鍵。詳細內容請看 高級熱鍵 部分。
其他功能
基本用法:
關閉或禁止Windows自有的快捷鍵,例如Win+E和Win+R;
取替Alt-Tab(通過按鍵、滑鼠滾輪或按鈕)從而減輕RSI(肢體重複性勞損);
本機代碼互操作:
可以調用COM和DLL對象進行功能擴展;
可以創建機器碼地址,當它被調用時會重定向到腳本中的函式;
可以複製字元串到記憶體地址或來自記憶體地址,並可以對其在指定代碼頁間進行轉換;
檔案、目錄和磁碟管理:
讀取、寫入、複製、刪除、獲取設定屬性以及解釋文本檔案比起其他語言更容易;
提供面向對象的檔案I/O操作;
支持驅動器彈出以及獲取驅動器列表、容量、剩餘空間、檔案系統、卷標、序列號、類型、狀態等;
可對IN檔案(配置信息檔案)進行讀寫操作。
流程控制:
多種條件判斷(字元項目、視窗、檔案、進程、錯誤返回值等),條件下採用{}區塊以及制表符進行分層級;
可以配合變數進行多級循環複雜操作;
可以與一般編程一樣創建自定義函式並調用;
圖形界面:
使用您喜歡的圖示、工具提示(ToolTip)、選單項目和子選單來自定義托盤圖示選單;
顯示對話框、工具提示(Tooltips)、氣球提示以及彈出選單,與用戶互動;
可以置頂自定義圖片來做程式啟動界面;
滑鼠和鍵盤:
可以禁用或啟用用戶通過鍵盤和滑鼠對電腦進行操作而腳本不受影響。
用遊戲操縱桿或鍵盤代替滑鼠;
可以對視窗中的指定控制項進行點擊、改變文字等操作而不會出現滑鼠點擊事件;
數學相關:
可以進行一些科學運算(如三角函式、平方根、冪運算、e^N等);
螢幕管理:
通過檢測圖像和象素色彩來自動執行遊戲中的動作;
進程管理:
執行腳本動作來回響系統關閉或註銷;
使用RunAs方式指定運行用戶身份;
可以對進程進行是否存在、列表、優先權、等待運行、等待結束操作;
註冊表:
可以循環讀取註冊表並操作;
可對註冊表進行讀寫、刪除操作。
聲音命令:
調節音量、設定靜音,以及其他關於音效卡的設定;
可以播放wav音頻;
字元串管理:
可以定義字元串變數對字元串變數進行截取、替換、正則表達式匹配、大小寫改變等處理;
可以生成隨機數,用戶可以根據隨機數生成自定義隨機字元;
獲取並改變剪貼簿的內容,包括從資源管理器中複製的檔案的名稱;
針對一組與通配符匹配的檔案進行操作;
視窗管理:
可以檢測視窗是否處於各種狀態(激活、最大化、存在、隱藏等);
可以獲取視窗的標題、ahk_class、文字等相關信息方便滑鼠等操作;
可以對視窗進行最大化、激活、隱藏、關閉、強制關閉、等待等相關操作;
其他:
可以獲取系統環境(如幕解析度、多顯示器信息、系統對象的尺寸和其他系統屬性)相關信息並執行預定操作;
監控您的系統。例如,當您不希望見到的視窗出現時自動關閉它們;
可以設定定時器並啟用、停用該項目;
檢測系統空閒時間。例如,在系統空閒的時候執行高CPU負荷的任務;
你只要有想像力,它可以完成更多工作。
兼容性
在 Windows 95/98/Me 下,一些 高級功能例如滑鼠熱鍵和 熱字串 -- 在Win9x 平台將失效。
在Window8/8.1環境下,BlockInput會失效。
在Windows RT作業系統上,需要越獄並下載指定編譯版本Autohotkey,手動註冊相關註冊表項後
即可使用,不保證所用命令有效。
注意事項
1、在字元串賦值時,使用a=b這種方式時,“"”(英文雙引號)、“,”(英文逗號)需要轉義,轉義符為“·”(Tab上面,1左邊的字元),等同於其他語言的“\”。其他要轉義的字元:回車“`r”,換行“`n”,制表符“`t”,空格“%A_Space%”,非注釋分號“`;”,非引用百分號“`%”。
2、AHKer在接觸AHK可能接觸過其他語言,會有書寫方面的問題。建議按照標準書寫風格書寫並嚴格使用制表符以及區塊進行分層。語句各屬性項目嚴格使用英文逗號分隔而不是空格,這會大大減少錯誤情況。
3、使用AutoScriptWriter錄製的腳本可能會用語句冗餘以及操作時間不當等操作,可以作參考並適當添加win相關命令以及PixelGetColor、ImageSearch等命令在恰當的時機操作。
4、視窗以及像素相關操作(如滑鼠點擊)默認為相對當前活動視窗,一些操作可能會錯誤。需要默認為全螢幕幕,請在腳本頭添加:
CoordMode,Pixel,Screen
CoordMode,Mouse,screen
5、腳本運行時,默認會有系統列圖示及相關右鍵選單,如不需右鍵選單,請在腳本頭添加Menu, Tray, NoStandard;如不需要顯示系統列圖示,請在腳本頭添加#NoTrayIcon。
翻譯進度*
原英文幫助CHM檔案被解壓後,除去19個腳本頁面,總計254個HTML網頁檔案。
待翻統計:
命令:220個共1.22M,剩79個共717K
雜項:18個共172K,剩14個共156K
根目錄下:16個共366K,剩7個共221K
html 檔案總計:254個頁面共1.75M
未翻:100個頁面共1.07M,約61.14%
已翻:154個頁面共0.68M,約38.86%
主分支的版本幫助已完全翻譯完畢, 翻譯詳情及下載請至AutoHotkey中文論壇
*AutoHotKey已推出中文版幫助,AHK版本v1.1.13.00。該中文幫助由 amnesiac 更新。
計畫
(1)將官方論壇中Tuncay大大收集的Ahk Standard Library Collection(當前版本:201009181732)集成到幫助檔案, 已放出第一個測試版, 歡迎下載及提供意見和建議!
(2)由於1.0.48.05版本主分支已經停止更新近一年, 而AutoHotkey_L分支持續更新, 增加了許多重要的特性, 因此接下來計畫翻譯其幫助檔案.
新特性
流程控制 | |
BreakLoopLabel | 退出一個循環或任意數目的嵌套循環. |
ContinueLoopLabel | 繼續循環, 即使在任意數目的嵌套循環中. |
Forx,yinz | 從頭到為尾循環對象的內容. |
Loop Until | 循環直到條件為真. 可用於任意類型的循環. |
Try...Catch | 提供結構化的異常處理機制. |
Throw | 拋出異常. |
命令 | |
FileEncoding | 為FileRead、FileReadLine、Loop Read、FileAppend和FileOpen設定默認編碼。 另請參閱:文本編碼 |
Gui | 請參閱後面的GUI 增強. |
IniRead/Write/Delete | 讀取, 寫入或刪除整段, 或獲取所有段名稱組成的列表. |
Menu, Icon | 設定或移除選單項圖示. |
Run | 改進了參數的解析方式. |
SendInput {U+nnnn} | 傳送 Unicode 字元. 在 Unicode 版本中可以直接使用 Unicode 字元. |
SendLevel | 控制熱鍵和熱字串是否忽略模擬的鍵盤和滑鼠事件。 |
SetFormat, IntegerFast, h|H | 設定小寫或大寫的十六進制格式. |
SetRegView, RegView | 允許 32 位腳本中的註冊表命令訪問 64 位註冊表視圖,反之亦然。 |
Transform, HTML | 執行代碼頁或 HTML 轉換. |
WinGet, ..., ProcessPath | 獲取擁有指定視窗的進程的完整路徑和名稱. |
指令 | |
#Ifexpression | 類似於#IfWinActive,但可以是任意類型的表達式。 |
#IfTimeout | 設定計算單個 #If 表達式可以使用的最大時間。 |
#MenuMaskKey | 改變用來禁止 Win 或 Alt keyup 事件的按鍵。 |
#Include <Lib> | 包含函式館資料夾中的腳本檔案. |
#InputLevel | 控制熱鍵和熱字串是否忽略模擬的鍵盤和滑鼠事件。 |
#Warn | 啟用或禁用為選擇的情況提示開發者錯誤的警告。 |
函式 | |
ComObj...-- ComObjActive ComObjEnwrap/Unwrap ComObjParameter ComObjType | 獲取註冊的 COM 對象。 包裝/解開 COM 對象。 把值和類型包裝成參數傳遞. 獲取 COM 對象的類型信息. |
ComObjArray | 創建用於 COM 的 SAFEARRAY。 |
ComObjConnect | 連線 COM 對象的事件源到帶有給定前綴的函式。 |
ComObjCreate | 創建 COM 對象。 |
ComObjError | 啟用或禁用 COM 錯誤通告。 |
ComObjFlags | 獲取或改變控制 COM 包裝器對象行為的標誌。 |
ComObjGet | 返回由 COM 組件提供的對象引用。 |
ComObjQuery | 查詢 COM 對象的接口或服務。 |
ComObjType | 從 COM 對象獲取類型信息。 |
ComObjValue | 獲取存儲在 COM 包裝器對象中的值或指針。 |
Exception | 創建用於Throw的異常對象 (同時提供對堆疊的受限訪問). |
FileOpen | 提供面向對象的檔案 I/O。 |
Func | 獲取函式的引用。 |
GetKeyName/VK/SC | 獲取按鍵的名稱、文本、虛擬按鍵碼或掃描碼。 |
InStr | 搜尋字元串的出現位置,從左邊或右邊開始。 |
IsByRef | 判斷變數是否是 ByRef 參數。 |
IsObject | 判斷某個值是否為對象。 |
StrPut / StrGet | 複製字元串到記憶體地址或來自記憶體地址,並可選地對其在不同代碼頁間進行轉換。 |
Trim | 移除字元串的開始和/或末尾的某些字元。 |
RegEx (?CNum:Func) | 在正則表達式進行模式匹配期間調用函式. |
函式館 | 新的 "本地庫" 和#Include <LibName>. |
可變參數函式 | 函式可以通過數組接受可變數目的參數. |
靜態初始化 | 靜態變數現在可以使用任意表達式進行初始化. |
對象 | |
概述 | 對象的常規行為和用法. |
對象 | 可以使用其他功能擴展的關聯數組. |
枚舉數 | 可以枚舉容器中的項目. |
檔案 | 提供訪問檔案的接口.FileOpen返回檔案類型的對象. |
Func | 表示可以被腳本調用的自定義或內置的函式. |
ComObject | 請參閱上面的 ComObj 函式。 |
變數 | |
A_Is64bitOS | 當作業系統為 64 位則值為 1(真),為 32 位則為 0(假)。 |
A_IsUnicode | 在 Unicode 版本中, 此變數值為 1 (true). 在 ANSI 版本中此變數未定義, 所以等同為false. |
A_FileEncoding | 包含用於多種命令的默認編碼,請參閱FileEncoding。 |
A_OSVersion | 支持 Windows 7 和 Windows 8,請參閱A_OSVersion。 |
A_PriorKey | 在最近按鍵按下或釋放前最後按下的按鍵名稱 ...(更多細節) |
A_PtrSize | 包含指針的大小, 單位為位元組. 此大小為 4 (32 位) 或 8 (64 位). |
A_RegView | 由SetRegView設定的當前註冊表視圖。 |
A_ScriptHwnd | 腳本隱藏主視窗的唯一 ID (HWND/句柄). |
數據類型 | |
Ptr | 在 32 位版本中等同於Int而在 64 位版本中為Int64. 由DllCall,NumPut和NumGet所支持. |
AStr,WStr | 僅DllCall支持,請參閱腳本兼容性。 |
Unicode | |
兼容性 | 在 DllCall 中如何處理 Unicode 等. |
腳本檔案 | 在腳本檔案中使用 Unicode 編碼. |
SendInput | 在 SendInput 中使用 Unicode. |
其他 | |
ahk_exe | 視窗可以通過擁有此視窗的進程名稱或路徑 (EXE 檔案) 進行標識. |
調試 | 互動式調試功能 (單步執行等). |
錯誤處理 | Try/catch/throw 和增加的 A_LastError 可用性. |
GUI 增強 | 對 Gui 命令和相關部分的多方面增強. |
圖示支持 | 資源標識符和改進的對各種圖示大小的支持. |
其他變更 | 影響腳本兼容性的改變. |
版本歷史 | AutoHotkey_L 的修訂歷史. |
錯誤處理
許多命令支持使用 try/catch 代替 ErrorLevel 進行錯誤處理. 例如:
try
{
FileCopy, file1.txt, C:\folder
FileDelete, C:\folder\old.txt
}
catch
MsgBox An error occured!
此外, 後面的這些命令設定 A_LastError 來輔助調試: FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version, FileSetAttrib/Time, FileCreateDir, RegRead, RegWrite, RegDelete.
函式館
除了 %A_MyDocuments%\AutoHotkey\Lib 的用戶庫和在 AutoHotkey 目錄的標準庫外, 函式還可以從 %A_ScriptDir%\Lib 中的 "本地庫" 自動載入. 想了解更多信息, 請參閱 函式館.
#Include <LibName> 可以明確載入函式館中任意一個庫檔案.
GUI 增強
對 Gui 命令和相關部分進行了一些增強:
引用 GUI 時可以用 名稱或 HWND 代替介於 1 和 99 之間的數字.
Gui, New 創建新的匿名 GUI.
可以創建任意數目的命名或匿名 GUI.
新 GUI 選項: +HwndOutputVar, +ParentGUI
GUI 的擁有者可以為任意視窗: +Owner%HWND%.
Gui, Font 可以控制文本的反鋸齒效果.
支持像 Internet Explorer WebBrowser 這樣的 ActiveX 控制項.
GuiControlGet, OutputVar, Name 獲取與 GUI 控制項關聯的變數名.
在 Gui menus 中使用像 Ctrl+O 這樣的鍵盤快捷鍵時會自動得到支持.
字型品質 可以通過 Font 子命令控制.
靜態變數
靜態變數可以使用任意表達式進行初始化. 例如:
Sleep 500
MsgBox % Time() "ms since the script started."
Time() {
static Tick := A_TickCount
return A_TickCount - Tick
}
文本編碼
FileRead, FileReadLine, Loop Read 和 FileAppend 支持 Windows 所支持的大部分文本編碼, 而不限於系統默認的 ANSI 代碼頁. 可以用 FileEncoding 設定默認編碼, 此設定在 FileRead 和 FileAppend 中可以使用如下方法覆蓋:
FileRead, OutputVar, *Pnnn Filename
FileAppend [, Text, Filename, Encoding]
此處 nnn 必須是數值的 代碼頁標識符, 而 Encoding 遵循與 FileEncoding 相同的格式.
另請參閱: 腳本兼容性
可變參數函式和函式調用
可變參數函式 可以通過數組接受可變數目的參數, 而 可變參數的函式調用 可以用來傳遞可變數目的參數給函式.
圖示支持的改進
不常見的大小
可以從執行檔中提取作業系統支持的任意大小的圖示資源. 當圖示組中存在多種大小的圖示資源時, 則使用其中最合適的大小. 在修訂號 17 之前的版本中, 系統先選擇任意的圖示資源, 接著調整到系統的大圖示尺寸, 然後調整回請求的尺寸.
資源標識符
使用負數的圖示編號可以標識執行檔中的一組圖示資源. 例如, 下面的語句設定托盤圖示為 ahk 檔案的默認圖示.
Menu, Tray, Icon, %A_AhkPath%, -160