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.