这几天不能访问的时候把硬盘上的东东复习了一遍,找出了这个东西出来,由于水平有限,而且对DHTML没有什么研究,所以做得很是粗糙,贴上来是为了抛砖引玉,希望有高人能帮忙修改或拿出更优秀的东东出来。
测试环境为windows XP 专业版 SP2,暂时发现代码着色方面有Bug,虽然已有解决方法,不过由于代码量的原因(用记事本写代码真的很恼火),暂时未纠正,另外预计将来加入自动完成等功能。
ps:利用VBS脚本+DHTML,主要功能由正则表达式+wmic来完成,代码需保存为HTA类型的文件,当然也可以更改为纯粹的VBS脚本,不过那样效率低多了,而且代码更复杂。
复制代码 代码如下:
HTML>
HEAD>
title>代码编辑器/title>
HTA:APPLICATION selection="no" SCROLL="no" contextMenu="no" />
SCRIPT LANGUAGE="VBSCRIPT">
'*******************************************************************'
'脚本开始
'*******************************************************************'
Set shell=CreateObject("WScript.Shell")
Set fso=CreateObject("Scripting.FileSystemObject")
'*******************************************************************'
'遍历本地所有类型文件
'*******************************************************************'
Sub OptionAdd(fExt)
str = "select size=""1"" name=""objOption"" onChange=""TestSub"">"
Set objDataFiles = GetObject("winmgmts:" _
"{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colFiles = objDataFiles. _
ExecQuery("Select * from CIM_DataFile where extension = '" fExt "'")
For Each objFile in colFiles
str = str "option value=""" objFile.name """>" _
objFile.name "/option>"
next
str = "label>本地脚本文件:/label>" str "/select>"
forOption.innerHTML = str
end Sub
'*******************************************************************'
'颜色转换
'*******************************************************************'
Sub ChangeColor
if cxs.value = "vbs" then
WinMain.innerHTML = ChangeVBS(WinMain.innerText)
else 'CMD脚本
WinMain.innerHTML = ChangeCMD(WinMain.innerText)
end if
end Sub
'*******************************************************************'
'VBS转换模块
'*******************************************************************'
Function ChangeVBS(sText)
Set re=new RegExp
re.IgnoreCase =true
re.Global=true
'注释转换
re.Pattern = "(\'.*)rn"
sText = re.Replace(sText,"font color=#339999>$1/font>p>")
'转换符号为[蓝色]
re.Pattern = "((|)||+|-|*|%|:|;|.|""" ")"
sText = re.Replace(sText,"font color=#993333>$1/font>")
sText = "table >tr>td width='1024' " _
"style='word-break:break-all'>ol type=1>" _
"br />li>" sText "/table>"
sText = Replace(sText,chr(13) chr (10) ," /li>li> ")
'转换保留字为[蓝色]
re.Pattern="(\bAnd\b|\bByRef\b|\bByVal\b|\bCall\b" _
"|\bCase\b|\bClass\b|\bConst\b|\bDim\b|\bDo\b" _
"|\bEach\b|\bElse\b|\bElseIf\b|\bEmpty\b|\bEnd\b" _
"|\bEqv\b|\bErase\b|\bError\b|\bExit\b|\bExplicit\b" _
"|\bFalse\b|\bFor\b|\bFunction\b|\bGet\b|\bIf\b|\bImp\b" _
"|\bIn\b|\bIs\b|\bLet\b|\bLoop\b|\bMod\b|\bNext\b|\bNot\b" _
"|\bNothing\b|\bNull\b|\bOn\b|\bOption\b|\bOr\b|\bPrivate\b" _
"|\bProperty\b|\bPublic\b|\bRandomize\b|\bReDim\b|\bRem\b" _
"|\bResume\b|\bSelect\b|\bSet\b|\bStep\b|\bSub\b|\bThen\b" _
"|\bTo\b|\bTrue\b|\bUntil\b|\bWend\b|\bWhile\b|\bXor\b|Vb[a-z]*)"
sText=re.Replace(sText,"font color=blue>$1/font>")
'转换函数和对象为[红色]
re.Pattern="(\bAnchor\b|\bArray\b|\bAsc\b|\bAtn\b" _
"|\bCBool\b|\bCByte\b|\bCCur\b|\bCDate\b|\bCDbl\b" _
"|\bChr\b|\bCInt\b|\bCLng\b|\bCos\b|\bCreateObject\b" _
"|\bCSng\b|\bCStr\b|\bDate\b|\bDateAdd\b|\bDateDiff\b" _
"|\bDatePart\b|\bDateSerial\b|\bDateValue\b|\bDay\b" _
"|\bDictionary\b|\bDocument\b|\bElement\b|\bErr\b|\bExp\b" _
"|\bFileSystemObject \b|\bFilter\b|\bFix\b|\bInt\b|\bForm\b" _
"|\bFormatCurrency\b|\bFormatDateTime\b|\bFormatNumber\b" _
"|\bFormatPercent\b|\bGetObject\b|\bHex\b|\bHistory\b|\bHour\b" _
"|\bInputBox\b|\bInStr\b|\bInstrRev\b|\bIsArray\b|\bIsDate\b" _
"|\bIsEmpty\b|\bIsNull\b|\bIsNumeric\b|\bIsObject\b|\bJoin\b" _
"|\bLBound\b|\bLCase\b|\bLeft\b|\bLen\b|\bLink\b|\bLoadPicture\b" _
"|\bLocation\b|\bLog\b|\bLTrim\b|\bRTrim\b|\bTrim\b|\bMid\b" _
"|\bMinute\b|\bMonth\b|\bMonthName\b|\bMsgBox\b|\bNavigator\b" _
"|\bNow\b|\bOct\b|\bReplace\b|\bRight\b|\bRnd\b|\bRound\b" _
"|\bScriptEngine\b|\bScriptEngineBuildVersion\b" _
"|\bScriptEngineMajorVersion\b|\bScriptEngineMinorVersion\b" _
"|\bSecond\b|\bSgn\b|\bSin\b|\bSpace\b|\bSplit\b|\bSqr\b" _
"|\bStrComp\b|\bString\b|\bStrReverse\b|\bTan\b|\bTime\b" _
"|\bTextStream\b|\bTimeSerial\b|\bTimeValue\b|\bTypeName\b" _
"|\bUBound\b|\bUCase\b|\bVarType\b|\bWeekday\b|\bWeekDayName\b" _
"|\bWindow\b|\bYear\b|\bWscript\b)"
sText=re.Replace(sText,"font color=red>$1/font>")
ChangeVBS = sText
end Function
'*******************************************************************'
'CMD转换模块
'*******************************************************************'
Function ChangeCMD(sText)
Set re=new RegExp
re.IgnoreCase =true
re.Global=true
'等号转换
'sText = Replace(sText,"/","font color=#FF0000>//font>")
re.Pattern = "(\%|\=|\/[a-z]*\b|\&;|\|\|)"
sText = re.Replace(sText,"font color=#FF8C00>$1/font>")
'注释转换
re.Pattern = "(Rem\b.*\r\n|\bRem\b.*)"
sText = re.Replace(sText,"font color=#20B2AA>$1/font>")
'改变符号的颜色
re.Pattern = "(\(|\)|\|\+|\-|\*|\;|\""" ")"
sText = re.Replace(sText,"font size=5 color=#9932CC>$1/font>")
'改变所有命令的颜色
re.Pattern = "(bShareb|bSetverb|bNlsfuncb|bMemb|bLhb" _
"|bLoadhighb|bloadfixb|bGraphicsb|bForcedosb" _
"|bFastopenb|bExe2binb|bEdlinb|bEdlinb|bEditb" _
"|bDebugb|bDebugb|bAppendb|bSwitchesb|bStacksb" _
"|bShellb|bNtcmdpromptb|bLastdriveb|bInstallb" _
"|bFilesb|bFcbsb|bEchoconfigb|bDriveparmb|bDosonlyb" _
"|bDosb|bDevicehighb|bDeviceb|bCountryb|bBuffersb" _
"|bXcopyb|bWMICb|bWinnt32b|bWinntb|bW32tmb" _
"|bVssadminb|bVolb|bVerifyb|bVerb|bUnlodctrb" _
"|bTypeperfb|bTypeb|bTreeb|bTracertb|bTracerptb" _
"|bTitleb|bTimeb|bTftpb|bTelnetb|bTcmsetupb" _
"|bTasklistb|bTaskkillb|bSfcb|bSysteminfob|bSubstb" _
"|bStartb|bSortb|bShutdownb|bShiftb|bSetlocalb|bSetb" _
"|bSeceditb|bSchtasksb|bScb|bRunasb|bRsmb|bRshb" _
"|bRouteb|bRmdirb|bRexecb|bResetb|bReplaceb|bRenameb" _
"|bRelogb|bRegsvr32b|bRegb|bRecoverb|bRcpb|bRasdialb" _
"|bQueryb|bPushdb|bPromptb|bPrnqctlb|bPrnportb" _
"|bPrnmngrb|bPrnjobsb|bPrndrvrb|bPrncnfgb|bPrintb" _
"|bPopdb|bPingb|bPerfmonb|bPentntb|bPbadminb|bPauseb" _
"|bPathpingb|bPathb|bPagefileconfigb|bOpenfilesb|bNtsdb" _
"|bNtcmdpromptb|bNtbackupb|bNslookupb|bNetstatb|bNetshb" _
"|bNetb|bNbtstatb|bMsinfo32b|bMsiexecb|bMoveb" _
"|bMountvolb|bMoreb|bModeb|bMmcb|bMdb|bMkdirb" _
"|bMacfileb|bLprb|bLpqb|bLogmanb|bLodctrb|bLabelb" _
"|bIrftpb|bIpxrouteb|bIpseccmdb|bIpconfigb|bIfb" _
"|bHostnameb|bHelpctrb|bHelpb|bGraftablb|bGpupdateb" _
"|bGpresultb|bGotob|bGetmacb|bFtypeb|bFtpb|bFsutilb" _
"|bFormatb|bForb|bFlattempb|bFingerb|bFindstrb|bFindb" _
"|bFcb|bExpandb|bExitb|bEvntcmdb|bEventtriggersb" _
"|bEventqueryb|bEventcreateb|bEndlocalb|bEchob" _
"|bDriverqueryb|bDoskeyb|bDiskPartb|bDiskcopyb" _
"|bDiskcompb|bDirb|bDelb|bDefragb|bDateb|bCScriptb" _
"|bCprofileb|bCopyb|bConvertb|bCompactb|bCompb" _
"|bCmstpb|bCmdb|bClsb|bCipherb|bChkntfsb|bChkdskb" _
"|bChdirb|bChcpb|bChangeb|bCallb|bCaclsb|bBreakb" _
"|bBootcfgb|bAttribb|bAtmadmb|bAtb|bAssocb|bArpb)"
sText=re.Replace(sText,"font color=blue>$1/font>")
sText = "table>td width=""1024"" " _
"style=""word-break:break-all"">ol type=1>" _
"br />li>" sText "tr>/table>"
sText = Replace(sText,chr(13) chr (10) ," /li>li> ")
ChangeCMD = sText
end Function
'*******************************************************************'
'帮助窗口
'*******************************************************************'
set oPopup = window.createPopup
sub HelpWindow
if usehelp.checked then
set oPopBody = oPopup.document.body
oPopBody.style.backgroundColor = "lightyellow"
oPopBody.style.border = "solid black 1px"
oPopBody.innerHTML = "帮助功能未完成,取消帮助见右下角"
oPopup.show WinMain.offsetleft, _
WinMain.offsettop + WinMain.offsetheight - 20, _
WinMain.offsetWidth, 20, document.body
end if
end sub
'*******************************************************************'
'运行代码
'*******************************************************************'
Sub RunCode
if cxs.value = "vbs" then
tmpfile = "temp_script.vbs"
str = tmpfile
else
tmpfile = "temp_script.bat"
str = "cmd /k " tmpfile
end if
Set file = fso.OpenTextFile(tmpdir tmpfile,2,True)
file.Write WinMain.innerText
file.Close
shell.Run str
End Sub
'*******************************************************************'
'保存文件
'*******************************************************************'
Sub SaveFile
Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
objDialog.FileName = Cstr(date)
if cxs.value = "vbs" then
objDialog.FileType = ".vbs"
else
objDialog.FileType = ".bat"
end if
intReturn = objDialog.OpenFileSaveDlg
If intReturn Then
Set objFile = fso.CreateTextFile( _
objDialog.FileName objDialog.FileType)
objFile.WriteLine WinMain.innerText
objFile.Close
end if
end Sub
'*******************************************************************'
'打开文件
'*******************************************************************'
Sub OpenFile
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "bat文件|*.bat;*.cmd|vbs 文件|*.vbs|所有文件|*.*"
'objDialog.MaxFileSize = 10000
'objDialog.FilterIndex = 1
'objDialog.InitialDir = ""
objDialog.ShowOpen
'strLoadFile = objDialog.FileName
If len(trim(objDialog.FileName)) = 0 Then Exit Sub
Set objFile = fso.OpenTextFile(objDialog.FileName,1,True)
WinMain.innerText = objFile.ReadAll
end Sub
'*******************************************************************'
'启动时自动移动到屏幕中心
'*******************************************************************'
Sub Window_OnLoad()
self.ResizeTo 1,1
self.MoveTo 300,300
'显示一个窗口
Set objWindow = window.Open("about:blank","ProgressWindow","height=15,width=250,left=300,top=300,status=no,titlebar=no,toolbar=no,menubar=no,location=no,scrollbars=no")
With objWindow
.Focus()
.ResizeTo 250,15
.document.body.style.fontFamily = "Helvetica"
.document.body.style.fontSize = "11pt"
.document.writeln "html>body>正在搜索本地文件..../body>/html>"
.document.title = "请稍侯..."
.document.body.style.backgroundColor = "buttonface"
.document.body.style.borderStyle = "none"
.document.body.style.marginTop = 15
end With
'如果系统并非XP,IE不为6.0版本则退出
strWindowsVer = shell.RegRead _
("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionProductName")
strIeVer = shell.RegRead _
("HKLMSOFTWAREMicrosoftInternet ExplorerVersion")
if strWindowsVer > "Microsoft Windows XP" or _
left(strIeVer,3) > "6.0" then
intFlag = msgbox("操作系统不是XP或者IE版本低于6.0,是否退出?",1)
if intFlag = 1 then
self.close
else
Began
end if
else
Began
end if
objWindow.Close
End Sub
Sub Began
OptionAdd "bat"
intLeft = (document.parentwindow.screen.availwidth - 800) / 2
intTop = (document.parentwindow.screen.availheight - 600) / 2
window.resizeTo 800,650
window.moveTo intLeft, intTop
end Sub
'*******************************************************************'
'搜索本地脚本
'*******************************************************************'
Sub TestSub
Set objFile = fso.OpenTextFile(objOption.value,1,True)
WinMain.innerText = objFile.ReadAll
end Sub
'*******************************************************************'
'擦屁股
'*******************************************************************'
Sub Window_OnBeforeUnload()
On Error Resume Next
fso.DeleteFile "temp_script.vbs",True
fso.DeleteFile "temp_script.bat",True
Set shell = Nothing
Set fso = Nothing
set oPopup= Nothing
End Sub
'*******************************************************************'
'清空代码
'*******************************************************************'
Sub Clear
WinMain.innerText = ""
'WinMain.innerHTML = ""
end Sub
'*******************************************************************'
'复制到剪贴板
'*******************************************************************'
Sub ClipBoard
window.clipboardData.SetData "text", WinMain.innerHTML
end Sub
/SCRIPT>
/HEAD>
body>
style type="text/css">
* { padding:0; border:0; overflow:hidden; font:16px Arial;}
html,body { height:100%; margin:0;}
#box_2 { height:100%; background:#ccc;}
/style>
center>
div style="font-family: Trebuchet MS; font-weight:bold;">
span style="font-size: 18pt;">代码编辑器/span>
span style="font-size: 8pt;">Ver 1.0 by
a href="http://www.cn-dos.net/forum/forumdisplay.php?fid=23">
3742668/a>nbsp;nbsp;nbsp;a href="mailto:3742668@gmail.com">
我的信箱/a>/span>br>/div>/center>br> div contentEditable
STYLE="padding:2; overflow:auto;background-color:lightyellow;
width:100%; height:70%;" ID="WinMain" onkeyup="HelpWindow">
/div> BR> center>
INPUT STYLE="font-family: Trebuchet MS; font-size: 8pt; font-weight:
bold; border: 1px solid black;" TYPE="BUTTON" VALUE="打开文件(x)"
accesskey="x" ONCLICK="OpenFile">
INPUT STYLE="font-family: Trebuchet MS; font-size: 8pt; font-weight:
bold; border: 1px solid black;" TYPE="BUTTON" VALUE="运行代码(r)"
accesskey="r" ONCLICK="RunCode">
INPUT STYLE="font-family: Trebuchet MS; font-size: 8pt; font-weight:
bold; border: 1px solid black;" TYPE="BUTTON" VALUE="清空代码(c)"
accesskey="c" ONCLICK="Clear">
INPUT STYLE="font-family: Trebuchet MS; font-size: 8pt; font-weight:
bold; border: 1px solid black;" TYPE="BUTTON" VALUE="保存文件(s)"
accesskey="s" ONCLICK="SaveFile">
INPUT STYLE="font-family: Trebuchet MS; font-size: 8pt; font-weight:
bold; border: 1px solid black;" TYPE="BUTTON" VALUE="复制着色代码(a)"
accesskey="a" ONCLICK="ClipBoard">
INPUT STYLE="font-family: Trebuchet MS; font-size: 8pt; font-weight:
bold; border: 1px solid black;" TYPE="BUTTON" VALUE="着色显示(d)"
accesskey="d" ONCLICK="ChangeColor">/center>
br>div id="forOption">/div>p>
INPUT TYPE="CHECKBOX" ID="usehelp" onfocus="WinMain.focus"
accesskey="z" class="noBorder" position: checked>
label for="usehelp">使用帮助(u>z/u>)/label>nbsp;nbsp;
nbsp;nbsp;nbsp;label>脚本类型:label>
SELECT NAME="cxs" SIZE="1" onchange="OptionAdd(cxs.value)">
OPTION VALUE="vbs">
VBS脚本/OPTION>OPTION VALUE="bat" SELECTED>BAT脚本/OPTION>br>
/body>
/HTML>
代码打包下载