【问题标题】:Convert VBScript code to javascript (i.e. JScript) code将 VBScript 代码转换为 javascript(即 JScript)代码
【发布时间】:2015-01-10 11:48:26
【问题描述】:

我们如何将以下 vbscript 转换为 javascript?

<script type="text/vbscript">

  Function SayHello()
    MsgBox "Hello"

HKEY_LOCAL_MACHINE = "&H80000002"
uninstallRegKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
stdRegPro = "winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv"

Set objReg=GetObject(stdRegPro)

objReg.EnumKey HKEY_LOCAL_MACHINE, uninstallRegKey, arrSubKeys
MsgBox arrSubKeys

  End Function

</script>

任何帮助表示赞赏。

谢谢, 乐。

【问题讨论】:

  • 你的意思是在 Windows Script Host (cscript/wscript) 中使用的 JScript,还是在浏览器中运行的 JavaScript

标签: javascript vbscript jscript


【解决方案1】:

如果您使用 JScript(Microsoft 为 Windows 实现的 Javascript)和一些信息,例如

,您可以
  1. Calling WMI Methods with JScript
  2. Troubles with WMI in JScript

(通过谷歌搜索“jscript wmi”找到)。

证据:

function showUnInstall() {
    var HKEY_LOCAL_MACHINE = 0x80000002;
    var uninstallRegKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
    var stdRegPro = "winmgmts:{impersonationLevel=impersonate}!//./root/default:StdRegProv";
    var objReg = GetObject(stdRegPro);

    var mEnumKey = objReg.Methods_.Item("EnumKey");
    var ipEnumKey = mEnumKey.InParameters.SpawnInstance_();
    ipEnumKey.hDefKey = HKEY_LOCAL_MACHINE;
    ipEnumKey.sSubKeyName = uninstallRegKey;

    var mGetStringValue = objReg.Methods_.Item("GetStringValue");
    var ipGetStringValue = mGetStringValue.InParameters.SpawnInstance_();
    ipGetStringValue.hDefKey = HKEY_LOCAL_MACHINE;
    ipGetStringValue.sValueName = "DisplayName";

    var opEnumKey = objReg.ExecMethod_(mEnumKey.name, ipEnumKey);
    if (0 === opEnumKey.ReturnValue) {
        var aNames = opEnumKey.sNames.toArray();
        for ( var i = 0; i < aNames.length; ++i) {
            ipGetStringValue.sSubKeyName = uninstallRegKey + "\\" + aNames[i];
            var opGetStringValue = objReg.ExecMethod_(mGetStringValue.name, ipGetStringValue);
            if (0 === opGetStringValue.ReturnValue) {
                WScript.Echo(opGetStringValue.sValue);
            } else {
                WScript.Echo("ERROR: GetStringValue.ReturnValue =", opGetStringValue.ReturnValue);
            }
        }
    } else {
        WScript.Echo("ERROR: EnumKey.ReturnValue =", opEnumKey.ReturnValue);
    }
}

输出:

cscript 26907078.js
7-Zip 4.65
ActiveState ActiveTcl 8.5.2.0
ERROR: GetStringValue.ReturnValue = 1
Adobe Flash Player 15 Plugin
ERROR: GetStringValue.ReturnValue = 1
CMake 2.8, a cross-platform, open-source build system
Acrobat.com
...

【讨论】:

  • 工作!!只是一点点改变。而不是 var objReg = GetObject(stdRegPro);我做了 var objReg = new ActiveXObject("WbemScripting.SWbemLocator");因为它抛出错误“JavaScript运行时错误:'GetObject'未定义”
【解决方案2】:

你不能。 Javascript 无权访问注册表。


这并不完全准确,我记得。使用 NPM 工具在 Windows 上运行的 Node.js 网络服务器确实可以访问,但只能访问运行它的服务器上的那个。但是,客户端 javascript 无权访问注册表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2014-01-03
    • 2017-07-11
    相关资源
    最近更新 更多