Вы можете отследить командное окно по 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
, или любое другое содержимое исходного вызова командной строки (часть параметра строки, которая передается cmd.exe в первом аргументе, переданном Run
), который уникальным образом определяет конкретное окно cmd, которое вы хотите закрыть.
Если вы хотите закрыть все окна cmd, вы можете удалить условие из цикла и просто набрать cmdWindows.item().Terminate(0);
.
Внимание!
Перед вызовом функции необходимо установить синхронный вызов cmd, чтобы вы не закрывали окно, пока оно не выполнит свою работу. Этого можно достичь, изменив третий аргумент Run
на true
(то есть аргумент, который вы в настоящее время передаете как false
).
Вы также можете легко изменить функцию на более общую, просто передавая имя процесса и идентификатор в качестве аргументов, и сформировав строку запроса WMI с аргументом процесса и передав аргумент indentifier в indexOf
.