用hta实现的hosts文件编辑器

发布时间:2019-08-15编辑:脚本学堂
用hta实现的hosts文件编辑器。

用hta实现的hosts文件编辑器,文件名hosts.hta,源代码如下:
<HTML>
<HEAD>
<TITLE>用hta实现的hosts文件编辑器</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Content-Language" content="zh-CN">
<HTA:APPLICATION ID="hostedit"
APPLICATIONNAME="hostedit"
BORDER="thick"
BORDERSTYLE="normal"
CAPTION="yes"
ICON="C:WINDOWSsystem32rasphone.exe"
MAXIMIZEBUTTON="yes"
MINIMIZEBUTTON="yes"
SHOWINTASKBAR="yes"
SINGLEINSTANCE="yes"
SYSMENU="yes"
VERSION="1.0"
WINDOWSTATE="normal" />
<script language="JScript">
window.onerror = function ()
{
window.alert("程序发生了未知错误,当前窗口将被关闭!");
window.close();
return true;
}
var windowW=450; //窗体宽
var windowH=200; //窗体高
var canresize=false;//是否可以改变大小
var windowW2=windowW;//编辑时窗体宽
var windowH2=200;//编辑时窗体高
window.resizeTo(windowW,windowH);
//window.moveTo((screen.width-windowW)/2,(screen.height-windowH)/2);
window.onresize=function(){if(!canresize)window.resizeTo(windowW,windowH);}
function init()
{
var ui_table = document.getElementById('UI_TABLE');
var bestHeight = 70+ui_table.scrollHeight;
if(bestHeight > screen.height) bestHeight = screen.height;
window.resizeTo(windowW, bestHeight);
//window.moveTo((screen.width-windowW)/2,(screen.height-bestHeight)/2);
}
var hostfile = 'driversetchosts';
function getlist(){
var html='';
var ids='';
var i=1;
FSO = new ActiveXObject("Scripting.FileSystemObject");
var spath = FSO.GetSpecialFolder(1)+hostfile;
host = FSO.OpenTextFile(spath, 1, false);
while(!host.AtEndOfStream){
tmp = host.ReadLine();
if(/^#?d{1,3}.d{1,3}.d{1,3}.d{1,3}s+([a-zA-Z0-9-]+.[a-zA-Z0-9-]+(.(com|net|org|edu|info|biz|cc|tv|gov|mobi|name|cn|en|us|hk|tw))+)$/.test(tmp))
{
as=tmp.replace(/s+/,'|:|').split('|:|');
ids+='['+i+'],';
if(/^#/.test(as[0])){
zt = '外网';
ip = as[0].replace(/^#/,'');
co = '#eee!important';
cz = '<a href="#" style="color:red;" onclick="zh('+i+',0);">切本地</a> | <a href="#" style="color:red;" onclick="ed(this,'+i+');">编辑</a> | <a href="#" style="color:red;" onclick="zh('+i+',2);">删除</a>';

}else{
zt = '本地';
ip = as[0];
co = '#fff!important';
cz = '<a href="#" onclick="zh('+i+',1);">切外网</a> | <a href="#" style="color:red;" onclick="ed(this, '+i+');">编辑</a> | <a href="#" style="color:red;" onclick="zh('+i+',2);">删除</a>';
}

html += '<tr><td style="background:'+co+';">'+zt+'</td><td style="background:'+co+';text-align:left;text-indent:6px;">'+as[1]+'</td><td style="text-align:left;text-indent:6px;background:'+co+';">'+ip+'</td><td style="background:'+co+';">'+cz+'</td></tr>';
}
i++;
}
var o=document.getElementById('ids');
o.value=ids;
host.Close();
return html;
}

function ed(eo, iId){
document.getElementById('editId').value=iId;
document.getElementById('pIP').value=eo.parentElement.parentElement.children[2].innerText;
document.getElementById('pURL').value=eo.parentElement.parentElement.children[1].innerText;
document.getElementById('addButt').style.display='none';
document.getElementById('editButt').style.display='inline';
document.getElementById('HostList').style.display='none';
document.getElementById('addHost').style.display='block';
window.resizeTo(windowW2,windowH2);
}

function edits(sIp, sUrl){
var oi=document.getElementById(sIp);
var ou=document.getElementById(sUrl);
if(oi.value=='' || /^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/.test(oi.value)==false) {
alert('IP地址不能为空或你输入的IP格式错误.');
oi.focus();
return;
}
if(ou.value=='' || /^[a-zA-Z0-9-]+.[a-zA-Z0-9-]+(.(com|net|org|edu|info|biz|cc|tv|gov|mobi|name|cn|en|us|hk|tw))+$/.test(ou.value)==false) {
alert('域名不能为空或你输入的域名格式错误.');
ou.focus();
return;
}
var iId = document.getElementById('editId').value;
var body='';
var i=1;
FSO = new ActiveXObject("Scripting.FileSystemObject");
var spath = FSO.GetSpecialFolder(1)+hostfile;
host = FSO.OpenTextFile(spath, 1, false);
while(!host.AtEndOfStream){
tmp = host.ReadLine();
if(i==iId)
{
body+=oi.value+"t"+ou.value+"n";
}
else{
body+=tmp+"n";
}
i++;
}
host.close();
svf = FSO.OpenTextFile(spath, 2, false);
svf.Write(body);
svf.close();
window.location.reload();
}

function zh(irs,stype)
{
var body='';
var i=1;
FSO = new ActiveXObject("Scripting.FileSystemObject");
var spath = FSO.GetSpecialFolder(1)+hostfile;
host = FSO.OpenTextFile(spath, 1, false);
while(!host.AtEndOfStream){
tmp = host.ReadLine();
if(i==irs)
{
if(stype==0){
body+=tmp.replace(/^#/,'');
body+="n";
}else if(stype==1){
if(/^#/.test(tmp)){
body+=tmp+"n";
}else{
body+='#'+tmp +"n";
}
}else{

}
}
else{
body+=tmp+"n";
}
i++;
}
host.close();
svf = FSO.OpenTextFile(spath, 2, false);
svf.Write(body);
svf.close();
window.location.reload();
}

function zhall(stype)
{
var body='';
var i=1;
var ids1=document.getElementById("ids").value;
if(ids1=='') return;
FSO = new ActiveXObject("Scripting.FileSystemObject");
var spath = FSO.GetSpecialFolder(1)+hostfile;
host = FSO.OpenTextFile(spath, 1, false);
while(!host.AtEndOfStream){
tmp = host.ReadLine();
if(stype==0 && ids1.indexOf('['+i+'],')!== -1){
body+=tmp.replace(/^#/,'');
body+="n";
}else if(stype==1 && ids1.indexOf('['+i+'],')!== -1){
if(/^#/.test(tmp)){
body+=tmp+"n";
}else{
body+='#'+tmp +"n";
}
}else{
body+=tmp+"n";
}
i++;
}
host.close();
svf = FSO.OpenTextFile(spath, 2, false);
svf.Write(body);
svf.close();
window.location.reload();
}

function AddHosts(sIp, sUrl){
var oi=document.getElementById(sIp);
var ou=document.getElementById(sUrl);
if(oi.value=='' || /^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/.test(oi.value)==false) {
alert('IP地址不能为空或你输入的IP格式错误.');
oi.focus();
return;
}
if(ou.value=='' || /^[a-zA-Z0-9-]+.[a-zA-Z0-9-]+.((net)|(com)|(cn)|(org)|(cc)|(tv))$/.test(ou.value)==false) {
alert('域名不能为空或你输入的域名格式错误.');
ou.focus();
return;
}

FSO = new ActiveXObject("Scripting.FileSystemObject");
var spath = FSO.GetSpecialFolder(1)+hostfile;
host = FSO.OpenTextFile(spath, 8, false);
host.Write("n"+oi.value+"t"+ou.value+"n");
host.close();
alert('增加域名成功!');
window.location.reload();
}
</script>
<style>
body{
background-color:#99CCFF;
}
body *{
font-size:12px;
margin:0px;
padding:0px;
}
.BUTT{
BORDER: #2C59AA 1px solid;
FONT-SIZE: 12px;
COLOR: black;
FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff, EndColorStr=#C3DAF5);
height:22px;
padding: 3px 5px 0px;
text-decoration: none;
}
.edit{
BORDER: #2C59AA 1px solid;
padding:1px;
}
#UI_TABLE{
width:99%;cell-spacing:0px; margin:1px; border-collapse:collapse; border:1px solid #7d7d7d;
}
#UI_TABLE tr.TopTitle{
text-align:center;
}
#UI_TABLE tr.TopTitle td {
background-color:#C8E2F7;
}
#UI_TABLE tr td{
border:1px solid #7d7d7d;text-align:center;padding:1px;
}
</style>
</HEAD>
<BODY onLoad="init()" oncontextmenu="return false;" style="text-align:center; margin:0px;overflow-y:auto;overflow-x:hidden;border:none;background:menu;">
<div id="HostList">
<input type="hidden" name="ids"/>
<table id="UI_TABLE" >
<tr class="TopTitle">
<td>状态</td>
<td style="width:140px;">域名</td>
<td>IP地址</td>
<td style="width:140px;">操作</td>
</tr>
<script language="javascript" type="text/JavaScript">
document.writeln(getlist());
</script>
</table>
<div style="margin:6px;text-align:center;">
<input type="button" value="全部切本地" name="b4" onclick="zhall(0);" class="BUTT" />
<input type="button" value="全部切外网" name="b5" onclick="zhall(1);" class="BUTT" />
<input type="button" value="增加域名" name="b6" onclick="document.getElementById('HostList').style.display='none';document.getElementById('addHost').style.display='block'; window.resizeTo(windowW2,windowH2);" class="BUTT" />
</div>
</div>
<div id="addHost" style="display:none;">
<input type="hidden" name="editId" name="editId" />
<div style="text-align:left;margin:30px auto 0px; width:300px;">IP地址:<input type="text" name="pIP" id="pIP" class="edit" /> <input type="button" value="127.0.0.1" name="b2" onclick="document.getElementById('pIP').value='127.0.0.1';" class="BUTT" /></div>
<div style="text-align:left;margin:20px auto; width:300px;">域 名:<input type="text" name="pURL" id="pURL" class="edit" /></div>
<div style="margin:10px;text-align:center;">
<input type="button" value="提 交" name="b1" id="addButt" onclick="AddHosts('pIp','pURL');" class="BUTT" />
<input type="button" value="编 辑" name="b2" id="editButt" style="display:none;" onclick="edits('pIp','pURL');" class="BUTT" />
<input type="button" value="返 回" name="b3" onclick="window.location.reload();" class="BUTT" />
</div>
</div>
<script>
//屏蔽部分键盘操作,比如 F5
function document.onkeydown()
{wek=window.event.keyCode;
if((window.event.altKey)&&((wek==37)||(wek==39)))
{window.alert("Error:Invalid operation!");event.returnValue=false;}
if((wek==116)||(event.ctrlKey&&wek==82))
{window.event.keyCode=0;event.returnValue=false;}
if((event.ctrlKey)&&(wek==78))
event.returnValue=false;
if((event.shiftKey)&&(wek==121))
event.returnValue=false;
if(window.event.srcElement.tagName=="A"&&window.event.shiftKey)
window.event.returnValue=false;
if((window.event.altKey)&&(wek==115))
{window.showModelessDialog("about:blank","","dialogWidth:1px;dialogheight:1px");return false;}
if(wek==122){window.event.keyCode=0;window.alert("Error:Invalid operation!");return false;}
}
</script>
</BODY>
</HTML>