標籤:

【高級】AutoHotkey_H新特性

引言:開源帶來的無限可能總是持續的讓我驚嘆,我好久沒關注AutoHotkey更新了,最近在論壇找資料時偶然看到AutoHotkey_H的一些新特性,竟已強大如斯(其中許多功能我當時都想實現的,其中一個讓我一見如故的是BinRun,記得AutoIt3論壇上有個名為ExcuteFromMemory的函數功能類似,花費了巨大精力轉換,終究沒有成功)。最近這周每個凌晨抽半小時草譯了出來,這裡先發了(沒有仔細檢查鏈接),現在考慮是否可能翻譯完整版本出來,按近期的時間安排,也許遙遙無期了。

原文鏈接:AutoHotkey_H New Features

命令、函數

#DllImport:創建DLL函數的別名函數,這樣可以省略參數而使用默認值調用。它還用於載入十六進位形式的純機器碼,請參閱示例。

#NoEnv / GetEnv():#NoEnv現在用於所有腳本中。使用GetEnv()在腳本中增加環境變數。

#WarnContinuableException:在連續執行時不發出警告,類似主流AutoHotkey的特性。

AhkThread:通過資源中包含的AutoHotkey.dll創建新線程。

ExeThread:不使用AutoHotkey.dll創建新線程,這裡使用的方法與AhkExported相同。

ThreadObj:不使用AutoHotkey.dll創建新線程,基於使用ObjShare的COM。

NewThread:不使用AutoHotkey.dll創建新線程。如果需要和已創建的線程通信,最好使用ExeThread或ThreadObj。

Alias:在多線程環境中創建ByRef變數或與其他線程共享變數。

BinToHex:轉換二進位數據為十六進位字元串。

BinRun:內存中運行可執行文件。

CreateScript:使用NewThread、AutoHotkey.dll、DynaRun或BinRun在主腳本中創建腳本。

CriticalSection:創建臨界區結構並返回它的指針。使用EnterCriticalSection和LeaveCriticalSection進入或離開臨界區。多線程環境中離不開臨界區。

DirGetParent:獲取文件或目錄的上一級目錄。

ErrorMessage:獲取A_LastError的錯誤信息字元串。

ExtractIconFromExecutable:從EXE或DLL中提取圖標。

FileReplace:類似FileAppend,不過同名文件存在時會被替換。

FindFunc(低級):獲取到函數的指針。

FindLabel(低級):獲取到標籤的指針。

GetEnv:獲取環境變數及生成全局變數。

HexToBin:把十六進位字元串轉換為內存中的二進位數據。

HIBYTE:獲取一個值中的高位元組部分。

HIWORD:獲取一個值中的高字部分。

Input:Input執行時,會實時更新它的目標變數,且腳本中一直可用。在Input執行時可使用SetTimer或AutoHotkey.dll獲取這個變數的內容,選項A允許把輸入的內容附加到變數,不過在輸入開始前變數內容會被清空。

IsBom:檢查文件是否包含位元組順序標記。

LoadPicture:載入圖片到內存中並返回HBITMAP。

LOBYTE:獲取一個值中的低位元組部分。

LOWORD:獲取一個值中的低字部分。

MAKELANGID:生成LANGID。

MAKELCID:生成LCID。

MAKELONG:生成LONG。

MAKELPARAM:生成LPARAM。

MAKELRESULT:生成LRESULT。

MAKEWORD:生成WORD。

MAKEWPARAM:生成WPARAM。

MCodeH:創建機器碼的函數。

OnMessage:新參數允許監測多個窗口的相同消息號碼且為每個窗口調用不同的函數。

Progress:同於AutoHotkey v1中的Progress功能。

ResDelete:刪除可執行文件中的資源。

ResDllCreate:給dll文件創建資源。

ResExist:檢查可執行文件是否存在某資源。

ResPut:把內存中的資源添加到可執行文件。

ResPutFile:把文件添加到可執行文件的資源中。

Send:Send命令增加了Sleep功能,如Send 123{100}456將發送123後休息100毫秒接著再發送456。

sizeof:返回默認數據類型、結構或結構定義的大小,單位為位元組,例如MsgBox % sizeof("TCHAR")

SplashImage:同於AutoHotkey v1中的SplashImage。

SplashTextOn / Off:同於AutoHotkey v1中的SplashTextOn。

StrPutVar:把已編碼的字元串存入變數。

ToChar:把整型轉換為有符號字元型。

ToInt:把整數轉換成有符號整型。

ToShort:把整數轉換成短整型。

ToUChar:把整型轉換為無符號字元型。

ToUInt:把整數轉換成有符號整型。

ToUShort:把整數轉換為無符號整型。

VarSetCapacity:當變數的緩衝區大小改變、沒有使用FillByte且新的容量大於1位元組時,則原內容會複製到新緩衝區中。

WinApi:可把WinApi當內置函數使用。

Zip函數:用於壓縮或解壓縮內存數據的zip函數。ZipCreateFile、ZipAddFile、ZipCloseFile、UnZip、ZipCreateBuffer、ZipAddBuffer、ZipCloseBuffer、UnZipBuffer、ZipRawMemory、UnZipRawMemory、ZipInfo、ZipOptions、ZipAddFolder

對象

ComObjDll:從COM dll中創建COMD對象。

CriticalObject:創建多線程保存對象。

DynaCall:導入Dll函數並定義其參數,這樣不需要像DllCall那樣每次調用都需要再定義。

ObjByRef:通過引用把變數保存到對象中。

ObjDump:轉儲對象到內存或文件中。

ObjLoad:從內存或文件中載入轉儲後的對象。

ObjShare:創建多線程以保存COM IDispatch代理對象。

Struct:創建類似C++的結構對象,可通過對象語法訪問和修改。

MemoryModule

可以從內存中載入dll,例如Resource。

MemoryLoadLibrary:類似LoadLibrary,不過這裡從內存中載入Dll。通過它可以載入一個dll多次來實現實時多線程。

MemoryGetProcAddress:類似用於MemoryModule的GetProcAddress。

MemoryFreeLibrary:類似用於MemoryModule的FreeLibrary。

MemoryFindResource:類似FindResource。

MemorySizeofResource:類似用於MemoryModule的SizeOfResource。

MemoryLoadResource:類似LoadResource。

MemoryLoadString:類似LoadString。

變數

NULL:內置變數,等同於FALSE。解析為0。

A_AhkDir:返回當前可執行文件的路徑。

A_IsDll:如果來自AutoHotkey.dll的調用則返回真,否則返回假。

A_CoordModeToolTip:返回當前ToolTip的CoordMode:0 = Client | 1 = Window | 2 = Screen。

A_CoordModePixel:返回當前Pixel的CoordMode:0 = Client | 1 = Window | 2 = Screen。

A_CoordModeMouse:返回當前的滑鼠坐標模式:0 = Client | 1 = Window | 2 = Screen。

A_CoordModeCaret:返回當前的游標坐標模式:0 = Client | 1 = Window | 2 = Screen。

A_CoordModeMenu:返回當前的菜單坐標模式:0 = Client | 1 = Window | 2 = Screen。

A_DllPath:返回當前模塊路徑(dll或exe)。

A_DllDir:返回當前模塊路徑(dll或exe)。

A_ModuleHandle:等同於GetModuleHandle(NULL),不過當使用MemoryModule時返回當前AutoHotkey.dll的模塊句柄。

A_ScriptStruct:返回內部g_script結構的指針。

A_GlobalStruct:返回內部g結構的指針。

編譯

編譯AutoHotkey:原始的AutoHotkey只能通過AutoHotkeySC.bin編譯。而AutoHotkey_H可以編譯任何AutoHotkey二進位文件(AutoHotkey.dll、AutoHotkey.exe、AutoHotkeySC.bin)。就可以保持具有執行其他腳本的AutoHotkey完整功能。已編譯的AutoHotkey.exe和AutoHotkey.dll可通過/E選項執行非編譯時包含的腳本。

Ahk2Exe:fincs Ahk2Exe編譯器的自定義版本,支持AutoHotkey_H功能。

資源庫:可以在exe或dll的資源中包含庫函數(資源類型必須為「LIB」,如LIB/WATCHDIRECTORY.AHK)。 的AutoHotkey.dll可以自動從exe文件中載入庫函數(註:如果源文件加密了,則兩個可執行文件必須使用相同的密碼)。AutoHotkeySC.bin不支持這個功能。

資源的壓縮與加密:Ahk2Exe支持壓縮和加密資源文件,AutoHotkey會在內部解壓縮並解密文件。UnZipRawMemory()可用來解壓縮和解密腳本中的資源文件。

AutoHotkey.dll模塊

AutoHotkey.dll:支持COM的AutoHotkey模塊可用於多線程,且可實現將AutoHotkey嵌入到其他程序中。這樣可在其他語言中實現AutoHotkey功能,有些功能在其他語言中實現起來可能困難的多。

列出函數

適用於AutoHotkey.exe和AutoHotkey.dl。

ahkIsUnicode:如果dll是Unicode的,則返回真。

ahkFunction:通過SendMessage方法調用函數。主要用於通過AutoHotkey.dll調用dll腳本中的函數或從dll中調用主腳本中的函數。

ahkPostFunction:通過PostMessage方法調用函數(不支持等待至函數返回)。同樣主要用於AutoHotkey.dl。

ahkExecuteLine:從給定的行指針處執行腳本。

ahkLabel:Goto(PostMessage)或Gosub(SendMessage)到標籤。同樣主要用於AutoHotkey.dl。

ahkFindFunction:查找某個函數並返回它的指針。

ahkFindLabel:查找某個標籤並返回它的指針。

addFile:添加並可選執行文件中附加的腳本、代碼。不適用於由AutoHotkeySC.bin編譯成的可執行腳本。

addScript:添加並可選執行文本、內存、變數中附加的腳本、代碼。不適用於由AutoHotkeySC.bin編譯成的可執行腳本。

ahkExec:臨時執行文本、內存、變數中的腳本、代碼。不適用於由AutoHotkeySC.bin編譯成的可執行腳本。

ahkassign:賦值給變數或變數的指針。

ahkgetvar:從變數中獲取值。

ahkPause:暫停腳本。

列出函數

僅適用於AutoHotkey.dll。

ahkdll:從文件中創建新線程,當前線程將終止。

ahktextdll:從字元串、內存或變數中創建新線程,當前線程將終止。

ahkReady:如果某個線程當前正在執行則返回真,否則返回假。

ahkTerminate:終止線程。

ahkTerminate:在ahkdll或ahktextdll中用相同的參數重新創建線程。

其他

ahk_parent:用於區分符合相同條件的多個窗口,ahk_parent必須後跟著空格和窗口Id。ahk_parent必須用在任一Win...或Control...函數中。例如WinActivate, ahk_class #32770 ahk_parent 0x3F4A5

&:返回任意字元串或內置變數的指針,如&A_LoopField or &"Text"。

函數庫

除了%A_MyDocuments%AutoHotkeyLib的用戶庫、AutoHotkey目錄的標準庫及%A_ScriptDir%Lib本地庫中的函數,還會自動包含%A_AhkExeDir%lib.lnk目標文件夾中的函數。想了解更多信息,請參閱函數庫。

靜態變數

靜態變數在內部保存於單獨數組中,這樣性能更好。並且ListVars分開顯示靜態和本地變數。


推薦閱讀:

用AutoHotkey(AHK) 使用滑鼠手勢在win10下快速切換虛擬桌面?
[基礎] AHK 中關聯數組、列表、棧和隊列的用法
AutoHotKey 常用函數或小技巧有哪些分享?

TAG:AutoHotkey |