WINDOWS中的脚本 No.05
之前说了对象的一些基本概念,说到属性和方法都是对象的变量名后面加一个点(.)来连接成的,比如 wscript.echo ,今天来看一个具体的例子,了解如何根据文档的说明自己去学会使用一个对象。
有很多对象是用 CreateObject 直接创建出来的,比如有个对象的名字叫做 Dictionary ,我们可以查到它的相关说明:
Dictionary 对象
请参阅
FileSystemObject 对象 | TextStream 对象
语言
JScript
VBScript
显示所有语言
存储数据键和项目对的对象。
说明
Dictionary 对象等价于 PERL 联合数组。项目可以是数据的任何形式,并存储在数组中。每个项目都与一个具有唯一性的键相联。该键用于取得单个项目,并且通常是整数或字符串,但也可以是除数组以外的任何类型。
下面代码演示了如何创建 Dictionary 对象:
[JScript]
var y = new ActiveXObject("Scripting.Dictionary");
y.add ("a", "test");
if (y.Exists("a"))
document.write("true");
...
[VBScript]
Dim d ' 创建变量。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens" ' 添加一些关键字和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...
方法
Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法
属性
Count 属性 | Item 属性 | Key 属性
请参阅
FileSystemObject 对象 | TextStream 对象
--------------------------------------------------------------------------------
? 2001 Microsoft Corporation. 保留所有权利。
这个是演示如何创建此类型的对象,而我们如果在继续查找,比如 Item ,可以看到另外的说明:
Item 属性
请参阅
CompareMode 属性 | Count 属性 | Key 属性
应用于:Dictionary 对象 | Drives 集合 | Files 集合 | Folders 集合
语言
JScript
VBScript
显示所有语言
在一个 Dictionary 对象中设置或者返回所指定 key 的 item。对于集合则根据所指定的 key 返回一个 item。读/写。
object.Item(key)[ = newitem]
参数
object
必选项。总是一个集合的名称或 Dictionary 对象的名称。
key
必选项。与要被查找或添加的 item 相关联的 key。
newitem
可选项。仅适用于 Dictionary 对象;对于集合不可使用此项。如果提供了此项,newitem 就是与所指定的 key 相关联的新值。
说明
如果在改变一个 key 的时候没有找到该 item,那么将利用所指定的 newitem 创建一个新的 key。如果在试图返回一个已有项目的时候没有找到 key,那么将创建一个新的 key 且其相关的项目被设置为空。
下面这个例子说明了 Item 属性的用法。
[JScript]
function DicTest(keyword)
{
var a, d;
d = new ActiveXObject("Scripting.Dictionary");
d.Add("a", "Athens");
d.Add("b", "Belgrade");
d.Add("c", "Cairo");
a = d.Item(keyword);
return(a);
}
[VBScript]
Function ItemDemo
Dim d ' Create some variables.
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens" ' 添加一些关键字和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
ItemDemo = d.Item("c") ' 获取项目。
End Function
根据这些说明我们大概就能知道怎么使用这个对象了,再看看它的其他方法,我们可以弄一个脚本,来制作一个实用小工具,数据你可以自己扩充:
【区号查询】- ' 初始化数据
- Set d = CreateObject("Scripting.Dictionary")
- d.Add "北京", "010"
- d.Add "成都", "028"
- d.Add "乐山", "0833"
-
- '输入要查询的地区
- diming = inputbox("输入要查询的地区", "区号查询", "北京")
-
- '判断是否有该地区的数据
- If d.Exists(diming) Then
- code = d.Item(diming)
- MsgBox "你查询的地区(" & diming & ")的区号是:" & code, 64, "区号"
- Else
- MsgBox "没有查到该地区的信息!", 48, "错误"
- End If
复制代码
而有的对象不是直接用 CreateObject 创建,而是调用其他方法是产生的,比如VBS中有一个叫做 WshShortcut 的对象,他就是我们经常使用的快捷方式文件(*.lnk),利用这个对象我们可以使用VBS来创建或者修改快捷方式文件,在网上搜索相关资料可以看到它的相关说明,它是通过我们之前说过的 WshShell 对象的 CreateShortcut 方法创建的,可以看到示例中创建当前脚本本身快捷方式的代码,
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
oShellLink.TargetPath = WScript.ScriptFullName
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "CTRL+SHIFT+F"
oShellLink.Ic
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = strDesktop
oShellLink.Save
查询相关资料很容易就知道是什么意思,我们依葫芦画瓢就能使用这个对象了。
==============================
对象不都是脚本语言本身所有的东西,有很多功能丰富多样的对象都是外界环境提供的,我们知道脚本能够在网页中运行,而浏览器这个运行环境里面又有很多可用的对象,而根据浏览器的不同,它们能提供的对象也不尽相同。
比如在本地脚本(*.vbs, *.js, *.wsf)中有WScript对象,但是在浏览器中就没有,而浏览器环境中多了很多已经存在的对象比如 document ,而在不同浏览器中这个对象也不完全相同,有的方法比如 document.getElementById 是通用的,而有的,比如 document.all ,在 Internet Explorer 中能使用 ,而很多其他的浏览器如 Mozilla Firefox 中就不行。
在这里简单地举个脚本在网页中使用的例子,网页源代码如下,你可以保存为 .htm 或者 .hta 文件打开(本例中需要使用地址栏,请先保存为 .htm 的):- <html>
- <head>
- <title>HTML脚本示例</title>
- <script type="text/vbscript">
- ' 检查密码是否符合规范
- Function FunUsernameBlur()
- ' 获取被命名为 password 的对象,即密码输入框
- Set p = document.getElementById("password")
- ' 密码是它的 value 属性
- pwd = p.value
- If Not IsNumeric(pwd) Then
- ' 将密码重置并提示
- p.value = ""
- window.alert("密码只能是数字,请重新输入!")
- End If
- End Function
-
- ' 点击注册激发此方法
- Function FunReg()
- uname = document.getElementById("username").value
- pwd = document.getElementById("password").value
- If uname = "" Or pwd = "" Then
- window.alert("注册失败!")
- Else
- window.alert("注册成功!" & vbCrLf & vbCrLf & "账号:" & uname & vbCrLf & "密码:" & pwd)
- End If
- End Function
-
- ' 将密码的检测去掉
- Function FunUnlock()
- document.getElementById("password").onblur = ""
- End Function
- </script>
- </head>
- <body>
- 账号:
- <input type="text" id="username" name="username" />
- <br>
- 密码:
- <input type="password" id="password" name="password" onblur="FunUsernameBlur()" />
- <input type="button" value="禁用密码检验" onclick="FunUnlock()" />
- <br><br>
- <input type="button" value=" 注 册 " onclick="FunReg()" />
- </body>
- </html>
复制代码 我们可以发现网页源代码里面都是一些形如 <title>***</title> 或者 <input *** /> 的东西,我们可以理解为这样就表示一个对象(网页里面叫做元素),在此我们只关注与数据相关的东西,也就是叫做 input 的那些东西。
来看这句 <input type="text" id="username" name="username" /> ,这就能表示一个对象了,意思是它是一个本质为 "input" 类型的对象,它定义了三个属性,type 是 "text",id 和 name 都是 "username",我们暂时可以这么认为,对于这种东西,只要是设置了 id 或者 name,都可以用 document.getElementById("id或name的值") 这个方法来获取它,而 input 这种类型的都有一个属性叫做 value ,很好理解,这个就是他的值了。
脚本可以直接在浏览器地址栏运行,跟用 mshta.exe 运行时格式是一样的,比如在CMD中运行命令行- mshta vbscript:msgbox("asdfghjkl",1,"ss")
复制代码 和在 IE 的地址栏输入mshta后面的参数回车效果是一样的- vbscript:msgbox("asdfghjkl",1,"ss")
复制代码 比如我们要看密码的值,可以在地址栏输入下面的代码后回车- vbscript:msgbox(document.getElementById("password").value)
复制代码 但是我们发现运行之后网页内容可能会没有了,在浏览器环境一般都使用它自带的 window.alert() 方法来显示提示框,这样就不会破坏页面- vbscript:window.alert(document.getElementById("password").value)
复制代码 在地址栏运行脚本,如果要赋值,应当使用 javascript ,因为 VBS 中 = 有歧义,可能造成很大的麻烦,设置账号为 Spring :- javascript:window.alert(document.getElementById("username").value="Spring")
复制代码 好了,我们来分析一下,可以看到我们的VBS脚本全部放在了一个类型是 script 的东西里面包起来,它也有个属性 type 指明了脚本类型是 "text/vbscript",即 “普通文本的VBS脚本”,脚本内容是三个方法,可能你觉得奇怪,这只是定义了方法,自己不会运行的,这里在页面里面有“事件”,你点一个地方按一下键盘或者移动一下鼠标浏览器都会监视到,因此浏览器里面很多都是事件触发来运行方法的,注册按钮那个代码上有一个属性 onclick="FunReg()" ,根据文字意义很容易理解就是在这个按钮被点击的时候执行 FunReg() 方法。
onblur 表示光标焦点离开这个东西时的事件,我们的那个禁用密码检测的方法将 onblur 的值设为空,就不会触发检测的方法 FunUsernameBlur() 了。
关于网页这部分,知识很多,我主要是让大家了解脚本的各种使用,如果有兴趣可以再慢慢学,本教程不会太多的讲这些,不过你要问我肯定很乐意解答。
最后还是出一个题吧:
1. 创建一个“系统热键”,使得当按下 CTRL+W 组合键时,启动CMD命令行窗口,并且默认工作路径(%cd%)在桌面。
(已知 当快捷方式放在 “C:\Documents and Settings\%username%\「开始」菜单\” 文件夹下时热键有效 )
2. 选作题:
在批处理之家(bathome.net)注册一个中文用户名的马甲,回复本贴。
=== No.05 End === |