博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
新奇:(nodejs兄弟)用HTML + FLASH +JS 也可以写桌面EXE。
阅读量:6600 次
发布时间:2019-06-24

本文共 3732 字,大约阅读时间需要 12 分钟。

首先看下面这张图片,下面的所有界面都是用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 hModuleEnd 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 小弟姓卢,欢迎各界朋友一起研究。

转载于:https://www.cnblogs.com/yilou/p/3537428.html

你可能感兴趣的文章
webpack2 示例之:Scope Hoisting 和 Code Splitting
查看>>
云端开发运维的三大减速带
查看>>
简简单单制作贪吃蛇小游戏
查看>>
Laravel 从入口到输出过程详解
查看>>
Mesh(一)----System Architecture
查看>>
我不是来约架,我只是请他们说几句实话——QCon上海2015编程语言专题前瞻
查看>>
前端好文章收集(持续更新)
查看>>
border、outline、boxshadow那些事以及如何做内凹圆
查看>>
基于JavaScript技术完成单击事件完成显示和隐藏
查看>>
小米战略入股TCL,大家电业务供应链获得强援
查看>>
Android判断用户的网络类型(2/3/4G、wifi)
查看>>
分布式系统的经典基础理论
查看>>
教你用Python解决非平衡数据问题(附代码)
查看>>
Atom飞行手册翻译: 2.3 文本选择
查看>>
业界 | 数据科学家要先学逻辑回归?图样图森破!
查看>>
美国银行和摩根大通禁止与信用卡相关的比特币交易
查看>>
c++ zlib(qt)压缩与解压缩
查看>>
CES Aisa|镁客君逛展第一天不容错过的精彩亮点
查看>>
深醒科技人脸识别速度可达每秒30亿次,2秒即可比对全球人脸
查看>>
区块链每日一问丨区块链技术中的“分布式账簿”是什么?它有什么优势?
查看>>