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

问:

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

-- 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 窗口的外观像命令窗口一样。如果这还不够酷,那,我们也不知道怎样才算酷了。(事实上,正如一个脚本专家儿子经常提醒他的脚本专家父亲的那样,我们不知道什么是酷。)

(0)

相关推荐

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

    问: 您好,脚本专家!如何将输出内容写到屏幕以覆盖当前屏幕上的内容? -- KM 答: 您好,KM.如果您确实需要将输出内容写到命令窗口,那么,我们没办法给您提供答案:尽管我们多少已经处理过一些问题,但我们从未找到一种简单.直接的方法可覆盖命令窗口中的信息. 不过,如果您要将信息输出到 Internet Explorer 窗口,那么我们还确实有解决办法.而且马上就可以给出答案: Set objExplorer = CreateObject("InternetExplorer.Applicatio

  • 将内容写到txt文档里面并读取及删除的方法

    1.将内容写到txt文档里面 复制代码 代码如下: public static void writeFile() { String txtFileName = "emailRecord.txt"; String directoryPath = ""; try { directoryPath = WebplusContext.getRealPath("/apps/schoolfellow/upload/smsRecord"); File direc

  • ASP.NET:把ashx写到类库里并在页面上调用的具体方法

    在类库中建Http Handler的操作很简单,就是添加一个普通的类,然后把之前ashx里的代码几乎一模一样贴到这个类中.但要注意命名空间和类名,因为之后我们会用 到.样例Handler: 复制代码 代码如下: namespace EdiBlog.Core.Web.HttpHandlers{    using System;    using System.Web; public class ExampleHandler : IHttpHandler    {        public boo

  • php实现异步将远程链接上内容(图片或内容)写到本地的方法

    本文实例讲述了php实现异步将远程链接上内容(图片或内容)写到本地的方法.分享给大家供大家参考,具体如下: /** * 异步将远程链接上的内容(图片或内容)写到本地 * * @param unknown $url * 远程地址 * @param unknown $saveName * 保存在服务器上的文件名 * @param unknown $path * 保存路径 * @return boolean */ function put_file_from_url_content($url, $sa

  • C#实现将类的内容写成JSON格式字符串的方法

    本文实例讲述了C#实现将类的内容写成JSON格式字符串的方法.分享给大家供大家参考.具体如下: 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //需要引用 Newtonsoft.Js

  • python如何实现内容写在图片上

    本文实例为大家分享了python将内容写在图片上的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- # Created on 2018/3/20 import base64 import random import os import sys import time from PIL import Image, ImageFont, ImageDraw reload(sys) sys.setdefaultencoding('utf8') BASE_PATH =

  • hutool实战:IoUtil 流操作工具类(将内容写到流中)

    目录 用途:IO工具类(将内容写到流中) 使用场景 项目引用 方法摘要 方法明细 方法名称:cn.hutool.core.io.IoUtil.write(java.io.OutputStream, boolean, byte[]) 参数描述: 返回值: 方法名称:cn.hutool.core.io.IoUtil.writeUtf8(java.io.OutputStream, boolean, java.lang.Object[]) 参考案例: 源码解析: 方法名称:cn.hutool.core.

  • Android实现让图片在屏幕上任意移动的方法(拖拽功能)

    本文实例讲述了Android实现让图片在屏幕上任意移动的方法.分享给大家供大家参考,具体如下: public class DragExampleActivity extends Activity { Bitmap mBitmap; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInst

  • 写给新手同学的vuex快速上手指北小结

    本文介绍了写给新手同学的vuex快速上手指北小结,分享给大家,具体如下 引入 //store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: {...}, mutations: {...}, actions: {...} }) export default store //main.js ... import store from './sto

  • vscode写python时的代码错误提醒和自动格式化的方法

    python的代码错误检查通常用pep8.pylint和flake8,自动格式化代码通常用autopep8.yapf.black.这些工具均可以利用pip进行安装,这里介绍传统的利用pip.exe安装和在VScode中安装两种方式. [温馨提醒] 要使用flake8或要想flake8等工具起作用,前提是必须把settings.json文件中的"python.linting.enabled"值设为"true",否则即使安装了这些工具,也起不到代码的错误提醒. [传统安

随机推荐