如何在脚本运行的时候显示进度栏(或其他类似项)?

来源:百度文库 编辑:神马文学网 时间:2024/04/16 11:56:57

如何在脚本运行的时候显示进度栏(或其他类似项)?

问:

您好,脚本专家!在代码执行时如何使脚本执行一些有趣的操作?如何显示进度栏或其他类似项?

-- HD

答:

您好,HD。首先,我们建议您不要尝试使用真正的进度栏;因为它很难计算进度,更不要说显示进度了。我们都熟悉那些所谓的进度栏 – 唉,Microsoft 的产品中也包含一些,有些进度栏会指示完成某项操作的预计时间是 3 分钟,然后是 296 分钟,1 分钟,14 分钟。我们不想为这样的东西浪费时间。

我们建议您尝试一个简单的小对话框(或者至少是看起来类似于对话框的东西),它只是用来通知用户一些操作正在进行并请用户耐心等待。当操作完成时,我们的示例对话框会相应地显示一条提示消息,然后消失。它没有什么奇特之处,但的确很实用。

代码如下:

On Error Resume NextSet objExplorer = CreateObject _("InternetExplorer.Application")objExplorer.Navigate "about:blank"objExplorer.ToolBar = 0objExplorer.StatusBar = 0objExplorer.Width = 400objExplorer.Height = 200objExplorer.Visible = 1objExplorer.Document.Title = "Logon script in progress"objExplorer.Document.Body.InnerHTML = "Your logon script is being processed. " _& "This might take several minutes to complete."Wscript.Sleep 10000objExplorer.Document.Body.InnerHTML = "Your logon script is now complete."Wscript.Sleep 5000objExplorer.Quit

我们在此进行的所有操作就是创建 Internet Explorer 的一个实例,然后使用以下这行代码在浏览器窗口中打开一个空白页面:

objExplorer.Navigate "about:blank"

去除工具栏和状态栏(通过将这些值设置为 0),然后将窗口大小分别设置为 400 像素和 200 像素。然后,我们将 Visible 属性设置为 1,其在屏幕上实际显示小的 Internet Explorer 窗口。纯粹是为了进行演示,我们使用下面这行代码配置窗口的 Title 属性:

objExplorer.Document.Title = "Logon script in progress"

最终结果是什么呢?结果是这个样子:

对于其本身来说已经很好了,但是我们或许还可以做得更好一点儿:首先,我们可以在 Internet Explorer 文档中显示自定义消息。为此,我们应设置文档正文的 InnerHTML 属性:

objExplorer.Document.Body.InnerHTML = "Your logon script is being processed. " _& "This might take several minutes to complete."

这段代码的好处是:在将值分配给 InnerHTML 属性时,我们可以使用所有我们喜欢的 HTML 标记。例如,假设我们希望用粗体显示此消息。在这种情况下,我们只需使用 标记即可:

objExplorer.Document.Body.InnerHTML = "Your logon script is being processed. " _& "This might take several minutes to complete."

设置了 InnerHTML 属性之后,我们就得到与以下类似的 Internet Explorer 实例:

还不错吧?在示例脚本中,我们暂停 10 秒,然后用一条新消息替代旧消息,新消息会通知用户他们的登录脚本已经完成。我们再暂停 5 秒,然后消除 Internet Explorer 的实例。

如果您希望更加别致一些,您可以再进行几项操作。在即将展示给您的经修订的脚本中,我们使用 WMI 类 Win32_DesktopMonitor 来确定当前的视频分辨率(如 1024x768)。然后,我们使用一些简单的数学方法将 IE 窗口定位在屏幕的中间。例如,如果我们的屏幕宽度为 1024 像素,则应从 1024 中减去 400(Internet Explorer 窗口的宽度)。用这个数字除以 2,就得出了窗口左侧的像素位置。对显示高度 (768) 重复此操作可以得到窗口顶部的像素位置,从而使对话框在屏幕上居中显示。以下是用于获取屏幕宽度和高度的代码:

strComputer = "."Set objWMIService = GetObject("Winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")For Each objItem in colItemsintHorizontal = objItem.ScreenWidthintVertical = objItem.ScreenHeightNext

此处还有两行代码,可将窗口定位在屏幕上:

objExplorer.Left = (intHorizontal - 400) / 2objExplorer.Top = (intVertical - 200) / 2

附注。上述代码事实上适用于只具有单个监视器的计算机;在具有多个监视器的系统上,特别是在这些监视器的其中一个关闭时,情况将变得有点复杂。现在,我们假设只有一个监视器;有关多个监视器的问题我们将在后面进行处理。

除了将 Internet Explorer 窗口居中之外,我们还将光标设置为沙漏时需来强调这样一个事实:用户需要等待一会儿。可使用以下这行代码来执行该操作:

objExplorer.Document.Body.Style.Cursor = "wait"

在脚本中后面的部分,我们将光标设置为默认,这样可消除沙漏,使光标重新变为标准的箭头光标。

修改后的新脚本如下所示:

On Error Resume NextstrComputer = "."Set objWMIService = GetObject("Winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery("Select * From Win32_DesktopMonitor")For Each objItem in colItemsintHorizontal = objItem.ScreenWidthintVertical = objItem.ScreenHeightNextSet objExplorer = CreateObject _("InternetExplorer.Application")objExplorer.Navigate "about:blank"objExplorer.ToolBar = 0objExplorer.StatusBar = 0objExplorer.Left = (intHorizontal - 400) / 2objExplorer.Top = (intVertical - 200) / 2objExplorer.Width = 400objExplorer.Height = 200objExplorer.Visible = 1objExplorer.Document.Body.Style.Cursor = "wait"objExplorer.Document.Title = "Logon script in progress"objExplorer.Document.Body.InnerHTML = "Your logon script is being processed. " _& "This might take several minutes to complete."Wscript.Sleep 10000objExplorer.Document.Body.InnerHTML = "Your logon script is now complete."objExplorer.Document.Body.Style.Cursor = "default"Wscript.Sleep 5000objExplorer.Quit

您还觉得不够别致吗?好吧,另一个增添花样的方法就是在您的 InnerHTML 中使用 .GIF 动画。例如,下面这行代码除显示一条消息之外,还显示一个 .GIF 动画:

objExplorer.Document.Title = "Logon script in progress"objExplorer.Document.Body.InnerHTML = " " & _"Your logon script is being processed. This might take several minutes to complete."

最终结果为:

这可能称不上艺术品,但我们认为绝对可以说这是“在代码执行时执行一些有趣的操作”。另外,请记住,您可以更改图片的对齐方式,还可以更改字体的大小和颜色 -- 您可以进行任何 HTML 允许您进行的操作。

附注。若想在代码执行时进行一些真正有趣的操作,请访问 Dr. Scripto’s Fun Zone(Dr. Scripto 的乐园),学习如何在您的脚本中结合使用 Microsoft 代理技术。