使用Vango框架创建Windows应用程序-前端板块造梦空间论坛-技术交流-造梦空间论坛

使用Vango框架创建Windows应用程序

我们知道,用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。

请登录后发表评论

    没有回复内容

© 造梦空间论坛