新奇:(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( + * UBound(Params))
hModule = LoadLibrary(ByVal libName)
If hModule = Then
MsgBox "Library读取失败!"
Exit Function
End If hProc = GetProcAddress(hModule, ByVal ProcName)
If hProc = Then
MsgBox "函数读取失败!", vbCritical
FreeLibrary hModule
Exit Function
End If CallApiByName = CallWindowProc(GetCodeStart(hProc, Params), , , , ) 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 小弟姓卢,欢迎各界朋友一起研究。
新奇:(nodejs兄弟)用HTML + FLASH +JS 也可以写桌面EXE。的更多相关文章
- 用node.js从零开始去写一个简单的爬虫
如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始去写一个简单的爬虫,十分钟时间就能搞定, ...
- Sublime3 配置node.js 环境 The process "node.exe" not found
配置中文显示调试结果 [下载地址](https://github.com/tanepiper/SublimeText-Nodejs) 1. 到上述地址下载压缩文件 2.将文件解压到sublime的插件 ...
- JS基于时间戳写的浏览访问人数
Title:JS基于时间戳写的浏览访问人数 --2013-12-23 14:07 <script language="JavaScript"> var timesta ...
- 如何把js的代码写的更加容易维护(一)--面向对象编程
总是头疼javascript的代码写起来不可维护,那么看看下面的代码: (function (w, $) { var app = { init: function () { var me = this ...
- 2019前端面试系列——JS高频手写代码题
实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...
- 【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写
经过一段时间的研究终于把TMS320C6657单核和双核的SPI Nor Flash的程序烧写调通了.工具都是前辈的工作,有需要的可以留下邮箱,我有空可以发. 原理参考钱丰的<TI c66x 系 ...
- 几道JS代码手写面试题
几道JS代码手写面试题 (1) 高阶段函数实现AOP(面向切面编程) Function.prototype.before = function (beforefn) { let ...
- javaScript(js)手写原生任务定时器源码
javaScript(js)手写原生任务定时器 功能介绍 定时器顾名思义就是在某个特定的时间去执行一些任务,现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务 ...
- 学习NodeJS第一天:node.js引言
Node.JS 是资深 C 程序猿 Ryan Dahl(http://four.livejournal.com/)的作品,根据 Google 著名的开源 JavaScript 引擎 V8 来进行二次开 ...
随机推荐
- NHibernate直接执行SQL进行插入
有时候,需要用NHibernate直接执行SQL进行数据insert或update. 怎么写呢?简单一点的,可以直接拼凑出来的SQL,这样写: using NHibernate; StringBuil ...
- POI异步导入Excel兼容xsl和xlsx
项目架构:spring+struts2+hibernate4+oracle 需求:用户导入excel文件,导入到相应的数据表中,要求提供导入模板,支持xls和xlsx文件 思路分析: 1.提供一个下载 ...
- struts2的(S2-045,CVE-2017-5638)漏洞测试笔记
网站用的是struts2 的2.5.0版本 测试时参考的网站是http://www.myhack58.com/Article/html/3/62/2017/84026.htm 主要步骤就是用Burp ...
- Hibernate是如何延迟加载的
Hibernate是如何延迟加载的 2011-12-24 13:58 242人阅读 评论(0) 收藏 举报 hibernatespringinterceptordao数据库integer Hibern ...
- Tomcat 在Mac OS X中的安装和配置
简单介绍: 1.Tomcat是目前比较流行的Web应用服务器,它是一个轻量级的应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. 2.Tomcat运行时所 ...
- UI:数据的解析
在懒加载的时候要注意事项: 必须使用 self.XX 的样式去开辟空间,不能使用 _XX 的格式去开辟,因为前者是内部的 set 方法,而后者并不走内部的 set 方法. json 文件的创建 xm ...
- winform 自动升级
自动升级系统OAUS的设计与实现(续) (附最新源码) http://www.cnblogs.com/zhuweisky/p/4209058.html Winform在线更新 http://www.c ...
- MySQL ERROR Got an error reading communication packets
200 ? "200px" : this.width)!important;} --> 介绍 经常会在错误日志中看到这个报错,首先我们可以从show GLOBAL statu ...
- Linux 常用命令十 which cal date
一.which命令 查找一个目录所在的路径: wang@wang:~/workpalce/python$ which ls /bin/ls 二.cal命令 wang@wang:~/workpalce/ ...
- float(double)快速转换int的方法
自己写一个软件渲染器的时候,无意中发现float转换int非常耗时,于是查阅文章,这才有了这个命题,以前不清楚还有这么个机制.网上看了很多文章,搜索到了一个数字6755399441055744,这个是 ...