aardio + bat 批處理混合編程,製作漂亮圖形界面

aardio 小、輕、快,專注於 Windows 桌面軟件快速開發。在 aardio 中可以調用很多編程語言,例如 C語言、C++、C#、Java、Python、R、Javascript、Node.Js、Fortran、VB、Flash ActionScript、PHP、VBScript、PowerShell、NewLISP、AutoLISP、Delphi、FreeBASIC、Ruby、Rust、Julia、Nim、Go 語言、批處理 ......

本文我們主要介紹 aardio + bat 批處理混合編程。

一、aardio + bat 入門

請在 aardio 中點擊「主菜單 > 新建工程 > 窗口程序 > 批處理」創建批處理範例工程。

生成的範例初始代碼很簡單,我們在工程中雙擊打開程序入口代碼 main.aardio ,然後點擊運行,運行效果如下:

範例源代碼如下:

代碼很簡單,我們重點說一下上面代碼中啓動批處理的代碼:

首先請注意 aardio 中文件路徑「首字符」可以用一個單斜杆(或反斜杆)表示應用程序根目錄,應用程序根目錄在開發時指工程目錄或工程外獨立啓動的文件所在目錄,發佈後指 EXE 所在目錄。

而 aardio 工程中的目錄可以指定爲「內嵌資源」,也就是將該目錄下面的文件編譯到 EXE 資源內。aardio 中很多文件有關的函數都自動兼容資源文件,代碼不需要修改,上面的 "\bat\bat.aardio" 就是一個資源文件。

"\bat\bat.aardio" 的文件後綴改成 *.bat 後綴也是可以的,不過使用 *.aardio 後綴可以直接在 aardio 中編輯。我們可以右鍵點擊 "\bat\bat.aardio",然後在彈出菜單中點擊「跳轉到文件」:

打開的批處理代碼如下:

注意綠色部分是批處理代碼,我們可以在批處理中編寫 aardio 代碼,遵守類PHP的 aardio 模板語法即可 —— 也就是將 aardio 代碼置入 模板標記就可以了。

aardio將 之外的部分解析爲: print("批處理代碼") 以調用全局函數 print 輸出批處理代碼。print 函數可以接收多個參數,每個參數都會自動調用 tostring() 轉換爲字符串。

可以使用 輸出文本,該代碼的作用類似於 print( 表達式 ) , 下面的寫法也是允許的

= 表達式?>

我們再回到開始,看一下啓動該批處理的 aardio 代碼:

var prcs = process.batch("\bat\bat.aardio",{ exepath = io._exepath; //傳遞命名參數 "批處理啓動參數1"; //批處理使用 %1 接收第一個參數 "批處理啓動參數2"; //批處理使用 %2 接收第一個參數})

process.batch() 用於啓動批處理,第一個參數指定批處理文件( 或者直接指定批處理代碼也可以 ),後面可以用一個表參數指定批處理調用參數:

{exepath = io._exepath; //傳遞命名參數"批處理啓動參數1"; //批處理使用 %1 接收第一個參數"批處理啓動參數2"; //批處理使用 %2 接收第一個參數}

這個批處理表參數的數組成員傳遞爲批處理的普通參數 —— 可以在批處理中用 %1, %2 等接收對應參數:

而表參數中的名值對成員則傳爲 aardio 模板參數,在 "\bat\bat.aardio" 內可以用 owner 參數接收該模板參數,例如該文件內可以用 aardio 代碼 owner.exepath 獲取調用參數 exepth 。

process.batch() 返回一個進程管道對象 —— 也就是 process.popen 對象。使用該管道對象可以方便地讀寫批處理進程,獲取返回值,退出代碼等等。更多用法請參考標準庫 process.popen 庫函數文檔。

其實用法很簡單,例如等待批處理執行完成可以這樣寫:

var ok,out,err,exitcode = prcs.waitOne()

prcs.waitOne() 的作用是等待進程結束(此函數不卡界面),返回值 out 用於接收批處理的標準輸出,返回值 err 用於接收批處理的錯誤輸出,返回值 exitcode 用於接收批處理進程退出代碼,批處理調用" EXIT /B 數值"即可指定退出代碼。

二、aardio 與批處理簡單對比

下面是一個 aardio 調用批處理 for 語句的示例:

上面代碼中的 bat.read(-1) 用於直接讀取所有批處理進程的標準輸出。

下面我們用純 aardio 代碼實現上面的功能:循環遍歷用空格鍵、跳格鍵(tab)、逗號、分號或等號拆分出來的字符串,aardio 代碼如下:

上面是一個典型的 for 循環語句。string.lines() 用於創建迭代器,string.lines() 的第 @2 個參數指定分隔符 —— 支持類正則表達式的 aardio 模式匹配語法(請參考語法文檔)。注意 aardio 裡循環變量名 line 不需要在前面加%%,也沒有隻能使用26個字母的限制。

下面我們再看一個 aardio 調用批處理 for 語句的例子:

用純 aardio 代碼這樣寫:

其實在 aardio 中還可以 string.each() 實現類似功能,如下:

再看一個例子,aardio 中調用 for 語句遍歷文件這樣寫:

改成純 aardio 代碼遍歷文件這樣寫:

三、執行 CMD 命令與進程管道操作

如果我們不需要執行 bat 批處理。也可以用 process.popen 直接調用 cmd.exe 創建進程管道。注意 process.batch 同樣是基於 process.popen 調用 cmd.exe ,對進程管道的操作是一樣的。

批理執行 CMD 命令:

process.popen 創建的進程對象不會打開黑窗口,而且可以通過返回的進程管道讀寫進程標準輸出輸入。當然這個方法不僅僅是可以用於 cmd.exe ,也適用於所有控制檯程序。

再看一個讀寫進程管道的例子:

四、環境變量

直接看範例:

五、發送 Ctrl + C

直接看範例:

六、編寫漂亮的界面

aardio 製作圖形界面很方便,請參考 aardio 開始頁的教程《使用 plus 控件製作精美界面》。下面我們看一下 aardio 製作的一些開源軟件。

通用輸入法狀態提示工具 ImTip:

極簡錄屏工具 Gif123:

系統五筆助手 WubiLex: