如何使用JavaScript关闭CMD窗口?

时间:2019-04-03 07:36:15

标签: javascript internet-explorer activex

我正在写一个页面,一旦保存到本地计算机,它就可以运行 cmd 进行 tracert ping 和其他用于网络诊断的操作仅页面可用于最多页面,但是将结果保存到文件后我无法弄清楚如何关闭cmd窗口?

它仅在IE中有效。

  

运行 tracert >保存到文件>文件被拉到textarea>通过   电子邮件

我希望系统将其放入弹出窗口。
我已经尝试过:

WshShell.close()
WshShell.Quit
WScript.close
WScript.Quit

<script type="text/javascript" language="javascript">
    function RunFile3() {
    var domain = document.getElementById("domain").value;
    WshShell = new ActiveXObject("WScript.Shell");
    WshShell.Run("c:/windows/system32/cmd.exe /k tracert " + domain + " > C:/xampp/htdocs/tracert/trace.txt", 1, false);
}
</script>
</head>
<body>
<input type="text" id="domain">
!---<input type="button" value="Run Ping" onclick="RunFile2();"/>--->
<input type="button" value="Run Tracert" onclick="RunFile3();"/>
<br>
<textarea rows="30" cols="60" id="results">
</textarea>

1 个答案:

答案 0 :(得分:1)

您可以通过WMI跟踪命令窗口,然后终止该过程。像这样:

function closeCMD () {
    var wmiLocator = new ActiveXObject('WbemScripting.SWbemLocator'),
        wmiService = wmiLocator.ConnectServer('.', 'root\\CIMV2'),
        cmdWindows = new Enumerator(wmiService.ExecQuery("Select * from Win32_Process Where name = 'cmd.exe'"));
    while (!cmdWindows.atEnd()) {
        if (cmdWindows.item().CommandLine.indexOf('trace.txt') > -1) { // *
            cmdWindows.item().Terminate(0);
        }
        cmdWindows.moveNext();
    }
    return;
}

* = trace.txt,或原始命令行调用的任何内容(在传递给Run的第一个参数中传递给cmd.exe的字符串的参数部分)都可以唯一地标识特定的您要关闭的cmd窗口。

如果要关闭所有cmd窗口,则可以从循环中删除条件,只需执行cmdWindows.item().Terminate(0);

重要!
在调用该函数之前,您必须将cmd调用设置为同步,以便在完成其工作之前不会关闭该窗口。可以通过将Run的第三个参数更改为true(即您当前作为false传递的参数)来实现。


您还可以轻松地将函数更通用地更改,只需将进程名称和标识符作为参数传递,并使用进程参数构建WMI查询字符串,并将indentifier参数传递给indexOf