Как закрыть окно HTA от другого HTA?

я пытался реализовать свои собственные модальные диалоги (Зачем?). Я открываю новое окно, используя:WScript.Shell

dlg = shell.Run(dlgPath, 1, true);

Строка выше создает "пол-модальный» Окно HTA. Выполнение сценария останавливается на этой строке, но главное окно все еще реагирует. Эта проблема решается в рамкахonfocusin обработчик событий, который возвращает фокус обратно в новое окно HTA, используяshell.AppActivate(), Это мешает дажеЗакрыть окно" Кнопка, чтобы закрыть главное окно. Однако в Windows7Задние ворота, чтобы закрыть главное окно, значок на панели задач Windows.

Если главное окно закрыто, приличный модальный диалог также должен быть закрыт. В этом случае оно не закрывается, поскольку открытое окно HTA не является реальным дочерним окном основного.

Я могу закрыть этот эмулятор диалога в главном окнеonbeforeunload Функция обработчика ниже.

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

Теперь все выглядит хорошо, на экране не осталось окон моего приложения. Однако, когда я открываю процессы диспетчера задач Windows -tab, я вижу процессглавное окно Все еще работает.

Почему главное окно все еще работает? Это ждет концаshell-процесс? Что мне делать вonbeforeunload обработчик, чтобы полностью закрыть главное окно? Если мне нужен другой подход к этому, пожалуйста, дайте мне знать.

Ответы на вопрос(1)

Ваш ответ на вопрос