如何暂停一个脚本,然后在用户按下键盘上的一个键时恢复它的运行?

来源:百度文库 编辑:神马文学网 时间:2024/04/29 14:31:41

如何暂停一个脚本,然后在用户按下键盘上的一个键时恢复它的运行?

问:

嗨,Scripting Guy!我想暂停脚本,然后在用户按下键盘上的任意按键时恢复它的运行。我怎样才能做到?

-- AL

答:

嗨,AL。哦,这个问题让我们回溯到:“按任意键继续,”以及“终止、重试或失败”这一计算机史上最著名的词组之一。对不起,我们需要一点时间来感叹以前那些美好的时光。唉……。

过去,“按任意键继续”几乎是每个批处理文件的基本要素。以前,只要在批处理文件当中插入一个暂停命令;那样,批处理文件就会暂停——就像忠实的老狗,呆在那里,等您按键盘上的按键。只要按一个键——任意键,批处理文件就会继续运行。有兴趣追忆往事的人可以试着运行这个简单的小批处理文件,来了解具体情况:

echo offpauseecho The batch file is complete.

注意:将其保存为 .bat 文件,而不是 .vbs 文件。

无疑您们当中有许多人会想:“哇,脚本比批处理文件好得多,也强大得多。我打赌会有非常棒的方法用以在脚本中执行“按任意键继续”的操作。”老实说,我们也会这么认为。但您猜怎么样:没有办法在脚本中实现这一功能。

那么,可能有某种笨一些的变通方法,可是我们绞尽脑汁也想不出一个法子。问题在于 Windows Script Host 不是设计作为一个以事件驱动的环境;换句话说,WSH 不知道如何等待某个事件(比如:按键盘上的键)的发生。加上与命令行交互的能力有限,因此只能得到无法实现暂停命令功能的脚本环境。

我们知道:这不是您真正希望得到的答案。而我们确实可以给您一个安慰奖。我们无法复制暂停命令(可让计算机等到您按了键盘上的任意键后再继续执行操作)。但是,我们可以给您一些代码,从而让计算机等到您按了键盘上的“ENTER”键后再继续执行操作(是的,必须是“ENTER”键)。这与您想要的并不完全相符,但却行得通:

strMessage = "Press the ENTER key to continue. "Wscript.StdOut.Write strMessageDo While Not WScript.StdIn.AtEndOfLineInput = WScript.StdIn.Read(1)LoopWScript.Echo “The script is complete.”

这个脚本所做的就是在屏幕上显示一条消息,然后使用 StdIn(仅包含在 WSH 5.6 中,这表示只有安装了 WSH 5.6 才可以运行该脚本)等待用户在命令行中输入数据。StdIn 将等待您按“ENTER”键;只要一按“ENTER”键,该脚本就将继续运行。如果按了“ENTER”键以外的其他键又会怎么样?没什么大不了:所按的任何其他键的值将显示在屏幕上。在最终按到“ENTER”键之前,脚本只会显示所按的任何其他键的值。那时,脚本会结束循环并继续运行。

假如您有疑惑,记得 StdIn 确实是使用命令行向脚本输入数据的一种方法。例如,您的脚本可能会提示您输入用户名或文件名。因此等您按“ENTER”键,作为指示数据输入完成的一种方法。否则,可能键入用户名的第一个字母时,StdIn 就会开始运行。“ENTER”是表示数据输入完成的官方信号。