“程序设计”目录存档

用VBS播放音乐

2010年10月23日,星期六

昨天我们院赢了,晚上一起吃饭,喝了好多酒,一觉睡到下午2点才醒。头痛欲裂,想到好久没有听过音乐了,于是听听音乐,都是些很久以前的歌曲,会让我想起那些很久以前的事的歌曲。

也想到我很久以前用VBS写的播放器。(当然没有下面的那么简单,有GUI界面)

Dim wmp
Set wmp = CreateObject("WMPlayer.OCX")
wmp.URL = "just one last dance.mp3"
Do Until wmp.playState = 1
    WScript.Sleep 1000
Loop

VBS的SendKeys,你真的懂吗?

2010年10月21日,星期四
Dim WshShell
Set WshShell = CreateObject("Wscript.Shell")

如果你认为你懂,请说出运行下列每个语句的效果。

WshShell.SendKeys Chr(&H88AC)
WshShell.SendKeys Chr(&H88AD)
WshShell.SendKeys Chr(&H88AE)
WshShell.SendKeys Chr(&H88AF)
WshShell.SendKeys Chr(&H88B4)
WshShell.SendKeys Chr(&H88B5)
WshShell.SendKeys Chr(&H88B6)
WshShell.SendKeys Chr(&H88B7)

其实SendKeys方法我一直都很少用,因为总觉得模拟键盘太不靠谱,无法保证没有异常发生。今天闲来没事在中国DOS联盟无意中看到一个帖子,发现SendKeys还有那么多鲜为人知的秘密。

曾经搜到过一篇名为《Mute Sound Volume in WSH》的文章,说的是用VBS让系统静音,用的就是SendKeys方法。当时很疑惑文章中的&hAD是怎么得到的,而今天看到的这个帖子让我豁然开朗。

不要以为看完参考手册就天下无敌,要知道人外有人,天外有天。

参考链接:VBS中奇妙的中文……

VBS图片处理之用VBS缩放图片大小

2010年10月20日,星期三

用到WIA中的Scale滤镜

Dim Img 'As ImageFile
Dim IP 'As ImageProcess
Set Img = CreateObject("WIA.ImageFile")
Set IP = CreateObject("WIA.ImageProcess")
Img.LoadFile "test.jpg"
IP.Filters.Add IP.FilterInfos("Scale").FilterID
IP.Filters(1).Properties("MaximumWidth") = 100
IP.Filters(1).Properties("MaximumHeight") = 100
Set Img = IP.Apply(Img)
Img.SaveFile "test.jpg"

参考链接:Scale Filter: Resize an Image

VBS图片处理之用VBS转化图片格式

2010年10月19日,星期二

我们常常需要转化图片的格式,虽然用Windows自带的画图工具就可以实现,但是如果有大量的图片需要转化的时候呢?那就是WIA的Convert滤镜(Filter)大显身手的时候了。

Const wiaFormatBMP  = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatPNG  = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatGIF  = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
Const wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"

Set Img = CreateObject("WIA.ImageFile")
Set IP = CreateObject("WIA.ImageProcess")
Img.LoadFile "test.bmp"
IP.Filters.Add IP.FilterInfos("Convert").FilterID
IP.Filters(1).Properties("FormatID").Value = wiaFormatJPEG
Set Img = IP.Apply(Img)
Img.SaveFile "test.jpg"

参考链接:Convert Filter: Create a Compressed JPEG File from Another File

VBS中也有Vector

2010年10月18日,星期一

对,你没看错,是VBS中的Vector,不是C++,也不是Java。

下面的示例演示了如何创建一个Vector对象并初始化为包含ASCII字符串"This is a test"的字节型Vector。

Dim v 'As Vector
Dim i 'As Integer
Set v = CreateObject("WIA.Vector")
v.SetFromString "This is a test", True, False
For i = 1 To v.Count
    MsgBox Chr(v(i))
Next

Vector更强大的地方在于可以用来创建图片,让我想到了PHP的GD库拓展,只可惜功能太简单了。

Set v = CreateObject("WIA.Vector")
For i = 1 To 200 * 200
	v.Add &HFF0000FF
Next
Set Img = v.ImageFile(200,200)
Img.SaveFile "Blue." & Img.FileExtension

Vector中的一个元素代表一个像素点,示例中的Vector对象有200*200个元素(像素点),每个像素的ARGB值都是FF0000FF(完全不透明的蓝色)。如果你足够强大,你完全可以用Vector来画一幅蒙娜丽莎。

参考链接:

  1. Vector Object
  2. Create and Initialize a Vector Object
  3. Create an ImageFile Object that Contains a Blank Page