用vbs检测Internet Explorer 中是否启用了 ActiveX

2019-01-16 10:29:57刘景俊

我们首先定义一个名为 HKEY_CURRENT_USER 的常量并将其值设置为 &H80000001;这将告诉脚本我们要使用哪个注册表配置单元。然后我们连接到 WMI 服务;请注意,StdRegProv(标准注册表提供程序)类位于 rootdefault 命名空间中。(许多脚本编写者都认为该类与大多数 WMI 类一样,都位于 rootcimv2 中。事实并非如此。)

接下来我们将为一对变量赋值:

strKeyPath = "SoftwareMicrosoftWindowsCurrentVersionInternet SettingsZones1"
ValueName = "1200"

正如您所看到的,变量 strKeyPath 包含 HKEY_CURRENT_USER 中的注册表路径(请勿在该路径中包含 HKEY_CURRENT_USER,否则,脚本将失败)。同时,将变量 ValueName 设置为 1200,该值恰好为我们要读取的注册表值。

然后我们调用 GetDWORDValue 方法,这样我们可读取注册表中的双字节值:

objReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, ValueName, dwValue

请注意,我们需要向 GetDWORDValue 传递几个参数:

HKEY_CURRENT_USER,告诉脚本要使用哪个注册表配置单元的常量。

strKeyPath,包含注册表路径的变量。

ValueName,表示我们要读取的注册表值的变量。

dwValue,将结束存储从注册表中读取的值的“输出参数”。如果您正在想,“请稍等,我们没有为 dwValue 赋值,”您说对了。我们就是这样设计的:我们为输出参数赋值。相反,GetDWORDValue 将读取恰好存储在所讨论的注册表值 (1200) 中的任何值,然后该方法会将该值赋给 dwValue。

确实很不错,不是吗?

此时,我们可只回显从注册表中检索的值。不过,正如我们所指出的那样,该检索值将为诸如 1、3 或 65536 这样的值。因此,我们建立一个简单小巧的 If Then ElseIf 块以检查返回值,并回显一个更有意义的消息:

If IsNull(dwValue) Then
  Wscript.Echo "Intranet sites: The value is either Null or could not be found in the registry."
ElseIf dwValue = 0 Then
  Wscript.Echo "Intranet sites: Enabled"
ElseIf dwValue = 1 Then
  Wscript.Echo "Intranet sites: Prompt"
ElseIf dwValue = 3 Then
  Wscript.Echo "Intranet sites: Disabled"
ElseIf dwValue = 65536 Then
  Wscript.Echo "Intranet sites: Administrator Approved"
End If

您说对了:一旦您知道值存储在注册表中的什么位置以及如何将值存储在注册表中,这就相当容易了。

仅仅为了省去键入(和/或复制与粘贴)之苦,下面的脚本可返回所有四个安全区域的信息: