问:
您好,脚本专家!如何将输出内容写到屏幕以覆盖当前屏幕上的内容?
-- 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 窗口的外观像命令窗口一样。如果这还不够酷,那,我们也不知道怎样才算酷了。(事实上,正如一个脚本专家儿子经常提醒他的脚本专家父亲的那样,我们不知道什么是酷。)
您好,脚本专家!如何将输出内容写到屏幕以覆盖当前屏幕上的内容?
-- 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 窗口的外观像命令窗口一样。如果这还不够酷,那,我们也不知道怎样才算酷了。(事实上,正如一个脚本专家儿子经常提醒他的脚本专家父亲的那样,我们不知道什么是酷。)
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
更新日志
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]