看了标题,用html和javascript快速开发win32程序,大家都会有点疑问,html和javascript能用来开发win32程序吗?答案是可以的,对于搞C++、java、C#的程序,这个是很轻松的,但对于那些只会搞前端的朋友们就太难了。
但是本文对于只会搞html的朋友们来说可算是福音了,本文用的是一个叫NetBox的框架,这个框架使用的语言是vbscript,其本身是由c++开发的(NetBox的介绍本文就不细说了,网上有介绍资料。NetBox开发团队数年前就已经解散了,但NetBox框架仍然在改进,扩充了很多原有没有的能力,如多线程、串口等,也封装json,让操作json比起C#、java之类的要更加的容易)
- 下边介绍一下NetBox的基础语法:
NetBox 程序的执行以 main.box 最为主程序名,执行的目录即为执行程序所在的目录。NetBox 的执行程序在初始化完毕,既查找 main.box 文件,如果找到,则进行装载并运行。下面我们按步骤建立第一个新的 NetBox 程序。
第一步:准备环境
在你愿意的位置创建一个新的目录,比如:
d:\hello
第二步:编写主程序
使用任何一个文本编辑软件(你当然可以使用 Notpad)新建一个文件,输入下面的代码:
Shell.Console.WriteLine "Hello!!"
Shell.Console.ReadLine
将文件存在刚才的目录下,命名为 main.box。
这时双击此文件开始运行,会发现控制台窗口停留在屏幕上面,回车后便消失。至于控制台所显示的内容,相信你猜得出来,是:
Hello!!
第三步:进阶
既然已经得到想要的内容,那么我们开始来修改这个小程序,让它有机会更快。修改 main.box 为下面的内容:
Set Console = Shell.Console
Console.WriteLine "Hello!!"
Console.ReadLine
在这段代码里面,我先用 Console 得到 Shell.Console 对象,后面的操作直接使用 Console 而不是 Shell.Console,据说这样可以提高执行速度,经过测试,的确也是如此。
可创建对象
除各种运行状态的内建对象以外,NetBox 还提供了大量的可创建对象用于构建功能强大的应用软件。详细的对象参考可以查询对象参考。
一般情况下,可以使用 NetBox 对象的 CreateObject 方法创建对象,比如,我们需要创建一个二进制文件对象,可以使用下面的语句:
Set bin = NetBox.CreateObject("NetBox.File")
或者如果是 Javascript 的话使用下面的语句:
var bin = NetBox.CreateObject("NetBox.File");
如果在 HTTP 服务器脚本程序中,为了兼容,也提供了 Server 对象的 CreateObject 方法,同样的,可以用下面的方法创建二进制文件对象:
Set bin = Server.CreateObject("NetBox.File")
或者如果是 Javascript 的话使用下面的语句:
var bin = Server.CreateObject("NetBox.File");
其效果完全等同于使用 NetBox 对象的 CreateObject 方法创建对象。
最后一种方法,也是最方便通用的一种方法是直接使用脚本语言内含的创建方法创建对象,可以在任何脚本状态使用。比如:
Set bin = CreateObject("NetBox.File")
或者如果是 Javascript 的话使用下面的语句:
var bin = new ActiveXObject("NetBox.File");
上面的三种对象的创建方式功能完全相同,可以任意选择使用自己习惯的方式。
脚本对象
除了使用 NetBox 提供的对象以外,你还可以自行创建并注册使用自己的对象,方法就是使用脚本对象技术。
由于NetBox使用的开发语言是vbscript,所以,其他不明白的地方请参考vbscript的语法。
- 创建应用程序界面
NetBox创建应用程序界面,使用的是NetBox内置的对象HtmlWindow。使用HtmlWindow可以直接用html去画一个页面,用这个页面来显示应用程序界面。
我们先来一个html页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<link rel=stylesheet type=text/css href="resource/reset.css">
<link rel=stylesheet type=text/css href="resource/style.css">
<script language="javascript" src="resource/jquery.js"></script>
<script language="javascript" src="resource/common.js"></script>
<script language="javascript" src="resource/datefun.js"></script>
<style>
body {
background: #FFFFFF;
font-size: 14px;
}
</style>
<script type="text/javascript">
function check()
{
if(document.getElementById("name").value=="")
{
alert("姓名不能为空!");
document.getElementById("name").focus();
return false;
}
document.getElementById("status").innerHTML = "姓名:" + document.getElementById("name").value;
}
</script>
</head>
<body>
<p>姓名:<input type="text" id="name" /></p>
<p id="status"></p>
<p><button onclick="check()">测试</button></p>
</body>
</html>
html页面我们准备好了,那么我们来看NetBox的代码(命名为main.box):
Set htWin= CreateObject("NetBox.HtmlWindow")
htWin.Icon = "\icon.ico"
htWin.MaximizeBox=false
htWin.border=true
htWin.resizable=false
htWin.Title="测试"
htWin.Visible = True
htWin.scrollbar=false
htWin.Width=640
htWin.Height=480
htWin.Open "netbox:/ui.html",me
htWin.center
htWin.ShowDialog
Shell.DoEvents
Shell.Halt 0
语法
Set htWin = CreateObject("NetBox.HtmlWindow")
对象
Browser | 查询 HtmlWindow 中的 WebBrowser 对象 |
属性
AllowClose | 指定是否允许用户关闭本窗口,缺省为 true,允许关闭 |
Argument | 获取 HTML 窗口打开 URL 时传递的参数 |
border | 查询和设定窗口是否有边框,为 True 则有边框。缺省为 True |
Caption | 查询和设定窗口是否有标题栏,为 True 则有标题栏。缺省为 True |
clientHeight | 查询窗口用户区域的高度 |
clientWidth | 查询窗口用户区域的宽度 |
DropShadow | 设定和查询窗口是否显示阴影,需要 Windows XP 以上的系统支持 |
ContextMenu | 查询和设定窗口是否允许上下文菜单,为 True 则允许上下文菜单。缺省为 True |
Height | 查询和设定当前窗口的高度 |
HWND | 查询窗口的系统句柄 |
Icon | 加载图标到对象中,支持的图标格式为:BMP (bitmap), JPEG, WMF (metafile), ICO (icon), GIF |
LayeredAlpha | 设定和查询窗口半透明值,需要 Windows 2000 以上的系统支持 |
Left | 查询和设定当前窗口左上角 x 值 |
MaximizeBox | 查询和设定窗口是否有最大化按钮,为 True 则有最大化按钮。缺省为 True |
Maximized | 查询和设定窗口是否有是最大化状态,为 True 则是最大化状态。缺省为 False |
MinimizeBox | 查询和设定窗口是否有最小化按钮,为 True 则有最小化按钮。缺省为 True |
Minimized | 查询和设定窗口是否有是最小化状态,为 True 则是最小化状态。缺省为 False |
resizable | 查询和设定窗口是否可以自由改变尺寸,为 True 则可以自由改变尺寸。缺省为 True |
scrollbar | 查询和设定窗口是否有滚动条,为 True 则有滚动条。缺省为 True |
Title | 查询和设定当前窗口的标题文本 |
ToolWindow | 查询和设定窗口是否是工具窗口,为 True 则是工具窗口。缺省为 False |
Top | 查询和设定当前窗口左上角 y 值 |
TopMost | 查询和设定窗口是否是顶层窗口,为 True 则是顶层窗口。缺省为 False |
Width | 查询和设定当前窗口的宽度 |
WindowEdge | 查询和设定窗口是否有内陷边框,为 True 则有内陷边框。缺省为 False |
Visible | 查询和设定窗口是否显示,为 True 则显示。缺省为 False |
方法
center | 将当前窗口定位到屏幕中央 |
close | 关闭当前窗口 |
drag | 以指定的方式拖动窗口 |
EndDialog | 关闭当前窗口并设定返回值 |
isClosed | 检查当前对象的窗口是否已经关闭 |
isActived | 检查当前对象的窗口是否是当前激活的窗口 |
focus | 将活动焦点设定到当前窗口 |
moveTo | 移动当前窗口到指定位置,参数窗口左上角的目标位置 |
moveWindow | 同时指定窗口的位置和大小 |
Open | 在当前窗口打开给定 url 的 HTML 资源 |
OpenModalDialog | 快捷方法,创建并运行一个对话框窗口,返回结果 |
resizeTo | 设定当前窗口到指定的大小 |
SetTransparentMask | 设定窗口的透明模版和拉伸模式 |
showDialog | 显示激活当前窗口,并等待窗口关闭 |
注释
此对象用于创建基于 WEB 和 HTML 技术的桌面应用程序,通过使用 HTML,可以方便迅速的创建丰富多彩的用户操作界面。
在创建 HTML 窗口时,可以为窗口指定一个 URL,此 URL 通常可以是 http:,也可以使用 netbox: 协议直接使用 NetBox 应用程序的内部文件,以方便发布和部署。
在连接了 URL 以后,页面 HTML 内的 Javascript 或者 VBScript 可以使用 window.external 访问和操作窗口本身。
打开main.box,会发现界面上的出现了如下图所示的
- 上面的main.box还只是个box程序,但其依赖NetBox环境,我们要把程序发布到非NetBox环境里,那就需要编译成exe程序了
单击NetBox Deployment Wizard,启动打包程序(桌面会有快捷方式)。大家也看到上边的程序的图标是.b,那是由于没有设置ico导致,下边的截图是设置了ico的。
(ps:此功能是NetBox历史版本上没有的,后续的版本里没有对外开放,这个版本里对只能识别打包的3个ico文件,多了是无法识别)
到这里,就用NetBox编译了一个能够发布到其他Windows平台的win32程序,从winXP开始的系统,都是可以正常运行,XP以下的暂未测试。