亚洲国产日韩人妖另类,久久只有这里有精品热久久,依依成人精品视频在线观看,免费国产午夜视频在线

      
      

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

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

        aardio 小、輕、快,專注于 Windows 桌面軟件快速開發(fā)。在 aardio 中可以調(diào)用很多編程語言,例如 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 調(diào)用第三方編程語言示例》。

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

        一、aardio + bat 入門

        請在 aardio 中點擊「主菜單 > 新建工程 > 窗口程序 > 批處理」創(chuàng)建批處理范例工程。

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

        范例源代碼如下:

        import fonts.fontAwesome;import win.ui;/*DSG{{*/var mainForm = win.form(text=”批處理”;right=875;bottom=625)mainForm.add(btnExecute={cls=”plus”;text=”執(zhí)行批處理”;left=648;top=551;right=820;bottom=596;align=”left”;bgcolor=-5197169;db=1;dr=1;font=LOGFONT(h=-16);iconStyle={align=”left”;font=LOGFONT(h=-16;name=’FontAwesome’);padding={left=20}};iconText=’ ‘;notify=1;textPadding={left=42};z=2};editResult={cls=”edit”;left=15;top=13;right=863;bottom=536;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1})/*}}*///導(dǎo)入批處理支持import process.batch;//點擊按鈕觸發(fā)下面的事件mainForm.btnExecute.oncommand = function(id,event){var prcs = process.batch(“batbat.aardio”,{exepath = io._exepath; //傳遞命名參數(shù)”批處理啟動參數(shù)1″; //批處理使用 %1 接收第一個參數(shù)”批處理啟動參數(shù)2″; //批處理使用 %2 接收第一個參數(shù)})//禁用按鍵并顯示動畫mainForm.btnExecute.disabledText = {‘ ‘;’ ‘;’ ‘;’ ‘;’ ‘;text=”}/*out 用于接收批處理的標(biāo)準(zhǔn)輸出err 用于接收批處理的錯誤輸出exitcode 用于接收批處理進程退出代碼,批處理調(diào)用” EXIT /B 數(shù)值”即可指定退出代碼*/var ok,out,err,exitcode = prcs.waitOne()mainForm.editResult.print(out,err);prcs.close();//取消禁用按鈕mainForm.btnExecute.disabledText = null;}//設(shè)置按鈕外觀樣式import style;mainForm.btnExecute.skin(style.primaryButton);//顯示窗口mainForm.show();//啟動界面消息循環(huán)win.loopMessage();

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

        var prcs = process.batch(“batbat.aardio”,{ exepath = io._exepath; //傳遞命名參數(shù) “批處理啟動參數(shù)1”; //批處理使用 %1 接收第一個參數(shù) “批處理啟動參數(shù)2”; //批處理使用 %2 接收第一個參數(shù)})

        首先請注意 aardio 中文件路徑「首字符」可以用一個單斜桿(或反斜桿)表示應(yīng)用程序根目錄,應(yīng)用程序根目錄在開發(fā)時指工程目錄或工程外獨立啟動的文件所在目錄,發(fā)布后指 EXE 所在目錄。

        而 aardio 工程中的目錄可以指定為「內(nèi)嵌資源」,也就是將該目錄下面的文件編譯到 EXE 資源內(nèi)。aardio 中很多文件有關(guān)的函數(shù)都自動兼容資源文件,代碼不需要修改,上面的 “batbat.aardio” 就是一個資源文件。

        “batbat.aardio” 的文件后綴改成 *.bat 后綴也是可以的,不過使用 *.aardio 后綴可以直接在 aardio 中編輯。我們可以右鍵點擊 “batbat.aardio”,然后在彈出菜單中點擊「跳轉(zhuǎn)到文件」:

        打開的批處理代碼如下:

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

        aardio將 之外的部分解析為: print(“批處理代碼”) 以調(diào)用全局函數(shù) print 輸出批處理代碼。print 函數(shù)可以接收多個參數(shù),每個參數(shù)都會自動調(diào)用 tostring() 轉(zhuǎn)換為字符串

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

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

        var prcs = process.batch(“batbat.aardio”,{ exepath = io._exepath; //傳遞命名參數(shù) “批處理啟動參數(shù)1”; //批處理使用 %1 接收第一個參數(shù) “批處理啟動參數(shù)2”; //批處理使用 %2 接收第一個參數(shù)})

        process.batch() 用于啟動批處理,第一個參數(shù)指定批處理文件( 或者直接指定批處理代碼也可以 ),后面可以用一個表參數(shù)指定批處理調(diào)用參數(shù):

        {exepath = io._exepath; //傳遞命名參數(shù)”批處理啟動參數(shù)1″; //批處理使用 %1 接收第一個參數(shù)”批處理啟動參數(shù)2″; //批處理使用 %2 接收第一個參數(shù)}

        這個批處理表參數(shù)的數(shù)組成員傳遞為批處理的普通參數(shù) —— 可以在批處理中用 %1, %2 等接收對應(yīng)參數(shù):

        而表參數(shù)中的名值對成員則傳為 aardio 模板參數(shù),在 “batbat.aardio” 內(nèi)可以用 owner 參數(shù)接收該模板參數(shù),例如該文件內(nèi)可以用 aardio 代碼 owner.exepath 獲取調(diào)用參數(shù) exepth 。

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

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

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

        prcs.waitOne() 的作用是等待進程結(jié)束(此函數(shù)不卡界面),返回值 out 用于接收批處理的標(biāo)準(zhǔn)輸出,返回值 err 用于接收批處理的錯誤輸出,返回值 exitcode 用于接收批處理進程退出代碼,批處理調(diào)用” EXIT /B 數(shù)值”即可指定退出代碼。

        二、aardio 與批處理簡單對比

        下面是一個 aardio 調(diào)用批處理 for 語句的示例:

        import consoleimport process.batch;//批處理 for 遍歷并拆分字符串var bat = process.batch(`@echo off for %%i in (abc,def,xyz) do echo %%i`)console.log( bat.read(-1) )console.pause();

        上面代碼中的 bat.read(-1) 用于直接讀取所有批處理進程的標(biāo)準(zhǔn)輸出。

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

        import console; for( line in string.lines(“abc,def,xyz”,”[s,;=]”) ){console.log(line)} console.pause(true);

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

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

        import consoleimport process.batch;//創(chuàng)建一個測試文件,雙引號內(nèi)換行符會解釋為 ”string.save(“/test.txt”,”abc,def123,456″ )//批處理 for 遍歷并按行拆分字符串var bat = process.batch(`@echo off for /f “usebackq delims=, tokens=1,2” %%i in (“test.txt”) do echo %%i,%%j`)/*注意文件路徑如果有空格必須包含在引號內(nèi)如果要用引號包含路徑,就必須加上 usebackq,usebackq的意思是用反引號包含命令,單引號包含字符串,然后雙引號就可以包含文件路徑而不是字符串了*/console.log(bat.read(-1)); console.pause()

        用純 aardio 代碼這樣寫:

        import console//aardio 需要先讀文件到字符串var str = string.load(“/test.txt”)//參數(shù)@3指定delims,可以用強大的模式匹配語法指定分隔符for tokens in string.lines(str,,”,”) { /* tokens 是一個數(shù)組,可以用 string.join 任意拼接數(shù)組中指定范圍的元素實現(xiàn)批處理 tokens=n-m 的效果 */console.log(tokens[1],tokens[2])}console.pause()

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

        for a,b in string.each(str,”([^,]+),(.+)”){console.log(a,b)}

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

        import console;import process.batch;//批處理 for 遍歷一個目錄下的所有文件var bat = process.batch(`@for /r “./” %%I in (*) do @echo %%I`)for( all,out,err in bat.each() ){ console.log(all)}console.pause()

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

        import console;/*aardio 遍歷一個目錄下的所有文件*/import fsys;fsys.enum( “/”, “*.*”,function(dir,filename,fullpath,findData){ if(filename){ console.log(“發(fā)現(xiàn)文件:”+filename,”完整路徑:”+fullpath)}else{console.log( “發(fā)現(xiàn)目錄:” + dir )}} ,/*如果此參數(shù)為false則忽略子目錄*/);console.pause()

        三、執(zhí)行 CMD 命令與進程管道操作

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

        批理執(zhí)行 CMD 命令:

        import process.popen//打開命令行,隱藏命令行窗口var prcs = process.popen.cmd(`CD “C:Program Files”C:dir mkdir testrmdir test`)//顯示結(jié)果import win;win.msgbox(prcs.read(-1))

        process.popen 創(chuàng)建的進程對象不會打開黑窗口,而且可以通過返回的進程管道讀寫進程標(biāo)準(zhǔn)輸出輸入。當(dāng)然這個方法不僅僅是可以用于 cmd.exe ,也適用于所有控制臺程序。

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

        import process.popenvar prcs = process.popen(“cmd.exe”)//如果調(diào)用UTF8編碼的程序,請?zhí)砑酉旅娴木幋a聲明//prcs.codepage = 65001var cmd = /*CD C:C:dir mkdir testrmdir test*/prcs.write(cmd)var result = prcs.peekTo(“>”);prcs.print(‘exit’)//顯示結(jié)果import console;console.log( result );console.pause(“pause”);

        四、環(huán)境變量

        直接看范例:

        import win;import process.popen//在父進程中指定環(huán)境變量string.setenv(“TESTENV”,”測試變量值”);//打開命令行,隱藏命令行窗口var prcs = process.popen.cmd(`echo %TESTENV%`) //也可以在 process 或 process.popen 參數(shù)@3中通過 environment為目標(biāo)進程指定環(huán)境變量var prcs = process.popen(“cmd.exe”,”/c echo %TESTENV2%”,{environment = {TESTENV2 = “測試變量值2”}})import fsys.environment;import process.batch;var prcs = process.batch( `@echo offset TESTENV3=測試變量值3echo %TESTENV3%`)//顯示結(jié)果import win;win.msgbox(prcs.read(-1))

        五、發(fā)送 Ctrl + C

        直接看范例:

        import consoleimport process.popenvar prcs = process.popen(“ping 127.0.0.1 -n 10 “)for( all,out,err in prcs.each() ){ console.log( out,err ); prcs.ctrlEvent(0);}console.pause();

        六、編寫漂亮的界面

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

        通用輸入法狀態(tài)提示工具 ImTip:

        極簡錄屏工具 Gif123:

        系統(tǒng)五筆助手 WubiLex:

        鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
        (0)
        用戶投稿
        上一篇 2022年8月8日
        下一篇 2022年8月8日

        相關(guān)推薦

        聯(lián)系我們

        聯(lián)系郵箱:admin#wlmqw.com
        工作時間:周一至周五,10:30-18:30,節(jié)假日休息