文章关键字 ‘VBS’

VBS中的左移位&右移位运算

2010年08月22日,星期日

之前用VBS写UTF-16编码转UTF-8编码的时候要用到移位运算,但是VBS中没有移位运算符,就用简单的乘除运算实现了移位运算函数。而移位运算并不仅仅是简单的乘除而已,这样写可能会有未知的错误。现在知道了MSScriptControl.ScriptControl对象,实现左移位、右移位是如此的简单。

Function LShift(Value, Shift)
	Set sc = CreateObject("MSScriptControl.ScriptControl")
	sc.Language = "JScript"
	LShift = sc.Eval(Value & "<<" & Shift)
End Function

Function RShift(Value, Shift)
	Set sc = CreateObject("MSScriptControl.ScriptControl")
	sc.Language = "JScript"
	RShift = sc.Eval(Value & ">>" & Shift)
End Function

在VBS中执行Javascript语句

2010年08月21日,星期六

一直想写一个VBS版的六维空间作弊程序,无奈没有找到现成的VBS版Sha1函数,也许是VBS没有位操作符的缘故吧。而JavaScript版的早已实现,然后就想能不能在VBS中执行JavaScript代码,这样就可以变相实现了,当时知道的方法是WSC文件,但是我不喜欢额外的文件,只好作罢。最近偶然发现一个MSScriptControl.ScriptControl对象,可以实现这个功能,简单的示例如下,更高级的用法自己查阅帮助文档。

Dim sc
Set sc = CreateObject("MSScriptControl.ScriptControl")
sc.Language = "JScript"
result = sc.Eval("encodeURIComponent('恶魔');")
WScript.Echo result

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调用Windows API函数

2010年08月7日,星期六

那天无意中搜索到一篇《WinCC VBS利用EXCEL调用Windows API函数》的文章,不知道WinCC是什么,Google了一下好像跟西门子自动化有关。WinCC是什么并不重要,重要的是这篇文章提供了VBS调用Windows API的一种思路——EXCEL VBA,一种传说比VB还要VB的语言。

但是那篇文章中的例子都是使用已经写好的EXCEL VBA程序,即首先得存在一个EXCEL文件。我就想,能不能在VBS中通过excel.application对象创建一个包含VBA代码的EXCEL文档然后再调用它呢?Google来Google去,终于在微软帮助和支持中找到了方法。

结合两篇文章(请先阅读这两篇文章),写了一个示例程序,效果是移动鼠标至桌面左上角。如果你的EXCEL不是太盗版,双击这个VBS后应该可以看到效果。

Dim WshShell
set WshShell = CreateObject("wscript.Shell")
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security\AccessVBOM",1,"REG_DWORD"
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security\AccessVBOM",1,"REG_DWORD"
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Security\AccessVBOM",1,"REG_DWORD"
Dim oExcel, oBook, oModule
Set oExcel = CreateObject("excel.application")
Set oBook = oExcel.Workbooks.Add
Set oModule = obook.VBProject.VBComponents.Add(1)
strCode = _
"Private Declare Function SetCursorPos Lib ""user32"" (ByVal x As Long, ByVal y As Long) As Long" & vbCr & _
"Sub MyMacro(x as Long, y as Long)" & vbCr & _
"SetCursorPos x, y" & vbCr & _
"End Sub"
oModule.CodeModule.AddFromString strCode
oExcel.Run "MyMacro",0,0
oExcel.DisplayAlerts = False
oBook.Close
oExcel.Quit

前面3-5行的修改注册表是为了让VBS能够完全控制EXCEL,strCode即为写入EXCEL中的VBA代码,至于怎样在VBA中调用Windows API不属于本文的讨论范围,请自己查阅资料。使用oExcel.Run "MyMacro",0,0调用我们写入的VBA代码。