新奇:(nodejs兄弟)用HTML + FLASH +JS 也可以寫桌面EXE。


首先看下面這張圖片,下面的所有界面都是用html代碼實現的。

編程IDE:vb6.0

使用控件:WEBBROWSER

原理:使用olelib 讓程序繼承:IDocHostUIHandler 和 ICustomDoc接口 實現對window.external的重寫。

接下來展示一下基本的API接口。【】

var C_System = function () {
    this.UI = {
        ReloadApp: function () {/*全部重新載入程序*/ },
        DragForm: function (FormName) {/*拖動窗體*/ },
        HideForm: function (FormName) {/*隱藏窗體*/ },
        ShowForm: function (FormName) {/*顯示窗體*/ },
        SetWidth: function (FormName, v) {/*設置主窗體寬度*/ },
        GetWidth: function (FormName) {/*獲得主窗體寬度*/ },
        SetHeight: function (FormName, v) {/*設置主窗體高度*/ },
        GetHeight: function (FormName) {/*獲得主窗體高度*/ },
        GetScreenWidth: function () {/*獲得屏幕寬度*/ },
        GetScreenHeight: function () {/*獲得屏幕高度*/ },
        SetFormState: function (FormName, v) {/*設置窗體狀態*/ },
        GetFormState: function (FormName) {/*獲得窗體狀態*/ },
        GetFormHwnd: function (FormName) {/*獲得窗體句柄*/ },
        VB_Load: function (FormName) {/**/ },
        VB_Unload: function (FormName) { },
        VB_End: function () { }
    };
    this.API = {
        CallApiByName: function (libName, ProcName, pa) { }
    };
    this.Net = {
        GetNewXMLHTTP: function () { },
        GetNewServerXMLHTTP:function(){},
        GetNewWinHTTP: function () { },
        getClipImg: function () { }
    };

    this.CRC = {
        FileChecksum: function (文件路徑) { },
        StringChecksum:function(被加密的字符串){}

    };
    this.S_Debug = function (被調試的對象) { };
    this.ISIDEmode = function () { /*判斷是不是在IDE環境*/ };
    this.openUrl = function (str) {/*打開網址*/ }
};
System = new C_System();

System = window.external;//獲得VB6.0程序中的交互對象。

甚至可以用js來調用系統底層API

           var hwnd = System.UI.GetFormHwnd("FrmMain");
            System.API.CallApiByName("user32", "SetWindowLongA", hwnd, -20, 524288);
            System.API.CallApiByName("user32", "SetLayeredWindowAttributes", hwnd, 16711935, 255, 3);

實際在vb6.0中的執行代碼為:

Public Function CallApiByName(ByVal libName As String, ProcName As String, ParamArray Params()) As Long
        Dim hProc As Long
        Dim hModule As Long
         
        ReDim m_OpCode(400 + 6 * UBound(Params))
        hModule = LoadLibrary(ByVal libName)
        If hModule = 0 Then
                MsgBox "Library讀取失敗!"
                Exit Function
        End If
         
        hProc = GetProcAddress(hModule, ByVal ProcName)
        If hProc = 0 Then
                MsgBox "函數讀取失敗!", vbCritical
                FreeLibrary hModule
                Exit Function
        End If
         
        CallApiByName = CallWindowProc(GetCodeStart(hProc, Params), 0, 1, 2, 3)
         
        FreeLibrary hModule
End Function

引擎用System.Net.GetNewWinHTTP()【並非.net運行庫的System 相當於自己編寫的運行庫】來實現獲取一個新的WINHTTP對象實現跨域的網絡訪問和對Cookie的完整控制。

 

當然這樣還是不夠的。

接下來我打算自己做一個IDE和運行庫。內置Python 和Lua雙引擎的支持 或許也可以支持.NET的JIT。

使用WEBKIT + Google的V8引擎【來自Chromium源碼】的基礎上修改。

同樣是通過重寫window.external 在 【Chromium源碼的regerer項目】external_extension.cc文件里面可以實現對external的重寫。

大家可能了解過NODEJS 可以通過js來寫服務器端代碼,用JS寫客戶端代碼也是可以實現的。

這樣的一個運行庫加起來是不到30MB的。可以實現比.net更強大的功能。

界面方面:

  1.直接支持了html5及以下版本,支持css3及以下版本,可以內置Flash支持。大幅度提升項目周期

功能方面:

  1.支持直接用js調用lua Python 和 DIY的API。

  2.調用底層API。包括:調用GDI繪圖 多線程控制 數據庫訪問等等。

  3.離線運行。

  4.應用商店,可以方便的在線安裝新APP。

兼容性:

  每一個程序直接支持Windows Linux MAC IOS(Ihone) android WP等主流電腦和手機操作系統。無需單獨為每一個系統單獨開發。

文件大小優勢:

  由於支持離線運行,每一個程序相當於都是在線安裝到本地后運行的。每一個APP一般不會超過1MB。

IDE優勢:

  毫無疑問,JS是大部分程序員最喜歡的編程語言,js跟c++ C#  delphi JAVA的區別就是 js 一直被當作弱語言來對待。沒有假設於平台上的運行庫。 C# VB.NET就是使用.NET運行庫 ,易語言 跟 delphi都有自己的運行庫來實現對系統底層的訪問。 在nodejs獲得巨大成功后,我們可以這么想。

js語言加上一對小翅膀后,也支持了一個運行庫,那就是如虎添翼。

  很標准簡潔的MVC模式

  模型:V8引擎-》JAVASCRIPT代碼實現。

  視圖:WEBKIT-》 html5 html4 shtml1.0 跟flash來實現。

  控制:V8引擎-》JAVASCRIPT代碼實現。

未完待修改。

我的郵箱地址是lujiao234@hotmail.com 小弟姓盧,歡迎各界朋友一起研究。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM