DaleHohm Posted May 24, 2005 Posted May 24, 2005 (edited) You cannot use ObjGet on InternetExplorer because its instances are not placed into the ROT (Running Object Table). Here is one method of attaching to a desired, existing instance of IE by examining the URL it is displaying.I do hope there are better ways to do this, but this works.It is important to know that you can get to the InternetExplorer object both with an $ObjIE = ObjCreate("InternetExplorer.Application") which creates a new instance, or through the Shell.Application object to Shell.Application.Windows.Item as done in the code below.If you set the $myURL variable to the exact URL being displayed in an existing IE window, you will end up with $ObjIE pointing to that instance. You can then use the properties, methods and events of the InternetExplorer object to manipulate it (see MSDN InternetExplorer Object Reference for more information.Dim $ObjShell = ObjCreate("Shell.Application") Dim $ObjShellWindows = $ObjShell.Windows(); collection of all ShellWindows (IE and File Explorer) Dim $ObjIE ; URL of IE instance we want to find Dim $myURL = "http://www.autoitscript.com/" For $item = 0 to ($ObjShellWindows.count - 1) $ObjIE = $ObjShellWindows.item($item); this is an InternetExplorer object ConsoleWrite($item & "> " & $ObjIE.path & @CR) ; The $ObjIE.path appears to be "C:\Program Files\Internet Explorer\" for IE and ; "C:\WINDOWS\" for file explorer on my machine (ShellWindows can be either). ; File explorer does not have the same properties as IE, so it is important to know. ; There is certainly a better way to figure this out, but I haven't found it yet. If ($ObjIE.path = @ProgramFilesDir & "\Internet Explorer\") Then ConsoleWrite($item & "> " & $ObjIE.document.URL & @CR) If ($ObjIE.document.URL = $myURL) Then ExitLoop; We found it... $ObjIE = "" Else $ObjIE = "" EndIf Next If isObj($ObjIE) Then ConsoleWrite("--> $ObjIE now points to an IE Instance connected to " & $myURL & @CR) Else ConsoleWrite("--> No IE instance was found connected to " & $myURL & @CR) EndIf Edited May 24, 2005 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
SvenP Posted May 24, 2005 Posted May 24, 2005 <{POST_SNAPBACK}>Dale,Thanks for this useful tip. It was already part of the beta versions. See in the beta.ZIP file in tests\com\Instance-of-IE-test.au3See also: http://www.autoitscript.com/forum/index.php?showtopic=10444Regards,-Sven
DaleHohm Posted May 24, 2005 Author Posted May 24, 2005 Dale,Thanks for this useful tip. It was already part of the beta versions. See in the beta.ZIP file in tests\com\Instance-of-IE-test.au3See also: http://www.autoitscript.com/forum/index.php?showtopic=10444Regards,-Sven<{POST_SNAPBACK}>Cool. And the use of LocationURL negates the need to look at .path to differentiate between IE and File Explorer... also no need for looking at the .itemNew code can be simplified to:Dim $ObjShell = ObjCreate("Shell.Application") Dim $ObjShellWindows = $ObjShell.Windows(); collection of all ShellWindows (IE and File Explorer) Dim $ObjIE ; URL of IE instance we want to find Dim $myURL = "http://www.autoitscript.com" For $Window in $ObjShellWindows ; ConsoleWrite($window.LocationURL & @CR) If $window.LocationURL = $myURL Then $ObjIE = $Window ExitLoop; We found it... Else $ObjIE = 0 EndIf Next If isObj($ObjIE) Then ConsoleWrite("--> $ObjIE now points to an IE Instance connected to " & $myURL & @CR) Else ConsoleWrite("--> No IE instance was found connected to " & $myURL & @CR) EndIf 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
Insolence Posted May 24, 2005 Posted May 24, 2005 Sweet guys, no need for pixelsearch any more "I thoroughly disapprove of duels. If a man should challenge me, I would take him kindly and forgivingly by the hand and lead him to a quiet place and kill him." - Mark TwainPatient: "It hurts when I do $var_"Doctor: "Don't do $var_" - Lar.
scriptkitty Posted May 25, 2005 Posted May 25, 2005 Nice one. I had a few systems that had a bit of a problem, so I shortened it a bit and put in in a function. func IE_connect() ; returns the internet explorer object if sucessful or 0 if it fails. ; mainly from DaleHohm's code Dim $ObjShell = ObjCreate("Shell.Application") Dim $ObjShellWindows = $ObjShell.Windows(); collection of all ShellWindows (IE and File Explorer) Dim $ObjIE For $Window in $ObjShellWindows If StringInStr($window.LocationURL,"https:")>0 or StringInStr($window.LocationURL,"http:")>0 or StringInStr($window.LocationURL,"ftp:")>0 Then $ObjIE = $Window ExitLoop; We found it... Else $ObjIE = 0 EndIf Next If isObj($ObjIE) Then ConsoleWrite("--> $ObjIE now points to an IE Instance connected" & @CR) Else ConsoleWrite("--> No IE instance was found connected" & @CR) EndIf Return $ObjIE EndFunc Now I just need to find/make one for firefox like this. AutoIt3, the MACGYVER Pocket Knife for computers.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now