DDR爱好者之家 Design By 杰米
问:
嗨,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>
嗨,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>
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年12月26日
2024年12月26日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]