zoukankan      html  css  js  c++  java
  • 新奇:(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 小弟姓卢,欢迎各界朋友一起研究。

  • 相关阅读:
    使用母版页后台控制样式
    sql语句小综合
    sql拆分字段区分查询
    sql排名语句
    智力大冲浪(贪心)
    互斥的数(贪心)
    Crazy Search(hash)
    Frequent values(倍增RMQ)
    色板游戏(线段树)
    阶乘质因子分解(唯一分解定理)
  • 原文地址:https://www.cnblogs.com/yilou/p/3537428.html
Copyright © 2011-2022 走看看