假设您通过 Windows Scripting Host(而不是浏览器中的 JavaScript)使用 JScript,您可以使用以下WScript.RegRead方法获取特定键的值:
// MyScript.js
var key = 'HKEY_CURRENT_USER\\SessionInformation\\ProgramCount'
, wsh = WScript.CreateObject('WScript.Shell')
, val = wsh.RegRead(key);
WScript.Echo('You are currently running ' + val + ' programs.');
如果您确实需要根据某些条件而不是已知的注册表项来搜索键或值,那么您可以实现自己的递归搜索算法,其中“REG_SZ”类型的注册表值是叶节点。
作为更熟悉 Windows Scripting Host 上的 JScript 的练习,我已经为注册表创建了一个小界面来完成此操作。项目中包含的示例显示了如何在 WSF 脚本中执行此类注册表搜索:
<job id="FindDisplayVersions">
<script language="jscript" src="../registry.js"/>
<script language="jscript">
// Search the registry and gather 20 DisplayVersion values.
var reg = new Registry()
, rootKey = 'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products'
, keyRegex = /Products\\(.*?)\\InstallProperties\\DisplayVersion$/
, valRegex = /^1\./
, maxResults = 20
, uids = [];
reg.find(rootKey, function(path, value) {
var keyMatch = keyRegex.exec(path);
if (keyMatch) {
if (valRegex.exec(value)) {
uids.push(keyMatch[1] + '\t=\t' + value);
if (uids.length >= maxResults) { return false; } // Stop searching
}
}
return true; // Keep searching.
});
WScript.Echo(uids.join("\n"));
</script>
</job>
请注意,正如@Robert Harvey 指出的那样,如果根键连接得太深,这可能需要很长时间。简单的测试只需要几秒钟我选择的钥匙,但你的里程可能会有所不同;当然,没有任何保证或适用性,如果您的计算机发生故障,请不要怪我。