什么?难道我们忘了什么事情?不,我们未忘记任何事情。(尽管现在您提到它,但我们却有点想知道在我们早上离开屋子的时候是否有人将炉子关闭。)您说对了,在大多数 WMI 注册表脚本中,我们需要将值分配给两个变量,一个代表注册表项,另一个代表注册表项中所需的值。不过,在本例中,我们不需要创建在其中存储注册表值名称的变量。为什么不能呢?因为,从技术角度来说,“(默认)”值实际上并没有名称;它们只不过是默认值而已。我们最终所要做的是告诉该脚本从此特殊的注册表项中读取 Null 值。这听起来似乎不是很好的计划,不过幸运的是,“注册表提供程序”将知道这意味着读取“(默认)”值。
事实上,当谈到这个主题时,以下该行代码便可为我们检索值:
objRegistry.GetExpandedStringValue HKEY_CLASSES_ROOT,strKeyPath,vbNullString,strValue
因为“(默认)”碰巧具有 REG_EXPAND_SZ 数据类型,所以我们调用 GetExpandedStringValue 方法,传递四个参数:
? HKEY_CLASSES_ROOT,告诉脚本要使用哪个注册表配置单元的常量。
? strKeyPath,告诉脚本要使用哪个注册表项的变量。
? vbNullString,一个代表 Null 值的 VBScript 常量。这是我们通常插入代表值名称变量之处,不过正如我们说过的,这次我们的值没有名称。
? strValue,一个“输出”参数。GetExpandedStringValue 需要用一个地方来存储其从注册表中读取的值;输出参数只是一个占位符变量,可在其中存储值。
GetExpandedStringValue 可用后,我们便可使用该行代码将 strValue 中的所有字符更改为小写;这样做是为了更容易确定该值是否含有特殊字符串。
strValue = LCase(strValue)
最后,我们调用 InStr 函数,看看是否可在 strValue 中任何地方找到该字符串值 wscript.exe。如果可以找到,则我们将回显默认脚本宿主 WScript;如果没有找到,则一定意味着默认脚本宿主为 CScript:
嗯,除非您问我们一个无法回答的问题。但是,只要问我们可以回答的问题就绝不会难倒我们。







