VBS教程:函数-CreateObject 函数( 四 )


顺便说一句,使用此方法,您一次只能选择一个文件,而不能按住“Ctrl”键选择多个文件 。有一种方法可以选择多个文件,
至少在 XP 计算机上可以,但是我们只能将此问题留到以后的专栏中讨论了 。
--------------------------------------------------------------------------------
15 我如何确定进程是在哪个帐户下运行的?
问:
嗨,Scripting Guy!我有一个脚本,它返回关于计算机上运行的所有进程的信息,
只是我不知道如何获得这些进程在其下运行的用户帐户的名称 。您可以帮助我吗?
-- DL
答:
您好,DL 。是的,我们可以帮助您 。确定进程是在哪个帐户下运行的,实际上相当简单,
只是如何着手执行此操作并不是特别显而易见的 。如果您与大多数人一样,
那么您可能会通过扫描 Win32_Process 类的属性来查找名为 Account 或 UserName 或类似的属性 。您很有可能找不到 。
出现这种情况的原因是:Win32_Process 没有可以告诉您进程在哪个帐户下运行的属性 。
您需要使用“GetOwner”方法来捕捉此信息 。下面这个脚本可以告诉您 Microsoft Word (Winword.exe) 在哪个帐户下运行:
strComputer = "."Set objWMIService = GetObject("winmgmts:\\" &strComputer &"\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = 'Winword.exe'")
For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain Wscript.Echo "Process " &objProcess.Name &" is owned by " _ &strUserDomain &"\" &strUserName &"."Next
我们最感兴趣的是下面这行代码:
objProcess.GetOwner strNameOfUser, strUserDomain
我们在此所做的就是调用“GetOwner”方法 。GetOwner 返回两个“输出参数”,
一个返回负责该进程的用户的名称,一个返回该用户所属的域 。为捕获这两个输出参数,我们需要为 GetOwner 方法提供两个变量 。
在这个示例脚本中,我们使用了两个分别叫做 strUserName 和 strUserDomain 的变量 。名称可以随意选择;您可以将变量称为 A 和 B 或 X 和 Y 或任何其他您想要的名称 。
不过,变量的顺序不能随意设置:返回的第一个值总是用户名,第二个值总是域 。这意味着,如果您希望用 X 表示用户名,用 Y 表示域,那么您要确保您的代码像下面这行代码一样:
objProcess.GetOwner X, Y
调用 GetOwner 之后,我们就可直接回显进程名和所有者 。请注意,我们可以稍微来点儿花样儿 – 使用域\用户格式 。这样,我们就可以回显类似于“fabrikam\kenmyer”的名称 。
下面附带提供了另一个脚本,该脚本可以列出计算机上的所有进程以及各个进程的所有者:
strComputer = "."Set objWMIService = GetObject("winmgmts:\\" &strComputer &"\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _ ("Select * from Win32_Process")
For Each objProcess in colProcessList objProcess.GetOwner strUserName, strUserDomain Wscript.Echo "Process " &objProcess.Name &" is owned by " _ &strUserDomain &"\" &strUserName &"."Next
可能有人感到奇怪,2005 年 1 月 3 日正好是 Microsoft 员工的正式休息日 。
那么今天为什么会有“嗨,Scripting Guy!”专栏?这只能是由于 Microsoft 脚本专家表现出来的对工作的难以置信的奉献和投入精神 。
或者,也可能是由于某个脚本专家 – 还说不出他或她的名字 – 没有意识到今天是假日,所以照常来了(而且是在早上 7 点啊!) 。
--------------------------------------------------------------------------------
16 可以将脚本的输出复制到剪贴板吗?
问:
嗨,Scripting Guy!有办法将脚本输出复制到剪贴板吗?
-- ZW, Marseilles, France
答:
您好,ZW.如果您不介意用一些疯狂的解决方法,那么实际上将脚本输出复制到剪贴板相当容易 。
首先,您需要构造一个字符串,其中包含想要的输出 。然后,创建 Internet Explorer 的一个实例,
然后在其中打开一个空白页 。接着,利用 Internet Explorer 对象模型的内置功能,将字符串复制到剪贴板;
特别是,可以使用 clipboardData.SetData 方法来实现这个技巧 。将某些数据复制到剪贴板的示例脚本如下:
strCopy = "This text has been copied to the clipboard."
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentwindow.clipboardData.SetData "text", strCopy
objIE.Quit
运行脚本,然后打开 Notepad,然后单击“粘贴”;应该可以看到所复制的字符串 。

推荐阅读