当前位置: 首页 > 图文教程 > 脚本技术 > VBScript > 用vbs将输出内容写到屏幕以覆盖当前屏幕上的内容的方法

VBScript
用vbs检索在运行对话框中键入的一系列命令的代码
编写可以打开文本文件并打乱在该文件中所找到的单词顺序的vbs脚本
在 HTA 中暂停脚本的方法
运行脚本之前,如何确定计算机上的默认脚本宿主的代码
用vbs实现删除名称中有撇号的文件夹
用vbs将输出内容写到屏幕以覆盖当前屏幕上的内容的方法
用vbs实现配置无人登录计算机时使用的屏幕保护程序
用vbs更改 Internet Explorer 的标题栏
用vbs读取文本文件的最后一行
用vbs实现重新启动 Internet Explorer
用vbs实现禁用服务
用vbs确定计算机是否有 USB 2.0 端口的代码
用vbs列出注册表中 Run 项中的所有项目
用vbs将名称截断以使其最多包含 16 个字符的代码
用vbs将本地文件替换为在文件服务器上找到的新版本
用vbs确定脚本正在哪一个帐户下运行
用vbs确定可移动驱动器的连接时间
用vbs记录屏幕保护程序的开始时间和结束时间
用vbs计算某个词在日志文件中的出现次数
vbs病毒的简单例子源代码解析

VBScript 中的 用vbs将输出内容写到屏幕以覆盖当前屏幕上的内容的方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-11   浏览: 55 ::
收藏到网摘: n/a

问:
您好,脚本专家!如何将输出内容写到屏幕以覆盖当前屏幕上的内容?
-- KM
答:
您好,KM。如果您确实需要将输出内容写到命令窗口,那么,我们没办法给您提供答案:尽管我们多少已经处理过一些问题,但我们从未找到一种简单、直接的方法可覆盖命令窗口中的信息。
不过,如果您要将信息输出到 Internet Explorer 窗口,那么我们还确实有解决办法。而且马上就可以给出答案:
Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = 400
objExplorer.Height = 200
objExplorer.Left = 0
objExplorer.Top = 0
Do While (objExplorer.Busy)
Wscript.Sleep 200
Loop
objExplorer.Document.Title = "Process Information"
objExplorer.Visible = 1
objExplorer.Document.Body.InnerHTML = "Retrieving process information."
Wscript.Sleep 2000
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objItem in colItems
objExplorer.Document.Body.InnerHTML = objItem.Name
Wscript.Sleep 500
Next
objExplorer.Document.Body.InnerHTML = "Process information retrieved."
Wscript.Sleep 3000
objExplorer.Quit
看上去确实有点长,但其实非常简单,这一点您很快就会发现。例如,乍一看,这段代码可能挺恐怖:
Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"
objExplorer.ToolBar = 0
objExplorer.StatusBar = 0
objExplorer.Width = 400
objExplorer.Height = 200
objExplorer.Left = 0
objExplorer.Top = 0
不过,事实证明,我们所做的只是创建一个 Internet Explorer 的空实例;而且,这是通过前两行代码完成的。其余代码行只是配置 Internet Explorer 窗口的各种属性而已:我们设置宽度为 400 像素,隐藏工具栏,然后将 Internet Explorer 窗口定位在屏幕的左上角。如果愿意使用 Internet Explorer 窗口的默认配置,则可跳过 3 到 8 行。
设置完 Internet Explorer 窗口之后,我们使用下面的 Do While 循环,在完全载入 Internet Explorer 后中止该脚本:
Do While (objExplorer.Busy)
Wscript.Sleep 200
Loop
看到了吗?还算不错。启动并运行 Internet Explorer 后,接下来为 Internet Explorer 窗口指定一个标题,并将 Visible 属性设置为 True (1)。我们这么做的原因是,迄今为止,Internet Explorer 还在隐藏窗口中运行,在屏幕上看不到。不过下面的代码可解决这个小问题:
objExplorer.Document.Title = "Process Information"
objExplorer.Visible = 1
现在我们准备在窗口中写点什么。对于此示例脚本,就像下面的代码那样简单:
objExplorer.Document.Body.InnerHTML = "Retrieving process information."
正如您所看到的那样,我们只是赋给 Document.Body 对象的 InnerHTML 属性一个值。这种情况下,我们仅为 InnerHTML 赋予一些文本:检索进程信息。不过,我们可以很容易地添加一些 HTML 标记并创建更为独特的输出。例如,此行代码会将写到窗口中的文本加粗:
objExplorer.Document.Body.InnerHTML = "<B>Retrieving process information.</B>"
好吧,或许这与设想并不完全相符。但您已经得到问题的答案了。
在 Internet Explorer 窗口中显示我们的文本字符串之后,我们便可将该脚本中止 2 秒(2000 毫秒)。没有什么原因必须要这样做,只是这样您就能在覆盖原来的文本之前看到它们。
接下来是下面这段代码:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objItem in colItems
objExplorer.Document.Body.InnerHTML = objItem.Name
Wscript.Sleep 500
Next
我们只需检索本地计算机上运行的进程集合。这并不十分重要;我们只是需要通过运行该脚本而得到一些有趣的结果。我们今天所关心的是在我们建立的用来遍历该集合中所有项的 For Each 循环内将会发生什么:
For Each objItem in colItems
objExplorer.Document.Body.InnerHTML = objItem.Name
Wscript.Sleep 500
Next
在多数 WMI 脚本中,我们在 For Each 循环内回显属性值(例如,Name)。不过在此,我们不使用 Wscript.Echo,而是将集合中第一个进程的名称分配给脚本主体的 InnerHTML 属性:
objExplorer.Document.Body.InnerHTML = objItem.Name
这样做会有什么结果呢?将使用集合中第一个进程的名称覆盖 Internet Explorer 窗口的现有内容。例如,我们要开始循环时,Internet Explorer 窗口中将含有以下文本:
检索进程信息。
当我们启动循环后,这段文本将被替换为集合中第一个进程的名称。例如:
Winword.exe。
覆盖窗口中的内容后,我们将脚本中止半秒(500 毫秒)。再次强调一下,这并不是必须要做的事情;我们这样做只是为了减缓脚本速度,以便您能看到显示的第一个进程的名称。半秒后,进入下一个循环并检索关于集合中第二个进程的信息。之后,该脚本将用第二个进程的名称替换 Internet Explorer 窗口中的现有内容(从技术角度上讲,是赋给 InnerHTML 属性的值),然后以此类推。
在遍历整个集合后,我们指示该脚本已结束,中止 3 秒,然后关闭 Internet Explorer 窗口:
objExplorer.Document.Body.InnerHTML = "Process information retrieved."
Wscript.Sleep 3000
objExplorer.Quit
运行效果很不错,而且非常简单。因为它使用 HTML,这意味着您尽可以使输出如您所愿;事实上,您甚至可以使 Internet Explorer 窗口的外观像命令窗口一样。如果这还不够酷,那,我们也不知道怎样才算酷了。(事实上,正如一个脚本专家儿子经常提醒他的脚本专家父亲的那样,我们不知道什么是酷。)