aardio + VBScript 快速开发独立 EXE 桌面程序

aardio 与 VBScript 可以直接混合编程,VBScript 属于 Windows 系统自带组件 —— 可以方便地生成独立 EXE 程序。

快速入门

首先创建 vbscript 解释器,aardio 代码示例:

import web.script;var vm = web.script("VBScript")

可以将 aardio 对象(表、数组、函数)直接赋值为 vm 解释器的成员,然后就可以在 VBScript 中调用这些 aardio 对象了,aardio 代码示例如下:

//添加一个 aardio 函数到 VBScriptvm.external = { add = Function(a,b){ return a b; };}

用上面的方法模拟 WScript 对象:

vm.WScript = { CreateObject = COM.CreateObject; GetObject = com.GetObject; Echo = function(...){ console.log(...); };}import console;

下面指定要执行的 VBScript 代码,也可以用 vm.doScript() 函数运行 VBScript 。

vm.script = /*Function TestFunction(a,b) Dim shell, ns, item '创建 COM 对象 Set shell = CreateObject("Shell.Application") Set ns = shell.NameSpace("::{7007ACC7-3202-11D1-AAD2-00805FC1270E}") '遍历 COM 对象 For Each item In ns.Items() '注意 VBScript 调用方法且不接收返回值时,不要加括号。 WScript.Echo item.Name,item.Path Next TestFunction = external.add(a(0),b(0))End Function*/

注意在 aardio 中 /* */ 这样的段注释可以赋值为字符串 。因为 aardio 要求段注释首尾的星号数目一致,所以很适合用于包含其他编程语言的代码。请参考:aardio 编程语言快速入门——语法速览

aardio 可以通过 vm.script.函数名() 直接调用 VBScript 函数,aardio 代码示例:

var ret = vm.script.TestFunction({12,13},{2,3});console.log( ret );

以上示例的完整源码请参考 aardio 自带范例:

aardio + VBScript 快速开发独立 EXE 桌面程序

运行 VBScript 并获取表达式的值

aardio 代码示例:

import web.script;var vm = web.script("VBScript") var version = vm.eval(`ScriptEngine() & " " & ScriptEngineMajorVersion() &_"." & ScriptEngineMinorVersion() & "." & ScriptEngineBuildVersion()`);import console; console.log(version);console.pause();

VBScript 解析 JSON

VBScript 解析 JSON 不是很方便,我们用 aardio 为 VBScript 添加 JSON 解析功能。
aardio 的 JSON 解析器兼容JSON,JSONP,JSON5,部分类 YAML 语法。下面看 aardio 代码示例:

//导入 VBScript JSON 支持库import web.script.json;//创建 VBScript 解析器var vm = web.script("VBScript");//添加 VBScript 函数vm.external = { log = function(...){ console.log(...); }; }import console;//执行 VBScriptvm.script = /*Function TestFunction() '解析 JSON Set jObject = JSON.parse("{name:{a:123:b:456,c:[1,2,3]}}" ) jObject.newKey = "测试" arr = jObject.name.c arr(0) = "测试" '遍历 JSON 数组 For Each item In arr external.log item Next TestFunction = arr(0) End Function*/ //调用 VBScript 函数。var ret = vm.script.TestFunction();console.dump(ret);console.pause();

编写 VBScript 扩展库

这里说明一下扩展 VBScript 功能的 aardio 扩展库 web.script.json 是如何写出来的。

首先需要了解 web.script 不仅仅是可以用于执行 VBScript ,也可以用于执行 JavaScript ,参考:aardio JavaScript 快速开发桌面软件,体积小使用系统自带ES6 组件

web.script 在创建脚本解释器时,会检查 web.script.preload 名字空间下的所有扩展对象,先看一下 web.script 的构造函数的相关 aardio 代码:

import com;namespace web;class script { ctor(language = 'jscript'){{ this.msc = ..com.CreateObject("ScriptControl"); // …… 其他代码省略 this.reset = function(){ this.msc.Reset(); //脚本语言名称转为小写 var lang = ..string.lower(this.msc.Language); //遍历 web.script.preload 名字空间 for(k,v in self.preload){ //如果扩展对象的 language 表指定了对当前语言启用扩展 if(!v.language || v.language[lang]){ //执行扩展对象的 code 属性指定的脚本代码 if(v.code)this.msc.AddCode(v.code); //执行扩展对象的 init 函数 if(v.init)v.init(this.msc); } } } this.reset(); // …… 其他代码省略 }} }

web.script.preload 名字空间下的扩展对象,可选指定以下三个属性:

1、属性 language 可用表对象指定支持哪些语言。

2、属性 code 可用于指定默认加载的脚本代码。

3、属性 init 可指定初始化执行的函数。

然后我们再看一下 web.script.json 扩展库的 aardio 代码:

import web.json;import web.script;namespace web.script.json{};// JavaScript 扩展namespace web.script.preload.json3 { language = { javascript = true; jscript = true; } code = //省略JSON3 源码}// VBScript 扩展namespace web.script.preload.json3vbs { language = { vbscript = true; vbs = true; } init = function(msc){ msc.AddObject("JSON",{ parse = function(...){ return ..web.json.parse(...); }; stringify = function(...){ return ..web.json.stringify(...) }; }) }}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年3月20日 上午8:23
下一篇 2023年3月20日 上午8:33

相关推荐

  • 2021金融行业App内容生态风云榜发布!六大行业活跃度TOP10的App建设发力点揭秘

    21世纪资管研究院研究员李览青 实习生陈夏楠、褚楚 编者按: 随着数字经济发展,新一轮信息技术革命浪潮拉开序幕。在后疫情时代,金融行业数字化转型获得进一步发展,App成为金融机构线…

    科研百科 2023年5月23日
    322
  • 项目管理书籍推荐

    项目管理是一门涉及规划、执行和控制项目活动的学科,对于组织和个人来说都非常重要。随着信息技术的飞速发展,项目管理也迎来了新的机遇和挑战。在这篇文章中,我将向大家推荐一些优秀的项目管…

    科研百科 2024年7月12日
    85
  • 比亚迪秦PLUS DM-i的远程APP控制体验,出行快人一步?

    不知道大家是否有着和我相同的经历?在这种炎炎夏日车辆停放在室外被太阳暴晒之后车内温度会很高,这个时候大家会怎么操作呢?接下来把我的经历分享给大家。 今天的太阳依旧很毒辣,我去4S店…

    科研百科 2023年8月28日
    204
  • 青海省海北藏族自治州推进生态畜牧业

      北倚祁连山,南滨青海湖,青海省海北藏族自治州(以下简称海北州)就坐落于这片山水之间。这里有秀美动人的金银滩草原;有壮观的百里油菜花海;有碧波荡漾的纯净圣湖;有巍巍祁连山下生态大…

    科研百科 2022年5月14日
    544
  • 经费使用管理制度 预算来源(经费使用管理制度)

    经费使用管理制度经费使用管理制度实施后,该县的财政水平达到了惊人的“双减”。该县的财政政策制定时,反映了一系列问题:首先,各地加大财政支出的投入。一方面,首先,提高财政支出的投入,…

    科研百科 2024年9月27日
    21
  • 项目管理系统 破解版

    项目管理系统是一种能够帮助团队高效地协作和推进项目的软件工具。对于企业和个人而言,项目管理系统都是非常重要且必要的。但是,市场上有很多不同的项目管理系统,有些是付费的,有些则是免费…

    科研百科 2024年7月15日
    58
  • 《山东省畜禽粪污专项整治行动实施方案》印发

      山东省畜牧兽医局 山东省环境保护厅aIB   关于印发《山东省畜禽粪污专项整治行动实施方案》的通知aIB   各市畜牧兽医局、环境保护局:aIB   为加快推进全省畜禽粪污资源…

    科研百科 2022年5月18日
    406
  • 省委常委,组织部部长是什么级别

    省委常委,组织部部长是一个相当高级别的职位。在中国的政治体系中,省委常委是高级官员中的一个重要层次,通常担任地方政府和中央部门的重要职务。组织部部长则主要负责组织、规划和管理国家的…

    科研百科 2024年10月17日
    17
  • 会议管理系统方案

    会议管理系统方案 随着现代组织不断发展壮大,会议管理已经成为了组织管理中不可或缺的一部分。一个好的会议管理系统可以提高会议的效率和准确性,帮助组织更好地管理会议。本文将介绍一个会议…

    科研百科 2024年8月23日
    20
  • 超市会员卡管理软件(超市会员卡管理软件有限公司)

    超市会员卡管理软件(超市会员卡管理软件有限公司) 超市会员卡管理软件是一款适合中小型超市使用的会员卡管理软件,会员一键填写会员信息办卡,可以设置会员等级及折扣、会员消费积分、会员卡…

    科研百科 2024年3月25日
    53