- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
|
sub event_onquit 'ie退出事件处理过程'
* j( O3 \% S$ k4 {# ^7 z: Twscript.quit '当ie退出时,脚本也退出' : W: h4 j( k: s
end sub 5 o5 X* U, A5 O) D
8 q, I4 S: |; g3 T: Z- j" ksub cancel '"取消"事件处理过程'
3 K. b. K1 M: }ie.quit '调用ie的quit方法,关闭IE窗口' 4 c n7 a" M! s, u2 g: x3 b1 o5 O
end sub '随后会触发event_onquit,于是脚本也退出了'
0 ]3 E- S* t* V, @
+ C- M/ ~' ~' Wsub confirm '"确定"事件处理过程,这是关键' 8 L S, a' X/ L6 y9 D
with id
$ J$ P' n) C! [, F, H$ g% G& aif .ip.value="" then .ip.value="." '空ip值则默认是对本地操作' 0 P+ `2 }+ {* g) T/ Z
if not (.app.checked or .sys.checked or .sec.checked) then 'app等都是checkbox,通过检测其checked' 2 `* U# ]" _3 u1 m A6 N/ n
wnd.alert("至少选择一种日志") '属性,来判断是否被选中。' . c1 \0 O6 f$ f9 e9 l g" s
exit sub
8 l! w8 @1 x0 h4 j0 Oend if # O" x" G- D# K: i3 g
set lct=createobject("wbemscripting.swbemlocator") '创建服务器定位对象'
4 p" V( b/ w$ A( U; {# [on error resume next '使脚本宿主忽略非致命错误'
# V6 B9 Y1 z) e2 Aset wmi=lct.connectserver(.ip.value,"root/cimv2",.user.value,.pass.value) '连接到root/cimv2名字空间' 3 c; e& U w9 \* D. D8 l, j" i
if err.number then '自己捕捉错误并处理' $ u/ i2 e, K3 O) m1 }! {/ L* w
wnd.alert("连接WMI服务器失败") '这里只是简单的显示“失败”' & K( E, | {6 I; l7 _2 R
err.clear
8 J. x3 T: D. [2 a! x on error goto 0 '仍然让脚本宿主处理全部错误'
& K# |! ^% U' q0 s0 m exit sub : {/ p) m# l& s
end if
' e2 w% S0 l. s9 ]" m, p, lif .app.checked then clearlog "application" '清除每种选中的日志' & c: z, }( T6 Y' z) R B- Q. q
if .sys.checked then clearlog "system"
; u0 a2 ~, C/ N! nif .sec.checked then clearlog "security" '注意,在XP下有限制,不能清除安全日志' * a% o" F- @9 j* S' ]
wnd.alert("日志已清除") - ~- w, {% {8 y, R
end with * M# V% K, t/ w( P
end sub 5 Y# W i$ r% K$ [6 d B% o$ K
4 j+ k# \/ V, a C' r0 |" B% o
sub clearlog(name)
9 a5 b0 b: }: @2 J) W& N6 awql="select * from Win32_NTEventLogFile where logfilename='"&name&"'"
: B6 [, f0 {3 R: A1 A8 ~set logs=wmi.execquery(wql) '注意,logs的成员不是每条日志,' 3 _$ Y8 k5 |; W3 Y+ c2 b
for each l in logs '而是指定日志的文件对象。' 6 a$ K$ O, i( U6 H
if l.cleareventlog() then
( J! h" k; B* j3 q, d. } wnd.alert("清除日志"&name&"时出错!")
x3 n: V! S# c) M: g# B2 O' r ie.quit 1 {5 P" i+ |+ U$ B' p' R. O9 M, I2 E
wscript.quit 8 e1 A) U6 B5 Y1 n
end if % }/ ^% h" [* S, R: u
next
* Z8 I$ M2 c: p7 i) ~% h6 F. bend sub
, }9 R' `$ j5 ?5 u. h& R, Q) @- h
( k* G; i- J; I- Q3 l2 C# P' z$ @! H7 j
总结一下整个过程。首先是创建internetexplorer.application对象。其直接的效果是启动了一个iexplorer进程,但窗口是不可见的,直到设置了ie.visible=1。然后用document.write方法将html语句写到ie窗口中。对于复杂的界面,可以将html代码保存为一个html文件,用ie.navigate(filename)打开。最后是响应窗口中的输入。这基本上属于DHTML的知识范畴。3 Z- x' p8 I( u/ \( Y2 C- W2 t
: k6 P: `2 y" E) {6 B
与一般脚本编程最大的不同之处,在于ie是事件驱动的。你所要做的,就是设置好相应的事件处理函数/过程。 v; _* t6 h) T0 T- D6 j. [3 z! Q6 m
在本例中,脚本只关心3个事件:ie退出,"确定"按钮被点击,"取消"按钮被点击。
( j: I6 F0 }4 B
. ]! H2 ]6 U: c注意,例子中只有两句设置事件处理过程的语句,没有定义ie退出事件与event_onquit过程关联。这是因为这里用到一个特性——创建ie对象时的第二个参数"event_"是一个前缀,ie对象的事件处理过程名是该前缀加事件名。所以onquit事件的处理过程默认就是event_onquit。
?! b7 I5 v' B3 m* }7 Z. i: d* j- A! [
当点击"确定"按钮后,confirm过程被调用。例子中演示了如何访问ie中的对象,比如ie.document.all.ip.value就是在"目标IP"文本框中的输入。如果选中"应用程序"这个checkbox,那么ie.document.all.app.checked的值是true,否则是false。想调用alert方法,则用ie.document.parentwindow.alert。其他各种ie内对象的访问方法完全是类似的。具体的可以看DHTML相关资料。
. S# J4 p1 t6 C6 G; t4 L9 U: ]! F! }' ?9 [* w
有了web界面,交互就变得丰富多彩了。大家可以充分发挥创意。
1 c- `( J$ J0 A w; j, F q
\3 r2 r5 f8 h8 {& \( f* ^+ |比如,很多GUI工具(比如流光)启动时,有一个logo页,显示版权等信息。我们用ie对象也可以模拟一个出来:6 n7 \# y% [ j! D: g
Codz:
; K+ v5 I' z5 J- Q8 ?# G* Z" {* Oset ie=wscript.createobject("internetexplorer.application") 2 G5 n2 K8 ]) r- k3 ^: J
ie.fullscreen=1 ! s+ y7 k5 X8 a
ie.width=300
, e; |7 e% h$ \ B# e6 _ie.height=150
/ ]) f* I' z+ F" G: g6 cie.navigate "about"&":blank" - S! u1 u+ c, P# \8 @
ie.left=fix((ie.document.parentwindow.screen.availwidth-ie.width)/2) ; o' j2 R' M& {7 @' f
ie.top=fix((ie.document.parentwindow.screen.availheight-ie.height)/2) ; ?! v% F# P! g& m9 g- m# V
ie.document.write "<body bgcolor =skyblue scroll=no><br><br>"&_
) u) s* [8 I% @3 X"<h2 align=center>这是一个Logo</h2></body>" 5 D' J, y- `% I
ie.visible=1 + Z+ `& x( i" M6 E; u
wscript.sleep 5000
) i: H3 {/ T, l, {$ b- @1 d) wie.quit
b4 z1 \8 n" G y p: H
* F' y% P; r3 y }- b; z& `8 v0 R5 P& m
上面这段代码执行后,将在屏幕中央显示一个连标题栏和边框都没有的ie窗口,持续5秒。
! e! x* O2 ?7 `) Q! R窗口里是蓝底黑字的“这是一个Logo”。
/ a# v* N) B8 e/ b7 ^! A5 d0 C4 C
脚本GUI化之后,与用户的交互更直观。像Nmap那样有很多参数的工具,在本地使用时,写一个图形界面的“接口”就一劳永逸了。输出的结果也可以用脚本处理,以更适合阅读的方式显示,就像流光等工具能生成html扫描报告那样。 |
|