文章关键字 ‘VB’

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的~

VBS实现GB2312转Unicode

2010年11月9日,星期二

今天写了一个类似于下面的程序:

Dim http
Set http = CreateObject("msxml2.xmlhttp")
http.open "GET","http://www.sina.com.cn/",False
http.send
WScript.Echo http.responseText

但是却发现返回的中文都是乱码,看了一下发现新浪的编码竟然是gb2312的,汗,现在都是utf-8编码的时代了。responseText对utf-8编码支持得很好,但是如果是gb2312编码就会返回乱码,有时甚至会报错。无奈,只好用responseBody然后自己转码。

Dim http
Set http = CreateObject("msxml2.xmlhttp")
http.open "GET","http://www.sina.com.cn/",False
http.send
WScript.Echo GB2312ToUnicode(http.responseBody)

(更多…)

VBS调用WMI搜索文件

2010年10月7日,星期四

如果你想用递归搜索我也没办法。下面的程序搜索电脑上所有的MP3文件。

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colFiles = objWMIService. _
    ExecQuery("Select * from CIM_DataFile where Extension = 'mp3'")
For Each objFile in colFiles
    Wscript.Echo objFile.Name
Next

参考链接:WMI Tasks: Files and Folders

用VBS枚举素数(质数)

2010年10月1日,星期五

看到标题你一定会不屑一顾,枚举质数谁不会?

For i = 1 To 100
	For j = 2 To i
		If i Mod j = 0 Then Exit For
	Next
	If j = i Then WScript.Echo i
Next

几行代码就能搞定,如此简单。那就看看下面这个程序吧!

Set regex = New RegExp
regex.Pattern = "^1?$|^(11+?)\1+$"
For i = 1 To 100
	If Not regex.Test(String(i,"1")) Then
		WScript.Echo i
	End If
Next

用正则表达式判断质数,神一样的人物。

参考链接:

  1. 检查素数的正则表达式
  2. 用 JS 枚举质数