我试图实现自己的模态对话框( 为什么? )。 我打开使用一个新的窗口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
处理程序来获取主窗口完全关闭? 如果我需要一个不同的方法来此,请让我知道。