用vbs将输出内容写到屏幕以覆盖当前屏幕上的内容的方法
用vbs将输出内容写到屏幕以覆盖当前屏幕上的内容的方法
发布时间:2016-12-28 来源:查字典编辑
摘要:问:您好,脚本专家!如何将输出内容写到屏幕以覆盖当前屏幕上的内容?--KM答:您好,KM。如果您确实需要将输出内容写到命令窗口,那么,我们没...

问:

您好,脚本专家!如何将输出内容写到屏幕以覆盖当前屏幕上的内容?

--KM

答:

您好,KM。如果您确实需要将输出内容写到命令窗口,那么,我们没办法给您提供答案:尽管我们多少已经处理过一些问题,但我们从未找到一种简单、直接的方法可覆盖命令窗口中的信息。

不过,如果您要将信息输出到InternetExplorer窗口,那么我们还确实有解决办法。而且马上就可以给出答案:

SetobjExplorer=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

DoWhile(objExplorer.Busy)

Wscript.Sleep200

Loop

objExplorer.Document.Title="ProcessInformation"

objExplorer.Visible=1

objExplorer.Document.Body.InnerHTML="Retrievingprocessinformation."

Wscript.Sleep2000

strComputer="."

SetobjWMIService=GetObject("winmgmts:"&strComputer&"rootcimv2")

SetcolItems=objWMIService.ExecQuery("Select*fromWin32_Process")

ForEachobjItemincolItems

objExplorer.Document.Body.InnerHTML=objItem.Name

Wscript.Sleep500

Next

objExplorer.Document.Body.InnerHTML="Processinformationretrieved."

Wscript.Sleep3000

objExplorer.Quit

看上去确实有点长,但其实非常简单,这一点您很快就会发现。例如,乍一看,这段代码可能挺恐怖:

SetobjExplorer=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

不过,事实证明,我们所做的只是创建一个InternetExplorer的空实例;而且,这是通过前两行代码完成的。其余代码行只是配置InternetExplorer窗口的各种属性而已:我们设置宽度为400像素,隐藏工具栏,然后将InternetExplorer窗口定位在屏幕的左上角。如果愿意使用InternetExplorer窗口的默认配置,则可跳过3到8行。

设置完InternetExplorer窗口之后,我们使用下面的DoWhile循环,在完全载入InternetExplorer后中止该脚本:

DoWhile(objExplorer.Busy)

Wscript.Sleep200

Loop

看到了吗?还算不错。启动并运行InternetExplorer后,接下来为InternetExplorer窗口指定一个标题,并将Visible属性设置为True(1)。我们这么做的原因是,迄今为止,InternetExplorer还在隐藏窗口中运行,在屏幕上看不到。不过下面的代码可解决这个小问题:

objExplorer.Document.Title="ProcessInformation"

objExplorer.Visible=1

现在我们准备在窗口中写点什么。对于此示例脚本,就像下面的代码那样简单:

objExplorer.Document.Body.InnerHTML="Retrievingprocessinformation."

正如您所看到的那样,我们只是赋给Document.Body对象的InnerHTML属性一个值。这种情况下,我们仅为InnerHTML赋予一些文本:检索进程信息。不过,我们可以很容易地添加一些HTML标记并创建更为独特的输出。例如,此行代码会将写到窗口中的文本加粗:

objExplorer.Document.Body.InnerHTML="<B>Retrievingprocessinformation.</B>"

好吧,或许这与设想并不完全相符。但您已经得到问题的答案了。

在InternetExplorer窗口中显示我们的文本字符串之后,我们便可将该脚本中止2秒(2000毫秒)。没有什么原因必须要这样做,只是这样您就能在覆盖原来的文本之前看到它们。

接下来是下面这段代码:

strComputer="."

SetobjWMIService=GetObject("winmgmts:"&strComputer&"rootcimv2")

SetcolItems=objWMIService.ExecQuery("Select*fromWin32_Process")

ForEachobjItemincolItems

objExplorer.Document.Body.InnerHTML=objItem.Name

Wscript.Sleep500

Next

我们只需检索本地计算机上运行的进程集合。这并不十分重要;我们只是需要通过运行该脚本而得到一些有趣的结果。我们今天所关心的是在我们建立的用来遍历该集合中所有项的ForEach循环内将会发生什么:

ForEachobjItemincolItems

objExplorer.Document.Body.InnerHTML=objItem.Name

Wscript.Sleep500

Next

在多数WMI脚本中,我们在ForEach循环内回显属性值(例如,Name)。不过在此,我们不使用Wscript.Echo,而是将集合中第一个进程的名称分配给脚本主体的InnerHTML属性:

objExplorer.Document.Body.InnerHTML=objItem.Name

这样做会有什么结果呢?将使用集合中第一个进程的名称覆盖InternetExplorer窗口的现有内容。例如,我们要开始循环时,InternetExplorer窗口中将含有以下文本:

检索进程信息。

当我们启动循环后,这段文本将被替换为集合中第一个进程的名称。例如:

Winword.exe。

覆盖窗口中的内容后,我们将脚本中止半秒(500毫秒)。再次强调一下,这并不是必须要做的事情;我们这样做只是为了减缓脚本速度,以便您能看到显示的第一个进程的名称。半秒后,进入下一个循环并检索关于集合中第二个进程的信息。之后,该脚本将用第二个进程的名称替换InternetExplorer窗口中的现有内容(从技术角度上讲,是赋给InnerHTML属性的值),然后以此类推。

在遍历整个集合后,我们指示该脚本已结束,中止3秒,然后关闭InternetExplorer窗口:

objExplorer.Document.Body.InnerHTML="Processinformationretrieved."

Wscript.Sleep3000

objExplorer.Quit

运行效果很不错,而且非常简单。因为它使用HTML,这意味着您尽可以使输出如您所愿;事实上,您甚至可以使InternetExplorer窗口的外观像命令窗口一样。如果这还不够酷,那,我们也不知道怎样才算酷了。(事实上,正如一个脚本专家儿子经常提醒他的脚本专家父亲的那样,我们不知道什么是酷。)

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新vbs学习
热门vbs学习
脚本专栏子分类