IT学习者 | 文章大全 | 技术文档 | 桌面壁纸 | 网络电台 | 成语 | 歇后语 | 站长导航 | 下载 | 周公解梦 | 生日密码 | 站长助手 | Flash | IP地址查询
 您现在的位置: IT学习者 >> 文章大全 >> 网页制作 >> 网页特效代码

深入挖掘Windows脚本技术

【 来源:网络  更新时间:2008-2-27 | 字体:
【脚本也有GUI】

虽然系统提供了WScript和CScript两个脚本宿主,分别负责窗口环境和命令行环境下的脚本运行,但实际上窗口环境下用户与脚本交互不太方便:参数输入只能建立快捷方式或弹出InputBox对话框,输出信息后只有在用户“确定”后才能继续运行。完全没有了窗口环境直观、快捷的优势。好在有前面提到的InternetExplorer对象,脚本可以提供web风格的GUI。

还是来看个例子,一个清除系统日志的脚本,顺便复习一下WMI:

set ie=wscript.createobject("internetexplorer.application","event_")   '创建ie对象'

ie.menubar=0                                                           '取消菜单栏'

ie.addressbar=0                                                        '取消地址栏'

ie.toolbar=0                                                           '取消工具栏'

ie.statusbar=0                                                         '取消状态栏'

ie.width=400                                                           '宽400'

ie.height=400                                                          '高400'

ie.resizable=0                                                         '不允许用户改变窗口大小'

ie.navigate "about:blank"                                              '打开空白页面'

ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2)   '水平居中'

ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2)  '垂直居中'

ie.visible=1                                                           '窗口可见'

with ie.document                                                  '以下调用document.write方法,'

.write "<html><body bgcolor=#dddddd scroll=no>"                   '写一段html到ie窗口中。'

.write "<h2 align=center>远程清除系统日志</h2><br>"

.write "<p>目标IP:<input type=text size=15>"               '也可以用navigate方法直接打开一'

.write "<p>用户名:<input type=text size=30>"             '个html文件,效果是一样的。'

.write "<p>密码: <input type=password size=30>"

.write "<p align=center>类型:"                                   '不仅是input对象,所有DHTML支持'

.write "<input type=checkbox>应用程序 "                    '的对象及其属性、方法都可以使用。'

.write "<input type=checkbox>系统 "

.write "<input type=checkbox>安全"                         '访问这些对象的办法和网页中访问'

.write "<p align=center><br>"                                     '框架内对象是类似的。'

.write "<input type=button value=确定> "

.write "<input type=button value=取消>"

.write "</body></html>"

end with

dim wmi                                                           '显式定义一个全局变量'

set wnd=ie.document.parentwindow                                  '设置wnd为窗口对象'

set 设置id为document中全部对象的集合'

id.confirm.onclick=getref("confirm")                              '设置点击"确定"按钮时的处理函数'

id.cancel.onclick=getref("cancel")                                '设置点击"取消"按钮时的处理函数'

do while true                                                     '由于ie对象支持事件,所以相应的,'

wscript.sleep 200                                                 '脚本以无限循环来等待各种事件。'

loop

sub event_onquit                                                  'ie退出事件处理过程'

wscript.quit                                                      '当ie退出时,脚本也退出'

end sub

sub cancel                                                        '"取消"事件处理过程'

ie.quit                                                           '调用ie的quit方法,关闭IE窗口'

end sub                                                           '随后会触发event_onquit,于是脚本也退出了'

sub confirm                                                       '"确定"事件处理过程,这是关键'

with id

if .ip.value="" then .ip.value="."                                '空ip值则默认是对本地操作'

if not (.app.checked or .sys.checked or .sec.checked) then        'app等都是checkbox,通过检测其checked'

   wnd.alert("至少选择一种日志")                                  '属性,来判断是否被选中。'

   exit sub

end if

set lct=createobject("wbemscripting.swbemlocator")                '创建服务器定位对象'

on error resume next                                              '使脚本宿主忽略非致命错误'

set wmi=lct.connectserver(.ip.value,"root/cimv2",.user.value,.pass.value)  '连接到root/cimv2名字空间'

if err.number then                                                '自己捕捉错误并处理'

   wnd.alert("连接WMI服务器失败")                                 '这里只是简单的显示“失败”'

   err.clear

   on error goto 0                                                '仍然让脚本宿主处理全部错误'

   exit sub

end if

if .app.checked then clearlog "application"                       '清除每种选中的日志'

if .sys.checked then clearlog "system"

if .sec.checked then clearlog "security"                          '注意,在XP下有限制,不能清除安全日志'

wnd.alert("日志已清除")

end with

end sub

sub clearlog(name)

wql="select * from Win32_NTEventLogFile where logfilename='"&name&"'"

set logs=wmi.execquery(wql)                                       '注意,logs的成员不是每条日志,'

for each l in logs                                                '而是指定日志的文件对象。'

   if l.cleareventlog() then

      wnd.alert("清除日志"&name&"时出错!")

      ie.quit

      wscript.quit

   end if

next

end sub

总结一下整个过程。首先是创建internetexplorer.application对象。其直接的效果是启动了一个iexplorer进程,但窗口是不可见的,直到设置了ie.visible=1。然后用document.write方法将html语句写到ie窗口中。对于复杂的界面,可以将html代码保存为一个html文件,用ie.navigate(filename)打开。最后是响应窗口中的输入。这基本上属于DHTML的知识范畴。

与一般脚本编程最大的不同之处,在于ie是事件驱动的。你所要做的,就是设置好相应的事件处理函数/过程。

在本例中,脚本只关心3个事件:ie退出,"确定"按钮被点击,"取消"按钮被点击。

注意,例子中只有两句设置事件处理过程的语句,没有定义ie退出事件与event_onquit过程关联。这是因为这里用到一个特性——创建ie对象时的第二个参数"event_"是一个前缀,ie对象的事件处理过程名是该前缀加事件名。所以onquit事件的处理过程默认就是event_onquit。

当点击"确定"按钮后,confirm过程被调用。例子中演示了如何访问ie中的对象,比如ie.document.all.ip.value就是在"目标IP"文本框中的输入。如果选中"应用程序"这个checkbox,那么ie.document.all.app.checked的值是true,否则是false。想调用alert方法,则用ie.document.parentwindow.alert。其他各种ie内对象的访问方法完全是类似的。具体的可以看DHTML相关资料。

有了web界面,交互就变得丰富多彩了。大家可以充分发挥创意。

比如,很多GUI工具(比如流光)启动时,有一个logo页,显示版权等信息。我们用ie对象也可以模拟一个出来:

set ie=wscript.createobject("internetexplorer.application")

ie.fullscreen=1

ie.width=300

ie.height=150

ie.navigate "about:blank"

ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2)

ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2)

ie.document.write "<body bgcolor =skyblue scroll=no><br><br>"&_

"<h2 align=center>这是一个Logo</h2></body>"

ie.visible=1

wscript.sleep 5000

ie.quit

上面这段代码执行后,将在屏幕中央显示一个连标题栏和边框都没有的ie窗口,持续5秒。

窗口里是蓝底黑字的“这是一个Logo”。

脚本GUI化之后,与用户的交互更直观。像Nmap那样有很多参数的工具,在本地使用时,写一个图形界面的“接口”就一劳永逸了。输出的结果也可以用脚本处理,以更适合阅读的方式显示,就像流光等工具能生成html扫描报告那样。

文章共6页,当前在第2页 9 7 [1] [2] [3] [4] [5] [6] 8 :
相 关 文 章
没有相关文章
相 关 软 件

音乐
嫁衣 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 没有人比我更爱你
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 明天过后 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 降临 下雨天 小酒窝 樱花草 恋爱新手 说唱脸谱 红色高跟鞋 寂寞才说爱 深深爱过你 爱上你是个错 即使知道要见面 不是因为寂寞才想你
城府 假如 花海 兰亭序 棉花糖 舍不得 最后一次 女人如烟 外滩十八号 我们的纪念 我们的无奈 心在跳情在烧 爱上你是我的错 爱情里没有谁对谁错
加入收藏留言建议自助友情链接普通友情链接站长的Blog
版权所有   COPYRIGHT 2002-2009 ★IT学习者★ ALL RIGHTS RESERVED.