Jump to content

Closing IE issue (closed IE process remain working after IE object being closed)


 Share

Go to solution Solved by DaleHohm,

Recommended Posts

I'm having some problems with my script.

The webpage I'm trying to automate tends to take a lot of memory. So as a solution I came up with was to reset the problematic IE instance on each "next" page in a form:

  • Read all data on current page (the data I want to extract)
  • Get hRef of the "next" page
  • close IE instance with _IEQuit
  • open IE instance with fresh hRef URL I got previously.

The problem is that the process on _IEQuit is not closed when I have multiple _IE instances until the last IE instance is closed. Why is that? And thus, I cannot clear any memory usage fromĀ  previous IE instance, and my memory usage will keep getting bigger and bigger until it eventually crashes due to insufficient memory.

I have made a script that simulates this problem:

#include <array.au3>
#include <IE.au3>

Global $oIE1, $oIE2, $oIE3

_Main()

Func _Main()
    _ShowIEProcess('Before starting')
    $oIE1 = _IECreate('http://www.google.com/')
    $oIE2 = _IECreate('http://www.bing.com/')
    $oIE3 = _IECreate('http://www.ask.com/')
    _ShowIEProcess('After starting 3 IE instances')
    _IEQuit($oIE3)
    Sleep(1000);time given for IE to actually close
    _ShowIEProcess('After closing 3rd one')
    _IEQuit($oIE2)
    Sleep(1000);time given for IE to actually close
    _ShowIEProcess('After closing 2nd one')
    _IEQuit($oIE1)
    Sleep(1000);time given for IE to actually close
    _ShowIEProcess('After closing last one (1st one)')
EndFunc

Func _ShowIEProcess($title)
    Local $iExploreProcess = ProcessList('iexplore.exe')
    If NOT @error Then
        _ArrayDisplay($iExploreProcess, $title)
    Else
        MsgBox(0, 'Clear - ' & $title, 'NO iexplore.exe process')
    EndIf
EndFunc
Edited by dragan
Link to comment
Share on other sites

This is one of my attempts to solve this problem (by killing certain iexplore.exe processes):

#AutoIt3Wrapper_UseX64=n
#include <array.au3>
#include <IE.au3>

Global $oIE[3]
Global $ChildIE[4][3] = [[0,0,0],[0,0,0],[0,0,0],[0,0,0]]

_Main()

Func _Main()
    Local $thePID

    _ShowIEProcess('Before starting')
    _ArrayDisplay($ChildIE, 'All children')

    $oIE[0] = _IECreate('http://www.google.com/')
    _AddNewPid($ChildIE, $oIE, 0)

    $oIE[1] = _IECreate('http://www.bing.com/')
    _AddNewPid($ChildIE, $oIE, 1)

    $oIE[2] = _IECreate('http://www.ask.com/')
    _AddNewPid($ChildIE, $oIE, 2)

    _ShowIEProcess('After starting all')

    _IEQuitEX($oIE, 2)
    _ShowIEProcess('After closing 3rd one')

    _IEQuitEX($oIE, 1)
    _ShowIEProcess('After closing 2nd one')

    $oIE[2] = _IECreate('http://www.ask.com/')
    _AddNewPid($ChildIE, $oIE, 2)
    _ShowIEProcess('After re-starting 3rd one')
    
    _IEQuitEX($oIE, 0)
    _ShowIEProcess('After closing 1st one')

    _IEQuitEX($oIE, 2)
    _ShowIEProcess('After closing last one (3rd one)')
EndFunc

Func _IEQuitEX($oIE_Obj, $Index)
    If NOT IsObj($oIE_Obj[$Index]) Then Return SetError(1)
    _IEQuit($oIE_Obj[$Index])
    Local $iExploreProcess = ProcessList('iexplore.exe')
    If NOT @error Then
        If $iExploreProcess[0][0] = 0 Then
            For $i = 0 to 3
                $ChildIE[$i][0] = 0
                $ChildIE[$i][1] = 0
                $ChildIE[$i][2] = 0
            Next
        Else
            For $i = 1 to $iExploreProcess[0][0]
                Local $ProcessParagraphs = _ProcessListProperties($iExploreProcess[$i][1])
                Local $CredAt = StringRegExp($ProcessParagraphs, 'CREDAT\:([0-9]{1,9})',1)
                If NOT @error Then
                    If $ChildIE[$Index+1][2] = $CredAt[0] Then
                        ProcessClose($iExploreProcess[$i][1])
                        Local $_TempTimer = TimerInit()
                        Do
                            Sleep(100)
                            If TimerDiff($_TempTimer) >= 5000 then ExitLoop
                        Until NOT ProcessExists($iExploreProcess[$i][1])
                        $ChildIE[$Index+1][0] = 0
                        $ChildIE[$Index+1][1] = 0
                        $ChildIE[$Index+1][2] = 0
                        $ALLZeros = True
                        For $k = 1 to 3
                            If $ChildIE[$k][0] <> 0 Then
                                $ALLZeros = False
                                ExitLoop
                            EndIf
                        Next
                        If $ALLZeros = True Then
                            For $k = 0 to 3
                                $ChildIE[$k][0] = 0
                                $ChildIE[$k][1] = 0
                                $ChildIE[$k][2] = 0
                            Next
                        EndIf
                    EndIf
                EndIf
            Next
        EndIf
    EndIf
EndFunc

Func _AddNewPid(ByRef $theArray, $oIE_Obj, $Index)
    If NOT IsObj($oIE_Obj[$Index]) then Return SetError(1)
    If $theArray[0][0] = '' Then
        $theArray[0][0] = WinGetProcess(_IEPropertyGet($oIE_Obj[$Index], 'hwnd'))
        $theArray[0][1] = 'main IE Pid'
        $theArray[0][2] = 'no CREDAT'
        Local $ChildrenArray = _ProcessGetChildren($theArray[0][0])
        If @error then Return SetError(2)
        If Number($ChildIE[$Index+1][0]) = 0 Then
            $ChildIE[$Index+1][0] = $ChildrenArray[$ChildrenArray[0][0]][0]
            $ChildIE[$Index+1][1] = _IEPropertyGet($oIE_Obj[$Index], 'hwnd')
            Local $ProcessParagraphs = _ProcessListProperties(Number($ChildIE[$Index+1][0]))
            Local $CredAt = StringRegExp($ProcessParagraphs, 'CREDAT\:([0-9]{1,9})',1)
            If NOT @error Then
                $ChildIE[$Index+1][2] = $CredAt[0]
            Else
                $ChildIE[$Index+1][2] = 0
            EndIf
        EndIf
    Else
        Local $ChildrenArray = _ProcessGetChildren($theArray[0][0])
        If @error then Return SetError(2)
        If Number($ChildIE[$Index+1][0]) = 0 Then
            $ChildIE[$Index+1][0] = $ChildrenArray[$ChildrenArray[0][0]][0]
            $ChildIE[$Index+1][1] = _IEPropertyGet($oIE_Obj[$Index], 'hwnd')
            Local $ProcessParagraphs = _ProcessListProperties(Number($ChildIE[$Index+1][0]))
            Local $CredAt = StringRegExp($ProcessParagraphs, 'CREDAT\:([0-9]{1,9})',1)
            If NOT @error Then
                $ChildIE[$Index+1][2] = $CredAt[0]
            Else
                $ChildIE[$Index+1][2] = 0
            EndIf
        EndIf
    EndIf
EndFunc

Func _ShowIEProcess($title)
    Local $iExploreProcess = ProcessList('iexplore.exe')
    If NOT @error Then
        _ArrayDisplay($iExploreProcess, $title)
    Else
        MsgBox(0, 'Clear - ' & $title, 'NO iexplore.exe process')
    EndIf
EndFunc

Func _ProcessListProperties($Process = "", $sComputer = ".")
    Local $sUserName, $sMsg, $sUserDomain, $avProcs, $dtmDate
    Local $avProcs = ""
    $oWMI = ObjGet("winmgmts:{impersonationLevel=impersonate,authenticationLevel=pktPrivacy, (Debug)}!\\" & $sComputer & "\root\cimv2")
    If IsObj($oWMI) Then

        If IsInt($Process) Then
            $colProcs = $oWMI.ExecQuery("select * from win32_process where ProcessId = " & $Process)
        Else
            $colProcs = $oWMI.ExecQuery("select * from win32_process where Name = '" & $Process & "'")
        EndIf

        If IsObj($colProcs) Then
            If $colProcs.count = 0 Then Return $avProcs
            For $oProc In $colProcs
                $avProcs = $oProc.CommandLine
            Next
        Else
            SetError(2)
        EndIf
        $colProcs = 0
    Else
        SetError(1)
    EndIf
    Return $avProcs
EndFunc

Func _ProcessGetChildren($i_pid)
    Local Const $TH32CS_SNAPPROCESS = 0x00000002

    Local $a_tool_help = DllCall("Kernel32.dll", "long", "CreateToolhelp32Snapshot", "int", $TH32CS_SNAPPROCESS, "int", 0)
    If IsArray($a_tool_help) = 0 Or $a_tool_help[0] = -1 Then Return SetError(1, 0, $i_pid)

    Local $tagPROCESSENTRY32 = _
    DllStructCreate _
                    ( _
                    "dword dwsize;" & _
                    "dword cntUsage;" & _
                    "dword th32ProcessID;" & _
                    "uint th32DefaultHeapID;" & _
                    "dword th32ModuleID;" & _
                    "dword cntThreads;" & _
                    "dword th32ParentProcessID;" & _
                    "long pcPriClassBase;" & _
                    "dword dwFlags;" & _
                    "char szExeFile[260]" _
                    )
    DllStructSetData($tagPROCESSENTRY32, 1, DllStructGetSize($tagPROCESSENTRY32))

    Local $p_PROCESSENTRY32 = DllStructGetPtr($tagPROCESSENTRY32)

    Local $a_pfirst = DllCall("Kernel32.dll", "int", "Process32First", "long", $a_tool_help[0], "ptr", $p_PROCESSENTRY32)
    If IsArray($a_pfirst) = 0 Then Return SetError(2, 0, $i_pid)

    Local $a_pnext, $a_children[11][2] = [[10]], $i_child_pid, $i_parent_pid, $i_add = 0
    $i_child_pid = DllStructGetData($tagPROCESSENTRY32, "th32ProcessID")
    If $i_child_pid <> $i_pid Then
        $i_parent_pid = DllStructGetData($tagPROCESSENTRY32, "th32ParentProcessID")
            If $i_parent_pid = $i_pid Then
            $i_add += 1
            $a_children[$i_add][0] = $i_child_pid
            $a_children[$i_add][1] = DllStructGetData($tagPROCESSENTRY32, "szExeFile")
        EndIf
    EndIf

    While 1
        $a_pnext = DLLCall("Kernel32.dll", "int", "Process32Next", "long", $a_tool_help[0], "ptr", $p_PROCESSENTRY32)
        If IsArray($a_pnext) And $a_pnext[0] = 0 Then ExitLoop
        $i_child_pid = DllStructGetData($tagPROCESSENTRY32, "th32ProcessID")
        If $i_child_pid <> $i_pid Then
            $i_parent_pid = DllStructGetData($tagPROCESSENTRY32, "th32ParentProcessID")
            If $i_parent_pid = $i_pid Then
                If $i_add = $a_children[0][0] Then
                    ReDim $a_children[$a_children[0][0] + 11][2]
                    $a_children[0][0] = $a_children[0][0] + 10
                EndIf
                $i_add += 1
                $a_children[$i_add][0] = $i_child_pid
                $a_children[$i_add][1] = DllStructGetData($tagPROCESSENTRY32, "szExeFile")
            EndIf
        EndIf
    WEnd

    If $i_add <> 0 Then
        ReDim $a_children[$i_add + 1][2]
        $a_children[0][0] = $i_add
    EndIf

    DllCall("Kernel32.dll", "int", "CloseHandle", "long", $a_tool_help[0])
    If $i_add Then Return $a_children
    Return SetError(3, 0, 0)
EndFunc

However, there is a problem if Internet Explorer is already started by user, or some other program, because two IE windows can be bind to one iexplore.exe process, and thus this solution will no longer work :(

Has anyone came up with another solution?

Link to comment
Share on other sites

I need IE. This is just a small recreation of the problem I have in my script. I don't want just to open 3 pages and them close them, I need to pull out data, type data into input boxes, check radios, etc... Maybe this can be done via FF.au3 and firefox, but my script counts 10k+ lines, it wold be a drag to convert everything into FF.

Link to comment
Share on other sites

you could make a script that converts IE scripts to FF scripts haha. but i get what you r talking about. i just personally find that FF works a little bit easier as far as data extraction and inputting info into text fields and input boxes. and it does it all in 1 window with like 20 tabs (i have a script currently that checks for updated tv show torrents). i originally had it in IE but it just was like pulling teeth to get the same info out of IE.Ā 

i know it is gonna be a pain, but it is something to try out.

Ā 

btw, i tested out your script and it does the same thing to me. the process stays until the last IE window is closed. so it must be something to do with how IE handles windows and processes.

Link to comment
Share on other sites

#include <array.au3>
#include <IE.au3>

Global $oIE1, $oIE2, $oIE3

_Main()

Func _Main()
_ShowIEProcess('Before starting')
$oIE1 = _IECreate('http://www.google.com/')
$oIE2 = _IECreate('http://www.bing.com/')
$oIE3 = _IECreate('http://www.ask.com/')
_ShowIEProcess('After starting 3 IE instances')
_IEQuit($oIE3)
Sleep(1000);time given for IE to actually close
_ShowIEProcess('After closing 3rd one')
_IEQuit($oIE2)
Sleep(1000);time given for IE to actually close
_ShowIEProcess('After closing 2nd one')
_IEQuit($oIE1)
Sleep(1000);time given for IE to actually close
_ShowIEProcess('After closing last one (1st one)')
EndFunc

Func _ShowIEProcess($title)
Local $iExploreProcess = ProcessList('iexplore.exe')
If NOT @error Then
_ArrayDisplay($iExploreProcess, $title)
Else
MsgBox(0, 'Clear - ' & $title, 'NO iexplore.exe process')
EndIf
EndFunc

This works fine for me on IE10v

Link to comment
Share on other sites

Works fine as in - certain iexplore.exe process is being closed on EACH _IEQuit?

I'm also on IEv10 (Win7, 64-bit), and like I wrote in my 1st post, the problem isn't about running the script, it's about closing iexplore process on _IEQuit, because I see no other way to clear the memory of one IE instance.

Link to comment
Share on other sites

  • Solution

IE will attach several browser instances to the same iexplore process, by default.Ā  There are internal algorithms that determine when a new process is required (like different security zones).Ā 

If you want to force creation of a new iexplore process, there is an undocumented function in IE.au3 that you can call.Ā  Simply note that it is currently a prototype and the name and potentially some of the logic will change before/if it makes it into the core function set.Ā  It is called __IECreateNewIE() (note the two underscores in the name).Ā  You can look in IE.au3 to see what parameters it takes (note: URL is not one of them), but I would suggest that you can call it without parameters and it will

  • create a new browser instance attached to a new iexplore process
  • return the object reference to the browser
  • place the PID of the iexplore process in @extended

Ā 

Dale

Edited by DaleHohm

Free Internet Tools: DebugBar, AutoIt IE Builder, HTTP UDF, MODIV2, IE Developer Toolbar, IEDocMon, Fiddler, HTML Validator, WGet, curl

MSDN docs: InternetExplorer Object, Document Object, Overviews and Tutorials, DHTML Objects, DHTML Events, WinHttpRequest, XmlHttpRequest, Cross-Frame Scripting, Office object model

Automate input type=file (Related)

Alternative to _IECreateEmbedded? better: _IECreatePseudoEmbeddedĀ  Better Better?

IE.au3 issues with Vista - Workarounds

SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=Y

Doesn't work needs to be ripped out of the troubleshooting lexicon. It means that what you tried did not produce the results you expected. It begs the questions 1) what did you try?, 2) what did you expect? and 3) what happened instead?

Reproducer: a small (the smallest?) piece of stand-alone code that demonstrates your trouble

Link to comment
Share on other sites

Yes, this is the answer to my original question. I can get the PID, and close IE process by myself.

#include <array.au3>
#include <IE.au3>

Global $oIE[3][2]

_Main()

Func _Main()
    _ShowIEProcess('Before starting')

    _CreateIEToIndex($oIE, 0, 'http://www.google.com/')

    _CreateIEToIndex($oIE, 1, 'http://www.bing.com/')

    _CreateIEToIndex($oIE, 2, 'http://www.ask.com/')

    _ShowIEProcess('After starting 3 IE instances')

    _KillIEByIndex($oIE, 2)
    _ShowIEProcess('After closing 3rd one')

    _KillIEByIndex($oIE, 1)
    _ShowIEProcess('After closing 2nd one')

    _KillIEByIndex($oIE, 0)
    _ShowIEProcess('After closing last one (1st one)')
EndFunc

Func _CreateIEToIndex(ByRef $IEARRAY, $Index, $URL)
    $IEARRAY[$Index][0] = __IECreateNewIE('')
    If NOT @error then
        $IEARRAY[$Index][1] = @extended
        _IENavigate($IEARRAY[$Index][0], $URL)
    EndIf
EndFunc

Func _ShowIEProcess($title)
    Local $iExploreProcess = ProcessList('iexplore.exe')
    If NOT @error Then
        _ArrayDisplay($iExploreProcess, $title)
    Else
        MsgBox(0, 'Clear - ' & $title, 'NO iexplore.exe process')
    EndIf
EndFunc

Func _KillIEByIndex($IEARRAY, $Index)
    _IEQuit($IEARRAY[$Index][0])
    If ProcessExists($IEARRAY[$Index][1]) Then
        ProcessClose($IEARRAY[$Index][1])
        ProcessWaitClose($IEARRAY[$Index][1], 5)
    EndIf
EndFunc

This is a good way to start new iexplore process (just like you said), but I think there might be a problem if the user starts IE manually, or perhaps some other program which starts IE, and it binds to one of my iexplore processed I started from this script, then using this script I will kill both IE instances, the one script started, and the one user started. (Or am I wrong with this statement?)

But do you have any advice about clearing memory from running iexplore.exe process? Is there a better way (instead of closing and re-starting IE)?

Link to comment
Share on other sites

Ā . . . . .

But do you have any advice about clearing memory from running iexplore.exe process? Is there a better way (instead of closing and re-starting IE)?

Ā 

Hi dragan,

have a look to >this link, there you can find something that may interest you

especially among the "Memory Functions" there this:

_ProcessEmptyWorkingSet() ; Flushes non-essential Process memory to the Pagefile

I guess it could solve your memory problem:

Bye

Ā 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Link to comment
Share on other sites

Hi dragan,

have a look to >this link, there you can find something that may interest you

especially among the "Memory Functions" there this:

_ProcessEmptyWorkingSet() ; Flushes non-essential Process memory to the Pagefile

I guess it could solve your memory problem:

Bye

That function doesn't really solve any problems, it just moves the data from your memory to your hard drive. It's a much better solution to let Windows handle memory management, because the people that wrote it probably know a whole lot more than the average user. Unless the memory isn't being released when you close IE I wouldn't worry about it, regardless of how little memory you have in your system, when Windows needs more it will find the processes that are holding memory that can be paged to the disk and then page it back and forth.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. Ā - Ā ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. Ā - Ā Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. Ā - Ā _FileGetProperty - Retrieve the properties of a file Ā - Ā SciTE Toolbar - A toolbar demo for use with the SciTE editor Ā - Ā GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. Ā - Ā Ā Latin Square password generator

Link to comment
Share on other sites

That function doesn't really solve any problems, it just moves the data from your memory to your hard drive. It's a much better solution to let Windows handle memory management, because the people that wrote it probably know a whole lot more than the average user. Unless the memory isn't being released when you close IE I wouldn't worry about it, regardless of how little memory you have in your system, when Windows needs more it will find the processes that are holding memory that can be paged to the disk and then page it back and forth.

Ā 

I'm not sure of the effectiveness of those functions, however, from the author's site downloaded the package that contains a number of examples, among them there is one called "ProcessMemoryReducer.au3", well, running that program, selecting the iexplore.exe process and pressing the button "free memory", it seems that the memory used has been reduced.

I did this after having opened and then closed a few web pages with IE.

Ā 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Link to comment
Share on other sites

Unless the memory isn't being released when you close IE I wouldn't worry about it.

Ā 

That's exactly what's happening, the memory isn't being released.

I don't know if this is how IE was built, but I was monitoring it via resource monitor. And I've seen that after single iexplore process reaches ~700mb RAM, another iexplore.exe will be started, so now 2 iexplore processes are in charge of that one instance, and the memory usage keeps getting bigger and bigger on each "next" page.... to a point where I get IE error message "Not enough storage is available to complete this operation.", and new IE won't start anymore until I manually close those iexplore processes.

Link to comment
Share on other sites

That's exactly what's not happening.

What's happening is that you're opening the IE instances and they're not closing properly. Which has nothing whatever to do with memory usage, it has to do with properly shutting IE down. Whether it's something to do with how you're opening and closing them, or a bug in Windows, or a bug in IE, you need to find out why the processes aren't closing before you start dumping memory to the hard drive. You have a memory leak and all that function will do is hide it, it wont' fix it.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. Ā - Ā ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. Ā - Ā Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. Ā - Ā _FileGetProperty - Retrieve the properties of a file Ā - Ā SciTE Toolbar - A toolbar demo for use with the SciTE editor Ā - Ā GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. Ā - Ā Ā Latin Square password generator

Link to comment
Share on other sites

I confirm that after further tests consistent in opening several web pages that contain many images (google image search, youtube and others), after closing some of these pages the memory remains occupied, (visible in task manager).

But after running the program "ProcessMemoryReducer.au3" on iexplore.exe processes (as done in my >prvious post) the memory used (visible even with task manager) has been reduced.

EDIT:

does that memory only goes to end up in the pagefile?

EDIT 2:

.... of course. It's clearly written on the comment :idiot: (What a shame)
Ā Ā Ā  _ProcessEmptyWorkingSet() ; Flushes non-essential Process memory to the Pagefile

Edited by Pincopanco

Ā 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Link to comment
Share on other sites

you need to find out why the processes aren't closing before you start dumping memory to the hard drive. You have a memory leak and all that function will do is hide it, it wont' fix it.

I was never planing to just dump memory into hard drive, nor to hide it. I would like to clear it, which is why I'm here, to get help about this issue.

I suspect that the page I'm trying to automate (which is mostly built in java) has memory hogs, and I can do nothing about that, unless I force-clear it's memory somehow... This is where I came up with a solution to just close that IE, and start a new one on the last url, where I closed it.Ā  But I was very surprised to see that normal _IEQuit will not close it's iexplore.exe process.

Link to comment
Share on other sites

Running the script in post #6, and having Task Manager open, I see that it opens 4 instances of IE (not 3 like I expected), then as it closes the windows the processes are still showing in the array and in Task Manager until the 3rd window is closed. Only after all the IE objects have been closed using IEQuit does it close the other 3 processes of IE. There's definitely something going on with IEQuit because it closes the window for internet explorer, but it's not shutting down the IE process when it does that.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. Ā - Ā ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. Ā - Ā Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. Ā - Ā _FileGetProperty - Retrieve the properties of a file Ā - Ā SciTE Toolbar - A toolbar demo for use with the SciTE editor Ā - Ā GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. Ā - Ā Ā Latin Square password generator

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...