文章关键字 ‘VBScript’

用VBS解压缩ZIP文件

2010年12月13日,星期一

用VBS解压ZIP文件,网上搜到的多数是调用WinRAR,一点技术含量也没有。Google一下“VBS 解压ZIP”,第二是搜搜问问“vbs实现解压缩zip文件”,满意答案是“所以想用vbs来解压这两种格式的文件,至少要有两种命令行解压工具,否则是绝对不可以的”。绝对不可以的,回答的人好自信啊,笑而不语~

(更多…)

WMI中的Win32_PingStatus类

2010年12月8日,星期三

平时很少用到ping命令,所以这个类也没怎么用过,测试了一下,好像效率比ping要高。计算ping 100次demon.tw延迟的平均值。

IP = "demon.tw"
WQL = "Select * from Win32_PingStatus Where Address = '$IP'"
WQL = Replace(WQL,"$IP",IP)
n = 0 : s = 0
Do Until n = 100
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery(WQL,,48)
    For Each objItem in colItems
        If objItem.StatusCode = 0 Then
            s = s + objItem.ResponseTime
            n = n + 1
        End If
    Next
Loop
WScript.Echo "Average:" & s / n

参考链接:Win32_PingStatus Class

伪造电子邮件发送时间

2010年12月6日,星期一

今天发短信问同学才知道经济法(开学到现在只去过两次)有小论文布置,而且老师要求在12月3日之前把论文的电子版发到他的邮箱,否则平时成绩按0分处理。

天啊,今天可是12月6日!平时成绩可是30分啊!没有平时成绩的话基本是不可能及格了!怎么办?根据爱因斯坦的相对论,时间是不可能倒流的,但是这并不表示我们不能向“过去”发邮件。在网络的世界,时间只不过是0和1罢了。

Const Email_From = "still.demon@gmail.com"
Const Password = "password"
Const Email_To = "jingjifa@163.com" '只是假想的邮箱
Set CDO = CreateObject("CDO.Message")
CDO.Subject = "From The Future"
CDO.From = Email_From
CDO.To = Email_To
CDO.TextBody = "Hello world!"
Const schema = "http://schemas.microsoft.com/cdo/configuration/"
With CDO.Configuration.Fields
    .Item(schema & "sendusing") = 2
    .Item(schema & "smtpserver") = "smtp.gmail.com"
    .Item(schema & "smtpauthenticate") = 1
    .Item(schema & "sendusername") = Email_From
    .Item(schema & "sendpassword") = Password
    .Item(schema & "smtpserverport") = 465
    .Item(schema & "smtpusessl") = True
    .Item(schema & "smtpconnectiontimeout") = 60
    .Update
End With
CDO.Send

把系统时间改成12月3日,用上面的代码发送邮件(理论上用邮件客户端也行,但是我没有测试),在163邮箱显示的发送时间是12月3日哦。幸好老师的邮箱是163的~

TLI.TLIApplication,被遗忘的COM组件

2010年12月5日,星期日

TLI.TLIApplication是一个能获取COM组件Type Library Information(类型库信息)的COM组件。曾经一直很好奇VbsEdit的代码自动补全是怎么实现的,现在看来,大约的确用的就是这个COM。

比如我想知道scrrun.dll(提供fso对象的dll)这个COM组件提供了哪些接口,可以用下面的代码:

'By Demon
'https://demon.tw
Set tli = CreateObject("TLI.TLIApplication")
Set Info = tli.TypeLibInfoFromFile("scrrun.dll")
For Each Interface In Info.Interfaces
    WScript.Echo Interface.Name 
Next

或者我忘记了fso对象有哪些属性和方法,而又没有参考文档,可以用下面的代码:

'By Demon
'https://demon.tw
Dim fso
Set fso = CreateObject("scripting.filesystemobject")
Set tli = CreateObject("TLI.TLIApplication")
Set Info = tli.ClassInfoFromObject(fso)
For Each Member In Info.DefaultInterface.Members
    WScript.Echo Member.Name 
Next

时间和篇幅有限,举的例子比较简单,更详细的请查阅文档(参考链接2为下载地址)。

参考链接:

  1. RunTime COM Object Inspection
  2. FILE: Tlbinf32.exe : Help Files for Tlbinf32.dll
  3. Visual Basic: Inspect COM Components Using the TypeLib Information Object Library

用VBS创建环境变量

2010年12月3日,星期五

今天和一个高手讨论了一下WMI里WQL查询的时间问题,无果。Google时无意中搜到这段代码,mark一下。

strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set objVariable = objWMIService._
Get("Win32_Environment").SpawnInstance_
objVariable.Name = "TestValue"
objVariable.UserName = "System"
objVariable.VariableValue = "This is a test"
objVariable.Put_

参考链接:如何使用脚本创建环境变量?