文章关键字 ‘VB’

VBS实现汉字转拼音

2010年08月14日,星期六

把中文转成拼音在VBS中似乎用处不是很大,但是对于ASP来说用处还是很多的,比如很多网站用AJAX实现的关键词搜索自动完成都支持拼音,在创建这些拼音关键词时就需要这样的函数来完成汉字向拼音的转换。

有了维基百科的GB2312汉字拼音对照表(当然也可以搜索到GBK编码的对照表,但是我比较相信维基百科),任何语言想实现这个功能都不是很难,在这里只给出VBS写的函数,只转化汉字,其他符号不变。

程序代码:[download id=30]

GB2312汉字拼音对照表:[download id=31]

在VB中创建和使用VBS的内置WScript对象?

2010年08月8日,星期日

很久很久以前,在我还用VB的时候,我就想过这个问题。因为我想使用WScript对象的Sleep方法让程序暂停一段时间。但是一直没有找到方法。

今天看到MSDN上一篇文章《Why Can’t I Create The WScript Object?》,终于明白为什么我一直没有找到,因为根本没有这样的方法。文章里面已经说得很清楚了,“None of these properties make the slightest bit of sense to access outside of a running instance of WSH!”。所以,不要再做无谓的挣扎了。

用VBS读写二进制文件的另一种方法

2010年07月26日,星期一

之前写的那篇给出的方法虽然不错,但是当文件过大时(其实很小,也就几M),对应的数组也会很大,然后会出现运行时错误,提示内存耗尽,为此我郁闷了好久。

最近在博客的流量记录中发现百度关键字“一些很恶作剧的vbs程序”(看来现在的年轻人很喜欢玩这口),于是打开久违的百度搜索了一下,发现出现在第三。出现在第二的是百度HI,上面也是一个恶作剧程序,而且还是加密的。我尝试着解密,却发现这个加密似乎比前几天解密的那个病毒更变态,未果。

虽然我没有把那个程序解密出来(如果哪位真正的高手会,麻烦指点一下),但是从中领悟出了用VBS读写二进制文件的另一种方法,即Microsoft.XMLDOM+ADODB.Stream。这个方法的效率比原来那个高得多,而且似乎没有文件大小限制。

Function ReadBinary(FileName)
	Const adTypeBinary = 1
	Dim stream, xmldom, node
	Set xmldom = CreateObject("Microsoft.XMLDOM")
	Set node = xmldom.CreateElement("binary")
	node.DataType = "bin.hex"
	Set stream = CreateObject("ADODB.Stream")
	stream.Type = adTypeBinary
	stream.Open
	stream.LoadFromFile FileName
	node.NodeTypedValue = stream.Read
	stream.Close
	Set stream = Nothing
	ReadBinary = node.Text
	Set node = Nothing
	Set xmldom = Nothing
End Function

函数的参数是要读取的文件路径,返回值是包含二进制文件的十六进制值的字符串。

Sub WriteBinary(FileName, Buf)
	Const adTypeBinary = 1
	Const adSaveCreateOverWrite = 2
	Dim stream, xmldom, node
	Set xmldom = CreateObject("Microsoft.XMLDOM")
	Set node = xmldom.CreateElement("binary")
	node.DataType = "bin.hex"
	node.Text = Buf
	Set stream = CreateObject("ADODB.Stream")
	stream.Type = adTypeBinary
	stream.Open
	stream.write node.NodeTypedValue
	stream.saveToFile FileName, adSaveCreateOverWrite
	stream.Close
	Set stream = Nothing
	Set node = Nothing
	Set xmldom = Nothing
End Sub

第一个参数是要读入的文件路径,第二个参数是包含二进制文件的十六进制值的字符串。至于如何获得二进制文件的十六进制值,那方法就很多了,最简单的方法当然就是用fso对象将ReadBinary函数的返回值写到文本文件中去,然后Ctrl+C,Ctrl+V。其实用十六进制工具也很简单。

其他的就不多说了,看不懂的多看看MSDN参考文档。写了一个示例程序,里面包含了天空之城音乐的所有数据,双击后在同一文件夹生成天空之城的MP3文件并播放。

[download id=29]

用VBS实现Discuz论坛自动回帖程序

2010年07月2日,星期五

曾经是多么的热衷于刷积分,用C#写了一个Discuz论坛自动回帖程序(源码找不到了)。后来顿悟了,积分什么的,只不过是浮云罢了。其时VBS水平比原来提高了一点,发现用C#写Discuz论坛自动回帖程序有点太大材小用了,用VBS脚本就可以轻松实现Discuz论坛自动回帖程序。能用脚本做的事情,何必用高级语言去做呢?

(更多…)

用VBS发送邮件

2010年07月1日,星期四

曾经在编写VBS版U盘小偷程序的时候Google过怎么用VBS发送E-Mail,不知道为什么当时Google不到,可能是眼花了吧。使用CDO.Message对象就可以实现,示例代码演示的是gmail发送纯文本并带附件的邮件,至于其他的电子邮箱,需要修改代码中对应的smtp服务器和端口,原理也是一样的,就不举例了。贴出来的代码没有写注释,需要看注释的请下载源码。

Const Email_From = "still.demon@gmail.com"
Const Password = "password"
Const Email_To = "380401911@qq.com"
Set CDO = CreateObject("CDO.Message") 
CDO.Subject = "From Demon"
CDO.From = Email_From
CDO.To = Email_To
CDO.TextBody = "Hello world!"
cdo.AddAttachment "C:\hello.txt"
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