Internet explorer 关闭应用程序窗口后意外停止运行

Internet explorer 关闭应用程序窗口后意外停止运行,internet-explorer,vbscript,popupwindow,Internet Explorer,Vbscript,Popupwindow,我正在写下面的vb脚本来关闭标题为“错误”的IE弹出消息 通过向弹出窗口发送Enter键,上述代码能够成功关闭弹出窗口。但是,下一行MsgBox“Closed”永远不会执行。为什么会这样?我需要做什么才能让它工作 当我尝试发送Tab键而不是Enter键时,MsgBox按预期显示。我怀疑当Enter键成功关闭错误窗口并因此阻止执行最后一行时发生了什么 在sendkey和msg框之间插入延迟或任何代码行之后,我就能够让msg框出来了。但是,我注意到,在等待至少20秒后,我无法关闭msg框。我注意到只

我正在写下面的vb脚本来关闭标题为“错误”的IE弹出消息

通过向弹出窗口发送Enter键,上述代码能够成功关闭弹出窗口。但是,下一行MsgBox“Closed”永远不会执行。为什么会这样?我需要做什么才能让它工作

当我尝试发送Tab键而不是Enter键时,MsgBox按预期显示。我怀疑当Enter键成功关闭错误窗口并因此阻止执行最后一行时发生了什么

在sendkey和msg框之间插入延迟或任何代码行之后,我就能够让msg框出来了。但是,我注意到,在等待至少20秒后,我无法关闭msg框。我注意到只有当我试图关闭IE错误窗口时才会发生这种情况。当我尝试使用其他本地窗口时,我可以关闭MsgBox。为什么会这样?

这是因为回车键会立即关闭两个窗口。您应该在两个任务之间添加几秒钟的睡眠

Set wshShell = CreateObject("WScript.Shell") wshShell.AppActivate("Error") 
Wscript.Sleep 4000
wshShell.SendKeys "{ENTER}" 
Wscript.Sleep 2000
MsgBox "Closed"
这是因为回车键会立即关闭两个窗口。您应该在两个任务之间添加几秒钟的睡眠

Set wshShell = CreateObject("WScript.Shell") wshShell.AppActivate("Error") 
Wscript.Sleep 4000
wshShell.SendKeys "{ENTER}" 
Wscript.Sleep 2000
MsgBox "Closed"

找到了我自己问题的答案。因此,似乎AppActivate方法是罪魁祸首。由于服务器无法及时响应,它会将脚本挂起一段较长的时间

因此,最好的解决方案不是用AppActivate和SendKeys关闭窗口,而是用Task Kill替换它们:

Set wshShell = CreateObject("WScript.Shell")
wshShell.Run "cmd /c taskkill /fi ""WINDOWTITLE eq Error""", 0, True
MsgBox "Closed"

此时会出现MsgBox,我可以单击“确定”立即关闭它。

找到了我自己问题的答案。因此,似乎AppActivate方法是罪魁祸首。由于服务器无法及时响应,它会将脚本挂起一段较长的时间

因此,最好的解决方案不是用AppActivate和SendKeys关闭窗口,而是用Task Kill替换它们:

Set wshShell = CreateObject("WScript.Shell")
wshShell.Run "cmd /c taskkill /fi ""WINDOWTITLE eq Error""", 0, True
MsgBox "Closed"

此时会出现MsgBox,我可以单击“确定”立即关闭它。

感谢Wasif的回复,但最后一行仍然没有执行。我也尝试过同样的关闭记事本窗口。代码可以关闭它们,但最后一行仍然被跳过。嗨,Wasif。这很有效。但是我注意到Wscript.Sleep 2000行可以是任何东西,它仍然可以工作,所以这里有些东西非常有趣。例如,用MsgBox“Test”替换该行并执行代码,我得到最后一行,但测试消息框从未出现。你知道它为什么这样工作吗?因为我们必须在每个消息框之前插入延迟。否则,消息框将表现得疯狂。请通过单击灰色勾号接受答案插入延迟似乎不是导致msgbox出现的原因,因为脚本似乎希望跳过SendKeys方法行下方的行,因此我仍然怀疑它是如何以这种方式运行的。请尝试逐行调试代码,以查看它是否显示使用Enter或not键发送后的消息。尝试用debug.print替换msgbox,以查看它是否在控制台中打印消息。感谢Wasif的回复,但最后一行仍然没有执行。我也尝试过同样的关闭记事本窗口。代码可以关闭它们,但最后一行仍然被跳过。嗨,Wasif。这很有效。但是我注意到Wscript.Sleep 2000行可以是任何东西,它仍然可以工作,所以这里有些东西非常有趣。例如,用MsgBox“Test”替换该行并执行代码,我得到最后一行,但测试消息框从未出现。你知道它为什么这样工作吗?因为我们必须在每个消息框之前插入延迟。否则,消息框将表现得疯狂。请通过单击灰色勾号接受答案插入延迟似乎不是导致msgbox出现的原因,因为脚本似乎希望跳过SendKeys方法行下方的行,因此我仍然怀疑它是如何以这种方式运行的。请尝试逐行调试代码,以查看它是否显示使用Enter或not键发送后的消息。尝试将msgbox替换为debug.print,以查看它是否在控制台中打印消息。感谢您发布此问题的解决方案。我建议你试着在48小时后将自己的答案标记为这个问题的可接受答案。它可以在未来帮助其他社区成员解决类似的问题。感谢您的理解。感谢您发布此问题的解决方案。我建议你试着在48小时后将自己的答案标记为这个问题的可接受答案。它可以在未来帮助其他社区成员解决类似的问题。谢谢你的理解。