用中嵌入AHK解釋器)
AutoHotkey Lib DLL托管指南如何在你的應(yīng)用中嵌入AHK解釋器【免費下載鏈接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.項目地址: https://gitcode.com/gh_mirrors/au/AutoHotkeyAutoHotkey 是一款經(jīng)典的 Windows 宏創(chuàng)建與自動化腳本工具而它的Lib DLL是一項常被忽視的強大特性你可以把整個 AHK 解釋器編譯成一個動態(tài)鏈接庫直接嵌入到自己的應(yīng)用程序中運行腳本、分析代碼。對于想開發(fā) AHK IDE、腳本插件系統(tǒng)或想在 v2 進程中復(fù)用 v1 庫的開發(fā)者來說這是一份從零開始的完整托管指南。什么是 Lib DLL兩個核心使用場景從 2022 年起AutoHotkey 官方項目正式支持編譯為 DLL與早年社區(qū)的 HotKeyIt/ahkdll 是不同項目目標是提供盡可能貼近原生 AutoHotkey 的托管接口。它主要有兩大用途 場景說明典型應(yīng)用托管執(zhí)行腳本在你的進程中加載并執(zhí)行 AHK 腳本尤其是讓 v1 代碼在 v2 進程中運行插件系統(tǒng)、混合版本腳本靜態(tài)分析腳本只加載、不執(zhí)行提取函數(shù)/變量/標簽信息自動補全、CallTip、跳轉(zhuǎn)到定義需要留意該 DLL僅支持 Unicode暫不支持 ANSI且官方標注其接口仍屬實驗性質(zhì)API 可能隨版本變化。 完整說明見 README-LIB.md接口定義見 source/ahklib.idl。一步到位如何編譯出 AutoHotkey.dll編譯過程非常簡單只需選對構(gòu)建配置獲取源碼倉庫地址https://gitcode.com/gh_mirrors/au/AutoHotkey用Visual Studio 2022Community 版即可打開 AutoHotkeyx.sln在配置下拉框中選擇Release.dll并選定平臺Win32 或 x64點擊生成調(diào)試時可選用Debug.dll配置并在項目設(shè)置中把調(diào)試命令行的目標 exe 指向你的宿主程序——若兩者都是 Debug 構(gòu)建可同時調(diào)試 DLL 與宿主。在 AutoHotkeyx.vcxproj 中可以看到任何帶.dll后綴的配置都會自動將項目類型切換為DynamicLibrary輸出即為你要嵌入的 DLL 文件。DLL 的實現(xiàn)入口位于 source/ahklib.cppCOM 交互邏輯在 source/script_com.cpp。兩個入口函數(shù)Host 與 Main該 DLL 目前暴露兩個導出入口Host(IDispatch **ppLib)—— 推薦入口。創(chuàng)建一個 Lib 實例并返回 COM 對象無需注冊 DLL任何支持 COM 調(diào)用的語言都能直接使用int Main(int argc, LPTSTR argv[])—— 以與 AutoHotkey.exe 相同的方式執(zhí)行腳本早期開發(fā)用于測試現(xiàn)主要供Lib.Main內(nèi)部使用。由于 DLL 尚未內(nèi)置 COM 類工廠暫時不能通過CoCreateInstance等機制激活Host是當前唯一推薦的獲取方式。核心 Lib API 一覽加載、執(zhí)行與分析通過Host拿到的 Lib 對象提供了一組直觀的方法完整 IDL 定義在 source/ahklib.idl 的IAutoHotkeyLib接口中執(zhí)行相關(guān)Lib.Main(CmdLine)像 AutoHotkey.exe 一樣執(zhí)行命令行。若腳本是持久型的則不會返回Lib.LoadFile(FileName)只加載腳本文件、不執(zhí)行。每個 DLL 實例只能調(diào)用一次熱鍵不會在此階段生效Lib.Execute()激活熱鍵并執(zhí)行自動執(zhí)行區(qū)后返回可多次調(diào)用。跳過此調(diào)用即可實現(xiàn)只分析、不運行Lib.OnProblem(Callback)注冊警告/錯誤回調(diào)接管所有未捕獲的異常輸出。信息提取相關(guān)Lib.Funcs/Lib.Vars/Lib.Labels返回描述函數(shù)、變量、標簽的對象集合可獲取參數(shù)列表、行號、是否只讀等細節(jié)——這正是實現(xiàn) IDE 補全與 CallTip 的基石 ?。在你的 AHK 腳本中托管解釋器最小示例如果你的宿主程序本身就是 AutoHotkey v2 腳本加載流程只有兩行核心代碼if !hmod : DllCall(LoadLibrary, str, dll, ptr) throw OSError() DllCall(dll \Host, ptr*, Lib : ComValue(9, 0), hresult)調(diào)用結(jié)束后用FreeLibrary卸載 DLL 即可再加載下一個腳本——這是官方支持的多腳本方案 ?? 注意卸載前必須釋放所有外部對象引用并確保鍵盤/鼠標鉤子已解除例如先掛起熱鍵否則 DLL 將無法卸載。已知限制與避坑清單官方文檔坦誠列出了幾個容易踩的坑嵌入前務(wù)必了解A_AhkPath指向宿主進程用它執(zhí)行腳本可能不符合預(yù)期基于當前 exe 路徑執(zhí)行命令行的功能包括Reload可能行為異常跳過Lib.Execute()時在新偽線程中執(zhí)行的事件可能導致未定義行為不支持枚舉類需通過Lib.VarsLib.Script迂回實現(xiàn)且可能觸發(fā)未知腳本執(zhí)行存在一定風險目前一次只能加載一個主腳本文件切換腳本需重新加載 DLL。關(guān)鍵文件速查文件作用README-LIB.mdLib DLL 官方說明構(gòu)建、API、已知問題source/ahklib.idlIAutoHotkeyLib等全部 COM 接口定義source/ahklib.cppDLL 入口與 Lib 對象實現(xiàn)source/script_com.cpp腳本 COM 互操作實現(xiàn)AutoHotkeyx.vcxproj含Release.dll/Debug.dll構(gòu)建配置總結(jié)只要會選對構(gòu)建配置、調(diào)對Host入口你就能在幾天內(nèi)給自己的應(yīng)用加上完整的 AHK 腳本引擎——無論是做插件宿主還是打造帶自動補全的 AHK 編輯器Lib DLL 都是目前官方路線下最順手的方案?!久赓M下載鏈接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.項目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考