打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

问:

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

-- 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 标记。例如,假设我们希望用粗体显示此消息。在这种情况下,我们只需使用 <B> 和 </B> 标记即可:

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

设置了 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 = "<img src=‘file:///C:\Scripts\watch.gif‘> " & _"Your logon script is being processed. This might take several minutes to complete."

最终结果为:

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
让innerHTML中的script脚本执行起来
MCGS 这个脚本不明白
安全代码审查.跨站点脚本攻击(XSS)
让插入到innerhtml的script跑起来
Javascript Widget入门学习解析
JavaScript 用法 | 菜鸟教程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服