VBA - 通过Shell终止Internet Explorer进程

时间:2016-10-02 15:04:38

标签: vba internet-explorer

包含终止IE实例的行会导致Do Until或我的宏冻结出现自动化错误。该行用于确保没有旧进程驻留在内存中。

当我进入调试,运行Shell行并等待一段时间后,问题不会出现,因此IE可能会在执行下一行之前加载。

我想知道是否有任何方法可以检测IE应用程序是否已准备就绪。用name='iexplore.exe'替换name='iexplore.exe *32'不会使32位进程消失,可能会消失并杀死其他实例可能会使用循环?

Shell ("C:\Windows\system32\cmd.exe /c wmic process where name='iexplore.exe' call terminate")

Link = "http://www.example.com"
Set ie = CreateObject("InternetExplorer.Application")

ie.Navigate Link

Do Until ie.ReadyState = 4 And ie.Busy = False
    DoEvents
Loop

1 个答案:

答案 0 :(得分:1)

WMIC只是调用对象。你可以直接打电话给他们。

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")

For Each objItem in colItems
    'msgbox objItem.name & " " & objItem.ProcessID & " " & objItem.CommandLine
    If objItem.name = "iexplore.exe" then objItem.terminate
Next

它的名字是IExplore.exe,无论哪个位。

访问shell文件夹(Explorer和Internet Explorer窗口[历史原因])。每5秒刷新一次所有shell窗口。我已经添加了一个msgbox。

    Set objShell = CreateObject("Shell.Application")
    Do 
        Set AllWindows = objShell.Windows
        Count = 0
        For Each window in AllWindows
            msgbox window.locationname
            window.refresh2 3
`To close a shell window
`window.close
            Count = Count + 1
        Next
        If Count = 0 then Exit Do
        Wscript.sleep 5000
    Loop