使用vbscript脚本在表单中进行选择的代码

问:
嗨,Scripting Guy!我想创建一个带有四个单选按钮的表单,其中每个按钮各代表一台计算机。可以选择一个单选按钮,单击另一个按钮,然后脚本将在所选的计算机上运行。我怎样才能做到?

-- CW

答:
嗨,CW。如果我们所说的只是 VBScript 和 Windows Script Host,那么这个问题很简单:办不到。除了显示消息框以外,VBScript 和 WSH 都无法创建图形用户界面;没办法通过脚本使用单选按钮、列表框、下拉列表以及其他图形元素。

但是——噢,你们以前一定见过这种情况。没错:我们先告诉您某事办不到,然后再告诉您做事的方法。(嗨,每个人多需要点技巧,不是吗?)没错:虽然您不会只用 VBScript 实现这一点,但是完全可以使用 HTA(HTML 应用程序)来实现。

我们今天不会花太多时间来谈论 HTA;如果您对此感兴趣,可以查找大约一年前我们针对该主题推出的网络广播。可以说,HTA 使我们能够将 Internet Explorer 和脚本代码结合在一起,并反过来为脚本提供图形用户界面。虽然还有一些方法可以将图形用户界面合并到脚本中,但是对于才开始涉足 GUI 开发的用户来说,这可能是最简单的方法。

让我们先提供 HTA 的代码,然后再解释其工作原理。此示例 HTA 显示了四个单选按钮,其中每个按钮各代表一台计算机。选择一台计算机,并单击一个“Run Script(运行脚本)”按钮;完成后,将运行一个子例程。该程序将连接到已选定的计算机,然后报告该计算机上所安装的操作系统的名称。很不错吧?如要了解其工作原理,复制该代码,将其粘贴到记事本中,然后以 .hta 文件扩展名(比如:os_name.hta)保存文件。不要使用 .vbs 文件扩展名;那样行不通。扩展名必须是 .hta。

代码如下:

<SCRIPT LANGUAGE="VBScript">

Sub RunScript

If ComputerOption(0).Checked Then 
        strComputer = ComputerOption(0).Value 
    End If 
    If ComputerOption(1).Checked Then 
        strComputer = ComputerOption(1).Value 
    End If 
    If ComputerOption(2).Checked Then 
        strComputer = ComputerOption(2).Value 
    End If 
    If ComputerOption(3).Checked Then 
        strComputer = ComputerOption(3).Value 
    End If

If strComputer = "" Then 
        Exit Sub 
    End If

Set objWMIService = GetObject _ 
        ("winmgmts:\\" & strComputer & "\root\cimv2") 
    Set colItems = objWMIService.ExecQuery _ 
        ("Select * From Win32_OperatingSystem") 
    For Each objItem in ColItems 
        Msgbox objItem.Caption 
    Next

End Sub

Sub CancelScript 
   Self.Close() 
End Sub

</SCRIPT>

<BODY> 
<input type="radio" name="ComputerOption" value="atl-ws-01">atl-ws-01<BR> 
<input type="radio" name="ComputerOption" value="atl-ws-02">atl-ws-02<BR> 
<input type="radio" name="ComputerOption" value="atl-ws-03">atl-ws-03<BR> 
<input type="radio" name="ComputerOption" value="atl-ws-04">atl-ws-04<P>

<input id=runbutton class="button" type="button" value="Run Script" name="ok_button"  
onClick="RunScript"> 
    
<input id=runbutton class="button" type="button" value="Cancel" name="cancel_button"  
onClick="CancelScript">

</BODY>

那么该代码包含哪些内容呢?我们可以将该代码分为四部分:其中有两个部分使用 HTML 标记来实现单选按钮以及“Run Script(运行脚本)”和“Cancel(取消)”按钮,而另外两个部分则根据您所点击的是“Run Script”还是“Cancel”来运行子例程。让我们更进一步了解这几个部分。

例如,HTML 代码在此显示这四个单选按钮。(如果您了解 HTML,那么这里就没有什么特别的;这是标准的 HTML 编码。)请注意,所有按钮都有相同的名称 (ComputerOption);这是为了确保一次只能选择一个按钮。还要注意,每个按钮的“值”都被设为相应计算机的名称:

<BODY>
<input type="radio" name="ComputerOption" value="atl-ws-01">atl-ws-01<BR>
<input type="radio" name="ComputerOption" value="atl-ws-02">atl-ws-02<BR>
<input type="radio" name="ComputerOption" value="atl-ws-03">atl-ws-03<BR>
<input type="radio" name="ComputerOption" value="atl-ws-04">atl-ws-04<P>

这是显示“Run Script”和“Cancel”按钮的代码。这里的关键是“onClick”参数(在单击按钮时,指示该运行哪个子例程)。正如单击第一个按钮所能看到的,RunScript 子例程将运行;单击第二个按钮,CancelScript 子例程将运行:

<input id=runbutton class="button" type="button" value="Run Script" name="ok_button" 
onClick="RunScript">
   
<input id=runbutton class="button" type="button" value="Cancel" name="cancel_button" 
onClick="CancelScript">

</BODY>

顺便说一下,CancelScript 子例程会关闭 HTA。正如您看到的,整个过程一点都不复杂:

Sub CancelScript
   Self.Close()
End Sub

现在——最终!——我们要遇到好事了。选择一个单选按钮,然后单击“Run Script”。我们的 HTA 是如何知道所选择的按钮以及如何知道对哪台计算机运行脚本?那么,到底要在哪里运行脚本呢?放松点;一切都在 RunScript 例程中:

代码如下:

Sub RunScript

If ComputerOption(0).Checked Then 
        strComputer = ComputerOption(0).Value 
    End If 
    If ComputerOption(1).Checked Then 
        strComputer = ComputerOption(1).Value 
    End If 
    If ComputerOption(2).Checked Then 
        strComputer = ComputerOption(2).Value 
    End If 
    If ComputerOption(3).Checked Then 
        strComputer = ComputerOption(3).Value 
    End If

If strComputer = "" Then 
        Exit Sub 
    End If

Set objWMIService = GetObject _ 
        ("winmgmts:\\" & strComputer & "\root\cimv2") 
    Set colItems = objWMIService.ExecQuery _ 
        ("Select * From Win32_OperatingSystem") 
    For Each objItem in ColItems 
        Msgbox objItem.Caption 
    Next

End Sub

该子例程的前半部分用以确定所选的具体按钮。单选按钮(至少是具有相同名称的按钮)作为数组进行存储;数组中的第一个按钮是项目 0,第二个按钮是项目 1 等等。我们在这里所做的就是确定选择了哪个按钮;这可以通过查看每个按钮的“Checked(选定)”属性来实现。例如,这行代码用以确定按钮 0(数组中的第一个按钮)的“Checked”属性是否为 true;如果是的话,就表示所选定的就是该按钮:

If ComputerOption(0).Checked Then
如果“Checked”为 true,又如何呢?那么,随后将对变量 strComputer 指派该单选按钮的值(同时记住,该按钮的值恰好是计算机的名称):

strComputer = ComputerOption(0).Value
如果“Checked”为 False,那又如何呢?没什么大不了;毕竟我们已经检查了每个单选按钮的值。迟早都会弄清楚选定了哪个按钮(而且只能有一个)。如果最终确定未选择任何按钮,那么就将退出该子例程。这就是该代码所完成的工作:

代码如下:

If strComputer = "" Then 
    Exit Sub 
End If

如果选择了一个按钮,那么 strComputer 将为我们所要连接的计算机的名称。这就是该子例程的后半部分所完成的工作:连接到指定计算机并返回其上所安装的操作系统的名称的是一个标准 WMI 脚本。

哟!我们敢打赌,对于能完成这件事,您会感到很高兴,不是吗?或者,至少如果我们的确做到了这一点,您就会高兴。但是,还有一点需要指出。我们在此提供的示例 HTA 可以检索计算机上所安装的操作系统的名称,然后将其显示在消息框中。这很好,但是比方说您想显示计算机上所安装的所有服务的列表,又该怎么办呢?这时,您会发现自己将应答几十个消息框。这可不是您我所希望得到的用户体验。

那么,能否解决这个问题?当然可以。我们不想在这方面多花时间,但是需要做几件事。首先,我们在 HTA 中添加了一个 SPAN 区域;这只是屏幕上的一个可识别的区域,可以在其中写入信息。使用此类代码将 SPAN(附带 DataArea 的 ID)放置在按钮的下方:

<P> <span id=DataArea></span>
其次,需要收集该数据,并将其全都保存到一个变量中,而不在一个消息框中显示所有数据。该代码将变量 strText 的值设为当前在 strText 中的任何值加上“caption”属性的值,再加上 <BR> 标记(在 HTML 脚本中相当于按键盘上的“ENTER”键):

strText = strText & objItem.Caption & "<BR>"
最后,需要将 SPAN 的“InnerHTML”属性设为变量 strText 的值:

DataArea.InnerHTML = strText
都明白了吗?另外,为了避免过多的解释,这里有个修改过的 HTA,可以收集计算机上所安装的所有服务的名称,然后自动将这些名称写入 HTA 中:

代码如下:

<SCRIPT LANGUAGE="VBScript">

Sub RunScript

If ComputerOption(0).Checked Then 
        strComputer = ComputerOption(0).Value 
    End If 
    If ComputerOption(1).Checked Then 
        strComputer = ComputerOption(1).Value 
    End If 
    If ComputerOption(2).Checked Then 
        strComputer = ComputerOption(2).Value 
    End If 
    If ComputerOption(3).Checked Then 
        strComputer = ComputerOption(3).Value 
    End If

If strComputer = "" Then 
        Exit Sub 
    End If

Set objWMIService = GetObject _ 
        ("winmgmts:\\" & strComputer & "\root\cimv2") 
    Set colItems = objWMIService.ExecQuery _ 
        ("Select * From Win32_Service") 
    For Each objItem in ColItems 
        strText = strText & objItem.Name & "<BR>" 
    Next

DataArea.InnerHTML = strText

End Sub

Sub CancelScript 
   Self.Close() 
End Sub

</SCRIPT>

<BODY> 
<input type="radio" name="ComputerOption" value="atl-ws-01">atl-ws-01<BR> 
<input type="radio" name="ComputerOption" value="atl-ws-02">atl-ws-02<BR> 
<input type="radio" name="ComputerOption" value="atl-ws-03">atl-ws-03<BR> 
<input type="radio" name="ComputerOption" value="atl-ws-04">atl-ws-04<P>

<input id=runbutton class="button" type="button" value="Run Script" name="ok_button"  
onClick="RunScript"> 
    
<input id=runbutton class="button" type="button" value="Cancel" name="cancel_button"  
onClick="CancelScript"> 
<P> 
<span id=DataArea></span> 
</BODY>

(0)

相关推荐

  • JavaScript/VBScript脚本程序调试(Wscript篇)

    在实际工作中,我发现程序员对脚本抱怨最多的就是脚本程序很难调试这个缺点,特别是调试.vbs等WSH程序的时候,总是: 1. 在资源管理器里面双击一个.vbs文件. 2. 程序里面发生了一个错误,例如异常,或者编程逻辑错误. 3. 一行行阅读源文件,然后在估计发生错误的地方,添加很多的Msgbox.Show,打印一些变量的值. 4. 重新执行.vbs文件 5. "当当当",一系列的 "确定"点完了以后,人也晕了,重新回到第三步继续-- 其实我们也是可以用Visual

  • 调试JavaScript/VBScript脚本程序(IE篇)

    这两种方式,都可以使用Visual Studio来进行调试,先看大家用得比较频繁的网页脚本程序的调试: 1. 要调试网页里面的脚本程序,调试器需要宿主程序-这里也就是IE的支持,实际上所有的脚本程序解释器都实现了一个COM的调试接口.调试器通过查询解释器的这个接口,可以设置断点,查询变量以及捕捉异常,当然,查询到这个接口,需要宿主程序同意--至于如何实现这个接口,我们会在以后的文章里面讲到. 2. 默认情况下,IE是将脚本调试支持功能关闭的,因此你需要显示地打开它.打开IE,点击"工具"

  • ASP(VBScript)中整除和取余

    整除 ASP(VBScript) 中整除用"\",比如 m = 5 \ 2,结果为 2. 取余 ASP(VBScript) 中取余用 mod,比如 m = 5 mod 2,结果为 1. 大数注意 m = 4444444444 / 2 n = 4444444444 \ 2 第一句是正确的,第二句运行时会报溢出错误,因为:在整除.取余操作前,数值表达式四舍五入为 Byte.Integer 或 Long 子类型表达式.Long 子类型的范围是 [-2147483648, 2147483647

  • 枚举域内计算机个数vbscript脚本(没环境,没测试)

    原来是微软专家的代码在这: http://www.microsoft.com/china/technet/community/scriptcenter/resources/hey060127.mspx 我改成了全自动式的,不需要手要修改域的adsi连接字符串了,代码: 复制代码 代码如下: On Error Resume Next Set objRootDSE = GetObject("LDAP://rootDSE") strDomain = ObjRootDSE.Get("

  • ASP、vbscript编码模板

    <!-- METADATA TYPE="typelib" FILE="C:\Program Files\Common Files\System\ADO\msado20.tlb" --> <%@ Language=VBScript %> <%Option Explicit%> <% '加入的文件 %> <!-- #include virtual|file="需要包含的文件" --> <

  • ASP/VBScript中CHR(0)的由来以及带来的安全问题分析

    该字符标识着字符串的结束,也称作null-terminated,这个给脚本编程尤其是ASP编程带来了一定的麻烦,很多人可能会问为什么要保留这个特殊字符,我们可以追溯到编写操作系统的语言之一C语言,学过C/C++的童鞋可能知道,在字符串中标识一个字符串结束靠的就是结尾的\0(NULL或者0),否则不能称作为字符串,只能说是字符串数组,任何对于字符串操作的函数如果传入的字符串丢掉了这个结束NULL字符,都有可能会出现异常. 复制代码 代码如下: char strbuf[] = "Hello"

  • asp,VBscript语法错误,史上最全最详细最精确第1/3页

    ASP错误总结  -------------------------------------------------------------------------------- Microsoft VBscript语法错误(0x800A03E9)-->内存不足 Microsoft VBscript语法错误(0x800A03EA)-->语法错误 Microsoft VBscript语法错误(0x800A03EB)-->缺少 ':' Microsoft VBscript语法错误(0x800

  • ASP中一个用VBScript写的随机数类

    外国人写的一个class,这么一点小小的应用,除非有特殊需求,还没有必要模块化. 用asp产生一个随机数. <%  ''**************************************************************************  '' CLASS: cRandom  '' Calls randomize to seed the random number generator.  '' Provides functions for returning ra

  • ASP里面令人震撼地Debug类(VBScript)

    我想可能很多朋友都会用这样的方法"response.write ",然后输出相关的语句来看看是否正确.前几天写了一个千行的页面,里面大概有七八个SUB/FUNCTION,调试的时候用了有三十几个response.write ,天,调试完后把这三十个一个个删除,累! 今天看到一个ASP中的Debug类(VBS),试用了一下,绝! 使用方法很简单: test.asp 复制代码 代码如下: <!--#INCLUDE FILE="debuggingConsole.asp&quo

  • 利用vbscript脚本修改文件内容,此适用于自动化的操作中

    利用vbscript脚本修改文件内容,此适用于自动化的操作中 '新建一个Replace.vbs脚本,脚本内容如下,程序运行时输入三个参数:查找内容,替换内容,文件 复制代码 代码如下: Dim FileName, Find, ReplaceWith, FileContents, dFileContents   Find = WScript.Arguments(0)   ReplaceWith = WScript.Arguments(1)   FileName = WScript.Argument

  • ASP基础知识VBScript基本元素讲解

    VBScript数据类型 VBScript只有一种数据类型,即Variant,称为变体型.Varriant是一种特殊的数据类型,根据使用的方式,它可以包含不同类别的信息.因为Variant是VBScript中惟一的数据类型,所以它也是VBScript中所有函数的返回值的数据类型. 最简单的Variant可以包含数字或字符串信息.Variant 用于数字上下文中时作为数字处理,用于字符串上下文中时作为字符串处理.也就是说,如果使用看起来像是数字的数据,则VBScript会假定其为数字并以适用于数字

  • ASP基础入门第四篇(脚本变量、函数、过程和条件语句)

    在上一篇小编向大家简要介绍了 ASP 脚本语言之一 VBScript 的一些基本常识,本期将继续给大家讲解 VBScript 的脚本编写方法,并通过展示 VBScript 在 ASP 程序编写过程中的一系列实例使大家对 VBScript 有更进一层的理解.   函数和过程一样都是命名了的代码块,但它们却有很大的区别,过程完成程序任务,函数则返回值.我们可以这样理解,过程象一个完整的句子,而函数则象一个单词.举个例子,当你想获取某个数的平方根,你只要将该数传给 VBScript 的 Sqr() 函

  • vbscript脚本编程教程2利用fso来进行文件操作

    by sssa2000 我们来看一看怎么利用fso来进行文件操作.Fso时vbs里进行文件操作的核心.作为黑客,不管学习什么语言,对文件的操作都应该是要了如指掌的,所以请大家仔细学习. 不说废话,先看fso由哪几个对象组成: drive对象:包含储存设备的信息,包括硬盘,光驱,ram盘,网络驱动器 drives集合:提供一个物理和逻辑驱动器的列表 file  对象:检查和处理文件 files 集合:提供一个文件夹中的文件列表 folder对象:检查和处理文件夹 folders集合:提供文件夹中子

  • 用vbscript脚本实现返回 IP 配置数据的代码

    用以返回配置数据(类似于 IPCONFIG 命令返回信息)的 WMI 脚本.' Returning IP Configuration Data ' WMI script that returns configuration data similar to that returned by IpConfig. strComputer = "." Set objWMIService = GetObject("winmgmts:\\"& strComputer &

随机推荐