下面的代码是使用这个控件运行cmd.exe;
并读取出cmd.exe的初始信息;
但是按常理来理解,应该使用cmd.StdOut.AtEndOfStream来判断是否已经读取完stdout流了,也就是指针是否指向尽头了.
但是测试中却发现,这个方式根本不能使用,一使用,当cmd.exe的status == 0时,就会导致整个hta阻塞,不反应了;
这时就必须关闭启动出来的cmd.exe,hta才能恢复.
所以,目前能想到的方法就是判断已经到了最一个字符就停止读取.
而上面的判断是否到了结束应该是用在status=1时.这时访问这个值时,就能正常;
但是对于使用来说,这样做意义不大,我的本意是想使用hta来实现一个比较人性华的cmd输入接口,可惜目前看来有点麻烦.
cmd.hta测试代码
<!DOCTYPE html>
<html>
<head>
<HTA:APPLICATION INNERBORDER="no" SCROLL="no"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style>
body{padding:0px;margin:0px;width:100%;height:100%;text-align:center;}
#home{width:95%;border:1px solid gray;padding:2px;}
#cmdInput{width:95%;height:200px;border:1px solid gray;padding:5px;overflow:auto;}
#screen{width:95%;height:200px;overfolw:auto;space-white:nowrap;border:1px solid gray;padding:5px;}
</style>
</head>
<body id="body">
<div>
<input id="home" title="当前目录"/>
<textarea id="cmdInput">
s = open('about:blank');
s.document.write('<' + 'textarea οnkeypress="if (event.keyCode==10)eval(this.value);">'+'<' + '/textarea>');
s.opener = window;
</textarea>
</div>
<div>
<p><a href="#1" id="cls">清屏</a></p>
<textarea id="screen"></textarea>
</div>
<script>
var wsh = new ActiveXObject("WScript.Shell");
var cmd = null;
runCmd();
cmdOut();
window.onload = function () {
}
function cmdOut() {
var out = '';
clearInterval(window.cmdOuter);
window.cmdOuter = setInterval(function(){
if (cmd && (!cmd.Status) && (!cmd.StdOut.AtEndOfStream)) {
var c = cmd.StdOut.read(1);
out += c;
document.title= c;
if (c.indexOf('>') > -1) {
clearInterval(window.cmdOuter);
screenShow(out);
}
} else {
clearInterval(window.cmdOuter);
screenShow(out);
}
}, 1);
}
function runCmd() {
if ( (!cmd) || cmd.Status) cmd = wsh.Exec('%comspec% /c cmd.exe');
}
function stopCmd() {
if (cmd && (!cmd.Status) ) cmd.Terminate();
}
function screenShow(str) {
_('screen').value += str;
}
_('cmdInput').onkeypress = function () {
switch(event.keyCode) {
case 10://ctrl+enter
eval(this.value);
break;
}
}
function _(id) {
return document.getElementById(id);
}
_('cls').onclick = function () {
_('screen').value = '';
}
</script>
</body>
</html>