文章目录[隐藏]
我们知道,用JavaScript写windows桌面程序很简单,但是性能不好;用C/C++写桌面程序性能虽好,但是似乎“专业不对口”。但是将JavaScript和C结合到一起,是否就可以创造出简单性能又好的windows应用程序呢?
Vango 安装(开源easy-window+开源vgo库)
Vango基于easy-window,推荐前往Gitee下载easy-window源码,然后去Github下载vgo库,将vgo库与easy-window(本体的exe文件)组合在一起。
Vango 启动器
在tools文件夹中,有一个文件叫做start.json,配置如下内容:
{
"app_start_page_url": "文件地址",
"app_kmst_value": "300"
}
app_start_page_url就是要启动的JavaScript脚本(非HTML);
app_kmst_value是允许的最大c库连接数,一般来说是290-310区间,超过450的就会造成卡顿。
Vango 运行原理
首次启动:Vango访问config.ini的文件地址(是vgo自带的文件),会指向Vango.launcher.html文件(启动器),然后启动Vango.load.js(引入配置程序,此处使用的是easywindow自带的API访问文件),然后启动Vango.launch.exe(启动的c脚本),随后将TEMP写入Vango.launch.rule.json(配置文件,包含启动所需要的内容),然后拉起Vango.restart.exe(关闭easy-window窗口并再次打开easy-window)
第二次启动(自动启动):Vango访问config.ini,然后指向Vango.launcher.html,然后启动Vango.next.js(启动文件),然后拉起Vango.launch.exe并吊起JavaScript切入器。
Vango 启动器(l.js)
在vango中,默认有一个psrc的空文件夹,他推荐我们在里面放置脚本。其中强制要求l.js作为启动文件的文件名,其内容应该如下:
fun.importXHTModule("Vango.template.reader");
fun.importXHTModule("Vango.rule");
let app = fun.call("createApp","Vango.rule",connect("utf-8").post("REQUEST INTO V_RULE TEMPLATE_READER='Vango.template.reader' AND TEMPLATE_FILE='*.htm(l)'"));
app.callExec("start","WORK_thread",thread(0));
app.callExec("start","C_thread",thread(1));
let rule = fun.importRuleFileSync("{$home_url}/library/package/windows/windowsUrlRule.json");
app.callUse(rule);
app.useIndexPageLast("/home.html");
上面这是官方的代码,比较深澳,不会用。主要就是最后那个app.useIndexPageLast的参值就是在启动的那个页面,需要是HTML页面,此处用home.html代替。
示例1 (文件操作)
home.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Template</title>
<script>
fun.a; //测试fun是否载入
fun.importXHTModule("Vango.fileContent.js-per"); //引入fileContent的javascript模块
hasFile("abc.txt"); //是否存在abc.txt
hasDir("abc/"); //是否存在abc文件夹
createFile("abc.txt","Hello","utf-8"); //创建abc.txt,参数:文件名(必写)、内容、编码(默认utf-8)
createDir("abc/"); //创建文件夹abc
deleteFile("abc.txt"); //删除abc.txt文件
deleteDir("abc/"); //删除abc文件夹
writeFile("abc.txt","Hello","utf-8"); //读写文件,见createFile,但是createFile在文件存在的情况下会报错
</script>
</head>
<body>
</body>
</html>
示例2(读取内容,可跨域)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Template</title>
<script>
fun.a; //测试fun是否载入
var c = fun.importXHTModule("Vango.fileContent.c-per"); //引入fileContent的c模块
var baidu = base64reader(fun.request(c).post("GET HTTP www.baidu.com"),"utf-8"); //获取www.baidu.com的内容
</script>
</head>
<body>
</body>
</html>
fun.request(c).post("GET HTTP www.baidu.com") 解析:
fun是值vgo的集,request代表向哪个非JavaScript模块传递(例如c-per,c程序;p-per,perl程序),post代表传递的PER-MODULE表达式,他用于向其他不可直接通信的语言传递信息,并获得返回值。per module表达式类似于sql line,其中GET就是指令操作(还有REQUEST传递,POST请求,GET获得,DELETE删除),HTTP是Vango.fileContent的指令,他和后面均为传递的指令内容。
他默认返回一个base64内容,我们需要用vgo功能base64reader进行解析,第二个参数应为“utf-8”。
示例3(实现透明但是可以拉伸的窗口)
在easy-window中,无法在透明的情况下对程序窗口进行拉伸,我们可以用Vango.parseWindowFrame.resize库进行管理。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Template</title>
<script>
fun.a; //测试fun是否载入
var c = fun.importXHTModule("Vango.parseWindowFrame.resize.js-per"); //引入resize的js模块
window.onload = function(){
c.canResizeWindow("#main");
}
</script>
</head>
<body>
<div style="width: 500px;height: 500px;background: red;" id="main">
Hello
</div>
</body>
</html>
这样就可以在上下左右,左上,左下,右上,右下进行拉伸。并且在其中可以用fun.longPositionChangeFD(this)来代替external。
没有回复内容