文章关键字 ‘VB’

用VBS实现PHP的sha1_file函数

2011年01月3日,星期一
Function sha1_file(filename, raw_output)
    Dim HashedData, Utility, Stream
    Set HashedData = CreateObject("CAPICOM.HashedData")
    Set Utility = CreateObject("CAPICOM.Utilities")
    Set Stream = CreateObject("ADODB.Stream")
    HashedData.Algorithm = 0
    Stream.Type = 1
    Stream.Open
    Stream.LoadFromFile filename
    Do Until Stream.EOS
        HashedData.Hash Stream.Read(1024)
    Loop
    If raw_output Then
        sha1_file = Utility.HexToBinary(HashedData.Value)
    Else
        sha1_file = HashedData.Value
    End If
End Function

参考链接:HashedData Object

用VBS获取Unix时间戳

2010年12月31日,星期五

UNIX时间,或称POSIX时间是UNIX或类UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数,不包括闰秒。

VBS中没有类似C标准库中的time函数,怎么获取Unix时间戳呢?乍一看很简单:

Function UnixTime()
    UnixTime = DateDiff("s", "01/01/1970 00:00:00", Now())
End Function

一个很想当然的方法,仅仅注意到了“1970年1月1日0时0分0秒”,而忽略了“协调世界时”。

协调世界时,又称世界标准时间或世界协调时间,简称UTC,从英文“Coordinated Universal Time”而来。在中国大陆的本地时间比UTC快8小时,就会写作UTC+8。如果是在本地时间比UTC时间慢的地区,例如夏威夷的时间是比UTC时间慢10小时,就会写作UTC-10。

而VBS中的Now()函数返回的时间是包括时区的,所以获取Unix时间戳要做一些修正。

Function UnixTime()
    Set objWMIService = _
    GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem",,48)
    For Each objItem in colItems
        TimeZone = objItem.CurrentTimeZone
    Next
    UnixTime = DateDiff("s", "01/01/1970 00:00:00", Now())
    UnixTime = UnixTime - TimeZone * 60
End Function

这才是正确的写法。

参考链接:Epoch & Unix Timestamp Conversion Tools

VBS模拟POST上传文件

2010年12月25日,星期六

改写自CSDN上的一个ASP中模拟form上传文件,即(multipart/form-data)的表单的程序。原程序有些地方写错了,还一大堆人复制粘贴,真受不了。

(更多…)

VBS与.NET Framework不得不说的故事

2010年12月23日,星期四

昨天晚上linkanyway问我VBS数组怎么排序,有没有sort方法。我说,VBS又不是C#,怎么可能有sort方法,自己写个排序算法不就行了。他说他不会写,忽悠谁呢。

如果问题就这么结束,那么也就不会有这篇文章。怪我手贱,在Google中输入“vbs sort”,回车,看到一段代码,顿时泪流满面。

(更多…)

VBS中字符串连接的效率问题

2010年12月21日,星期二

字符串连接谁不会,还用得着写?没错,在VBS中连接字符串确实很简单,无非就是&和+,不过本文不是讨论&和+用法之间的区别,而是讨论字符串连接的效率问题,即样才能快速地连接字符串?

当然,对于少量的字符串连接,效率并没有对程序造成多大影响,现在让我们考虑一个极端的问题:将1到100000之间的所有数字连接成一个字符串。

(更多…)