Wie schließe ich ein HTA-Fenster von einem anderen HTA aus?

Ich habe versucht, meine eigenen modalen Dialoge zu implementieren (Warum?). Ich öffne ein neues Fenster mitWScript.Shell:

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

Die obige Zeile erstellt ein "semimodales" HTA-Fenster. Die Skriptausführung wird in dieser Zeile angehalten, das Hauptfenster reagiert jedoch weiterhin. Dieses Problem wird in angegangenonfocusin Eventhandler, der den Fokus mithilfe von auf das neue HTA-Fenster zurücksetztshell.AppActivate(). Dadurch wird verhindert, dass auch die Schaltfläche "Fenster schließen" das Hauptfenster schließt. In Windows7 gibt es jedoch ein Hintertor zum Schließen des Hauptfensters, das Symbol in der Windows-Taskleiste.

Wenn das Hauptfenster geschlossen ist, sollte auch ein anständiger modaler Dialog geschlossen werden. In diesem Fall wird es nicht geschlossen, da das geöffnete HTA-Fenster kein echtes untergeordnetes Fenster des Hauptfensters ist.

Ich kann diesen Dialog-Emulator im Hauptfenster schließenonbeforeunload Handler-Funktion unten.

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;
}

Jetzt sieht alles gut aus, es sind keine Fenster meiner App mehr auf dem Bildschirm. Wenn ich jedoch die Registerkarte "Windows Task-Manager-Prozesse" öffne, kann ich den Prozess von sehenHauptfenster funktioniert immer noch.

Warum läuft das Hauptfenster noch? Wartet es auf das Ende dershell-verarbeiten? Was soll ich tun?onbeforeunload Handler, um das Hauptfenster komplett zu schließen? Wenn ich einen anderen Ansatz benötige, lassen Sie es mich bitte wissen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage