VBScript用于检测用户是否退出/退出Internet Explorer窗口

时间:2012-06-14 05:06:16

标签: internet-explorer vbscript

我有一个进度指示器,实现为我的脚本(VbScript)启动的小型IE窗口。除了在HTML文件中嵌入脚本之外,我希望能够检测用户是否退出此窗口,以便我可以“清理”。

是否有任何内置方式,使用VBScript(再次,真的希望不在html中嵌入脚本),检测用户是否已退出此IE窗口?目前,我正在尝试检查iexplore.exe是否不存在,但由于此进度对话的性质,这被证明是一项艰巨的任务,并且它带来了太多风险,无法接受。

1 个答案:

答案 0 :(得分:4)

如果使用CreateObject的第二个参数,则可以编写脚本以响应IE事件。 IE公开了窗口关闭时触发的onQuit事件。确保指定CreateObject方法的WScript变体。本机VBScript不支持所需的第二个参数。

Set objIE = WScript.CreateObject("InternetExplorer.Application", "IE_")

' Set up IE and navigate to page
   ' ...

' Keep the script busy so it doesn't end while waiting for the IE event
' It will start executing inside the subroutine below when the event fires
Do While True
    WScript.Sleep 1000
Loop

' Execute code when IE closes
Sub IE_onQuit
    'Do something here
End Sub

您可以使用更全面的示例here了解有关此方法的更多信息。这是一个很好的异步解决方案。

第二种方法使用WMI启动IE,以便您拥有正在运行的实例的直接对象。关闭实例时,对象引用变为空。

Const SW_NORMAL = 1
strCommandLine = "%PROGRAMFILES%\Internet Explorer\iexplore.exe"

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set objProcessStartup = objWMIService.Get("Win32_ProcessStartup")
Set objStartupInformation = objProcessStartup.SpawnInstance_
objStartupInformation.ShowWindow = SW_NORMAL
objStartupInformation.Title = strUniqueTitle

Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
intReturn = objProcess.Create("cmd /k" & vbQuote & strCommandLine & vbQuote, null, objStartupInformation, intProcessID)

Set objEvents = objWMIService.ExecNotificationQuery( _
    "SELECT * FROM __InstanceDeletionEvent " & _
    "WHERE TargetInstance ISA 'Win32_Process' " & _
    "AND TargetInstance.PID = '" & intProcessID & "'")

' The script will wait here until the process terminates and then execute any code below.
Set objReceivedEvent = objEvents.NextEvent

' Code below executes after IE closes

此解决方案使用WMI启动流程实例并返回其流程ID。然后它使用WMI事件来监视要结束的进程。这在同步方法和脚本执行中将停止并等待该过程完成。这也可以与ExecNotificationQueryAsync方法异步完成,但这种类型的脚本不太常见。