首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历注册表项

遍历注册表项
EN

Stack Overflow用户
提问于 2015-08-30 11:11:43
回答 1查看 1.1K关注 0票数 2

我已经知道如何使用RegRead读取注册表值。

代码语言:javascript
复制
var WshShell = W.CreateObject("WScript.Shell");
var val = WshShell.RegRead("HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Audio\\EnableCaptureMonitor");
WScript.Echo(val);

现在,我想迭代某些注册表路径中的所有键。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-30 15:04:06

我可以想出几种方法。第一个(也是最简单的,IMO)是使用reg.exe命令行实用程序(从Windows开始提供)来为您做脏的工作。下面是一个查询HKEY_LOCAL_MACHINE\Software所有子键的示例

代码语言:javascript
复制
var objShell = new ActiveXObject("WScript.Shell");
var objExec = objShell.Exec("REG QUERY HKLM\\SOFTWARE");
var strKeys = objExec.StdOut.ReadAll();
var a = strKeys.split("\n");

for (var i = 0; i < a.length; ++i) {
    WScript.Echo(a[i]);
}

注意,该实用工具似乎在输出的开始和结束时返回一个额外的换行符,因此准备好筛选数组中的几个空白条目。

第二种方法使用WMI的StdRegProv类。使用JScript (vs VBScript)有点痛苦,但这是可能的。下面是一个示例,演示如何迭代相同的子键:

代码语言:javascript
复制
// Constant for HKEY_LOCAL_MACHINE...
var HKLM = 0x80000002;

// Get an instance of the StdRegProv class...
var objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default");
var objReg = objService.Get("StdRegProv");

// Prepare the EnumKey method...
var objMethod = objReg.Methods_.Item("EnumKey"); 
var objParamsIn = objMethod.InParameters.SpawnInstance_(); 
objParamsIn.hDefKey = HKLM; 
objParamsIn.sSubKeyName = "Software"; 

// Execute the method and collect the output...
var objParamsOut = objReg.ExecMethod_(objMethod.Name, objParamsIn); 

// If successful, iterate the subkeys...
if (objParamsOut.ReturnValue === 0) {
    if (objParamsOut.sNames != null) {
        var a = objParamsOut.sNames.toArray();
        for (var i = 0; i < a.length; ++i) {
            WScript.Echo(a[i]);
        }
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32295918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档