设为首页 收藏本站
查看: 657|回复: 0

[经验分享] 新奇:(nodejs兄弟)用HTML + FLASH +JS 也可以写桌面EXE。

[复制链接]

尚未签到

发表于 2017-2-23 07:25:50 | 显示全部楼层 |阅读模式
  首先看下面这张图片,下面的所有界面都是用html代码实现的。
  编程IDE:vb6.0
  使用控件:WEBBROWSER
  原理:使用olelib 让程序继承:IDocHostUIHandler 和 ICustomDoc接口 实现对window.external的重写。
DSC0000.png

  接下来展示一下基本的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 小弟姓卢,欢迎各界朋友一起研究。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345840-1-1.html 上篇帖子: Html5+NodeJS——拖拽多个文件上传到服务器 下篇帖子: nodejs操作excel并配合edatagrid使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表